Help us understand the problem. What is going on with this article?

vagrantのネットワークについて

More than 3 years have passed since last update.

Vagrantfileの実例を交えつつvagrantのネットワークについてまとめます。
ここに記載の内容はこのブログにほぼ全て記載されています。

スクリーンショット 2014-08-11 22.43.18.png

言葉 意味
ホスト vagrantコマンドを実行するホスト
ゲスト vagrantコマンドで作成されたVM
内部ネットワーク vagrant内のネットワーク
外部ネットワーク ホスト外のネットワーク

Vagrantfileのnode1はゲスト1、node2はゲスト2。

ホストオンリーアダプタ

仮想ネットワークインタフェースを作成し、ホストとゲストの間での閉じたネットワークを形成。ゲストとホスト間のみ通信可能。ゲスト同士の通信はできない。

スクリーンショット 2014-08-11 22.51.28.png

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 node1vagrant ssh node2 でそれぞれのゲストにアクセス可能。
eth0のネットワークを利用。それぞれのゲストで全て同じアドレス。

プライベートネットワーク

内部ネットワークを利用してホストとゲスト、ゲスト間同士の通信が可能。

スクリーンショット 2014-08-11 23.25.11.png

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の間も接続可能。
外部ネットワークからはアクセス出来ない。

仮想内部ネットワーク

ゲストとホストはホストオンリーアダプタでのみアクセス可能。
内部ネットワークはゲスト同士は接続できるが、ホストからゲストへはアクセス出来ない。

スクリーンショット 2014-08-11 23.20.50.png

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 は任意の文字列でよい。

ポートフォワーディング

ホストの特定のポートへのアクセスをゲストへ転送する。外部ネットワークからアクセス可能。

スクリーンショット 2014-08-12 0.04.01.png

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 :2001lsof -i :8080 を実行するとLISTEN状態になっている。

パブリックネットワーク

外部ネットワークから直接ゲストにアクセス可能。
ホストはiPhoneのテザリングを利用してネットに接続しているものとする。

スクリーンショット 2014-08-12 0.24.02.png

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アドレスだとアクセスできた。

リンク

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away