私はWebサービスアーキテクチャに取り組んでいます。Vagrantではなく、ネイティブホストマシンで実行する必要のあるソフトウェアがいくつかあります。しかし、ゲストでいくつかのクライアントサービスを実行したいと思います。
Vagrantのconfig.vm.forwarded_port
パラメーターはホストのポートを開き、データをゲストに送信します。しかし、どうすればゲストのポートを開いてデータをホストに送信できますか?(それでもポート転送ですが、逆方向です。)
私はWebサービスアーキテクチャに取り組んでいます。Vagrantではなく、ネイティブホストマシンで実行する必要のあるソフトウェアがいくつかあります。しかし、ゲストでいくつかのクライアントサービスを実行したいと思います。
Vagrantのconfig.vm.forwarded_port
パラメーターはホストのポートを開き、データをゲストに送信します。しかし、どうすればゲストのポートを開いてデータをホストに送信できますか?(それでもポート転送ですが、逆方向です。)
回答:
を実行するとvagrant ssh
、実際には次の基本的なコマンドが使用されます。
ssh -p 2222 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=ERROR -o IdentitiesOnly=yes -i ~/.vagrant.d/insecure_private_key vagrant@127.0.0.1
SSHは、-R guestport:host:hostport
オプションで必要な方向へのポートの転送をサポートします。したがって、12345
ゲストのポートに接続してに転送するlocalhost:80
場合は、次のコマンドを使用します。
ssh -p 2222 -R 12345:localhost:80 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=ERROR -o IdentitiesOnly=yes -i ~/.vagrant.d/insecure_private_key vagrant@127.0.0.1
Eeroが正しくコメントするので、コマンドを使用することもできますvagrant ssh -- -R 12345:localhost:80
。これは、より簡潔なコマンドでも同じ効果があります。
vagrant ssh -- -R 12345:localhost:80
。これは、sshオプションの構文は次の-R ポート:ホスト:ホスト側:[bindするアドレス]最初の数はゲストマシン内で待機するポート番号、および最後の二つである、あるサービスのアドレスをホストマシンから見えるように。
vagrant ssh-config | ssh -F /dev/stdin $BOX -R $PORT_VM:localhost:$PORT -N
Vagrant: Up and Running
Vagrantの作成者が書いた本(発行日:2013年6月12日)で、ゲストマシンはホストマシンで実行されているサービスにアクセスできないと述べました。
を使用する代わりに、を使用Forwarded Ports
してプライベートネットワークを設定できますHost-Only Networks
。
使用しての賛否Host-Only Networks
を超えますForwarded Ports
ゲストマシンはホストマシンで実行されているサービスにアクセスできます
この機能はあなたの問題を解決します。
ゲストマシンは、他のゲストマシンで実行されているサービスにアクセスできます
この機能は、サービスを複数のマシンに分割して、実稼働環境をより正確に模倣するのに非常に役立ちます。
安全
外部マシンには、ゲストマシンで実行されているサービスにアクセスする方法がありません
より少ない作業
すべてを構成する必要はありません Forwarded Port
設定方法 Host-Only Networks
config.vm.network :"hostonly", "192.168.0.0"
#Vagrantバージョン#1
config.vm.network :private_network, ip: "192.168.0.0"
#Vagrantバージョン#2
この行をVagrantfile
含めると、静的IPアドレスを持つプライベートネットワークを作成するようにvagrantに指示します。192.168.0.0
ホストのIPアドレスは常に同じIPアドレスですが、最後のオクテットは1です。前の例では、ホストマシンはIPアドレスを持っています192.168.0.1
。
Vagrant: Up and Running
)、ブリッジネットワークをセットアップできます。ブリッジネットワークでは、ローカルネットワーク内の他のマシンが仮想マシンにアクセスでき、その逆も可能です。ただし、IPアドレスはDHCPを介して割り当てifconfig
られるため、仮想マシンでIPアドレスを見つける必要があります。
192.168.0.0
しても機能しないことがわかりました。ホストマシンをカーリングまたはpingすると、接続に失敗しました。@Nucleonのアドレス(トピックのVagrantドキュメントと一致)を使用すると、宣伝どおりに機能しました。
config.vm.network :private_network, ip: "192.168.0.0"
し、ホストをカーリング/ pingすると、192.168.0.1
接続がタイムアウトしました。192.168.50.4
解決されるようにネットワークを構成します192.168.50.1
。つまり、で利用可能なホストです。
ゲストOS内のデフォルトゲートウェイを介してホストマシンのポートにアクセスできます。(通常、IPは10.0.2.2
です。)
たとえば、ホストマシンのポート8000でWebサーバーを実行している場合...
echo 'Hello, guest!' > hello
python -m SimpleHTTPServer 8000
Vagrant VM内から10.0.2.2:8000
(10.0.2.2
ゲストのデフォルトゲートウェイのIPが提供されている場合)にアクセスできます。
vagrant ssh
curl http://10.0.2.2:8000/hello # Outputs: Hello, guest!
ゲストOS内のデフォルトゲートウェイのIPを見つけるには、netstat -rn
(またはipconfig
Windowsゲストで)を実行し、宛先IP 0.0.0.0
(またはWindowsでは「デフォルトゲートウェイ」というラベルの付いたフィールド)の行を探します。
$ netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 10.0.2.2 0.0.0.0 UG 0 0 0 eth0
10.0.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.33.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
このIPは、を使用してプログラムで抽出できnetstat -rn | grep "^0.0.0.0 " | tr -s ' ' | cut -d " " -f2
ます。
ソース:vagrant virtualboxマシンからホストPostgreSQLに接続する方法。VirtualBoxゲストOSからホストマシンに接続しますか?
ifconfig
そしてip address
、私は必要ですが、どのような私を取得していなかったnetstat -rn
でした。
~/.ssh/config
ホストマシンのに以下を追加します。
Host 127.0.0.1
RemoteForward 52698 127.0.0.1:52698
経由でログインしてvagrant ssh
いる限り、Vagrantからホストマシンポート52698のサービスにアクセスできます。
netstat -lt
vagrant VMで実行し、次の行をメモすることで、動作することを確認できます。
tcp 0 0 localhost:52698 *:* LISTEN
tcp6 0 0 ip6-localhost:52698 [::]:* LISTEN
ホストマシンで実行されているサービスに、ループバックアドレスではなくローカルIPアドレスを介してアクセスできます。私は、ポート80(次にポート987)にhttpサーバーを作成し、curl
197.45.0.10:80および197.45.0.10:987(無実を保護するために実際のIPアドレスを変更)を使用してテストしました。それは両方の時間で動作し、特別なvagrant構成(public_network、no forwarded_portはありません)はありません。また、PuTTY経由で転送されるポートはいくつかありますが、ポート80および987は転送されません。したがって、ホストマシンのローカルまたはパブリックIPアドレスを使用してみてください。
また、別のゲストヴァグラントインスタンスにアクセス(sshでアクセス)したい場合public_network
は、次のVagrantfile
ようにポート22からの転送と同様に有効にすることができます。
config.vm.network "public_network"
config.vm.network "forwarded_port", guest: 22, host: 2200
その後、そのポートが開いている限り(つまり、ルーター構成でさらにポート転送を行う)、そのマシンにどこからでも、外の世界からでもアクセスできます。