Vagrantfileの実例を交えつつvagrantのネットワークについてまとめます。
ここに記載の内容はこのブログにほぼ全て記載されています。
言葉 | 意味 |
---|---|
ホスト | vagrantコマンドを実行するホスト |
ゲスト | vagrantコマンドで作成されたVM |
内部ネットワーク | vagrant内のネットワーク |
外部ネットワーク | ホスト外のネットワーク |
Vagrantfileのnode1はゲスト1、node2はゲスト2。 |
ホストオンリーアダプタ
仮想ネットワークインタフェースを作成し、ホストとゲストの間での閉じたネットワークを形成。ゲストとホスト間のみ通信可能。ゲスト同士の通信はできない。
Vagrantfile
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "centos65-x86_64-20140116"
config.vm.box_url = "https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3/centos65-x86_64-20140116.box"
config.vm.define :node1 do |node|
node.vm.box = "centos65-x86_64-20140116"
end
config.vm.define :node2 do |node|
node.vm.box = "centos65-x86_64-20140116"
end
end
ifconfig抜粋(ゲスト1)
eth0 Link encap:Ethernet HWaddr 08:00:27:4F:B8:06
inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2429 errors:0 dropped:0 overruns:0 frame:0
TX packets:1469 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:208257 (203.3 KiB) TX bytes:173198 (169.1 KiB)
vagrant ssh node1
や vagrant ssh node2
でそれぞれのゲストにアクセス可能。
eth0のネットワークを利用。それぞれのゲストで全て同じアドレス。
プライベートネットワーク
内部ネットワークを利用してホストとゲスト、ゲスト間同士の通信が可能。
Vagrantfile
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "centos65-x86_64-20140116"
config.vm.box_url = "https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3/centos65-x86_64-20140116.box"
config.vm.define :node1 do |node|
node.vm.box = "centos65-x86_64-20140116"
node.vm.network :private_network, ip:"192.168.33.11"
end
config.vm.define :node2 do |node|
node.vm.box = "centos65-x86_64-20140116"
node.vm.network :private_network, ip:"192.168.33.12"
end
end
ifconfig抜粋(ゲスト1)
eth0 Link encap:Ethernet HWaddr 08:00:27:4F:B8:06
inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2429 errors:0 dropped:0 overruns:0 frame:0
TX packets:1469 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:208257 (203.3 KiB) TX bytes:173198 (169.1 KiB)
eth1 Link encap:Ethernet HWaddr 08:00:27:22:92:33
inet addr:192.168.33.11 Bcast:192.168.33.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:44 errors:0 dropped:0 overruns:0 frame:0
TX packets:50 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:4314 (4.2 KiB) TX bytes:5534 (5.4 KiB)
ホストオンリーアダプタ以外に、内部ネットワーク経由でホストからnodeXに ssh -l vagrant 192.168.33.1X
で接続可能。node1, node2の間も接続可能。
外部ネットワークからはアクセス出来ない。
仮想内部ネットワーク
ゲストとホストはホストオンリーアダプタでのみアクセス可能。
内部ネットワークはゲスト同士は接続できるが、ホストからゲストへはアクセス出来ない。
Vagrantfile
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "centos65-x86_64-20140116"
config.vm.box_url = "https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3/centos65-x86_64-20140116.box"
config.vm.define :node1 do |node|
node.vm.box = "centos65-x86_64-20140116"
node.vm.network :private_network, ip:"192.168.33.11", virtualbox__intnet: "test_net"
end
config.vm.define :node2 do |node|
node.vm.box = "centos65-x86_64-20140116"
node.vm.network :private_network, ip:"192.168.33.12", virtualbox__intnet: "test_net"
end
end
ホストからゲストへは vagrant ssh nodeX
でアクセス可能。ホストからゲストへ ssh -l vagrant 192.168.33.1X
でアクセス出来ない。ゲスト間の閉じたネットワーク(仮想内部ネットワーク)同士のみアクセス可能。
virtualbox__intnet
を指定することでゲスト同士の仮想内部ネットワークを構築できる。値 test_net
は任意の文字列でよい。
ポートフォワーディング
ホストの特定のポートへのアクセスをゲストへ転送する。外部ネットワークからアクセス可能。
Vagrantfile
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "centos65-x86_64-20140116"
config.vm.box_url = "https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3/centos65-x86_64-20140116.box"
config.vm.define :node1 do |node|
node.vm.box = "centos65-x86_64-20140116"
node.vm.network :forwarded_port, guest:22, host:2001, id:"ssh"
node.vm.network :forwarded_port, guest:80, host:8080, id:"http"
node.vm.network :private_network, ip:"192.168.33.11"
end
end
ホストオンリーアダプタ以外に、ホストから ssh -l vagrant -p 2001 127.0.0.1
もしくは ssh -l vagrant -p 22 192.168.33.11
でsshアクセス可能。
ホストから http://127.0.0.1:8080
もしくは http://192.168.33.11:80
でhttpアクセス可能。
実際ホスト側で lsof -i :2001
や lsof -i :8080
を実行するとLISTEN状態になっている。
パブリックネットワーク
外部ネットワークから直接ゲストにアクセス可能。
ホストはiPhoneのテザリングを利用してネットに接続しているものとする。
Vagrantfile
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "centos65-x86_64-20140116"
config.vm.box_url = "https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3/centos65-x86_64-20140116.box"
config.vm.define :node1 do |node|
node.vm.box = "centos65-x86_64-20140116"
node.vm.network :public_network
end
end
vagrant up
を実行し、どのインタフェースを使うか選択する。(この例ではWi-Fi (AirPort))
IPアドレスはDHCPで自動で割り当てられるのでVM起動後ホストオンリーアダプタでアクセスして
アドレスを確認する。ゲストでhttpdが動いている場合、アイフォンのWebブラウザにゲストのIPアドレスを入力すると、ブラウザにゲストのWebページが表示される。
IPアドレスを指定して起動することもできるが、ゲスト側ではちゃんと設定できているように見えてもホストや外部ネットワークからは接続できなかった。IPを指定せず、DHCPで自動的に割り当てられたIPアドレスだとアクセスできた。