[Vagrant & VirtualBox] Vagrant: 同じLAN内の端末から仮想マシンにアクセスする

例えばモバイルの開発で iPhone からアクセスしたり、同僚に見てもらうような場合に。

Vagrantfile の設定で config.vm.network :public_network を利用して bridge します。

Vagrantfile

public_network の設定を追加します。

Vagrantfile
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "chef/centos-6.5"
  config.vm.provision :shell, :path => "provision.sh"
  config.vm.network :public_network, ip: "10.0.1.100", bridge: "en1: Wi-Fi (AirPort)"
end

IPを指定する

指定せずに一度 vagrant upvagrant ssh
使える ip を調べてから設定しました。

[vagrant@localhost ~]$ ifconfig | grep inet
          inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fece:83d/64 Scope:Link
          inet addr:10.0.1.10  Bcast:10.0.1.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:feb7:5b67/64 Scope:Link
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host

ネットワークや DHCP によって配られる ip が変わってくると思います。

bridge するインターフェースを指定する

利用している端末によって違いがあるので調べます。
(vagrant を動かしている端末)

% VBoxManage list bridgedifs |grep '^Name:'
Name:            en1: Wi-Fi (AirPort)
Name:            en0: Ethernet
Name:            p2p0

これを指定しないと、下記のように vagrant up 時に毎回聞かれます。

==> default: Available bridged network interfaces:
1) en1: Wi-Fi (AirPort)
2) en0: Ethernet
3) p2p0
    default: What interface should the network bridge to? 1

つかいかた

いつも通り vagrant up すればOK。
あとは指定したアドレス、ここでは 10.0.1.100 を開けばドキュメントルートが表示されます。
2014-06-11_vagrant_01

synced_folder もあわせてつかう

synced_folder もあわせて使おうとしたら、下記のエラーが出ました。

NFS requires a host-only network to be created.
Please add a host-only network to the machine (with either DHCP or a
static IP) for NFS to work.

private_network も作ってあげれば、問題なく使えました。
例えばこんな感じで。

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "chef/centos-6.5"
  config.vm.provision :shell, :path => "provision.sh"
  config.vm.network :private_network, ip: "192.168.33.10"
  config.vm.network :public_network, ip: "10.0.1.100", bridge: "en1: Wi-Fi (AirPort)"
  # synced_folder for Mac OS X
  config.vm.synced_folder "../dist", "/var/www/html/", type: "nfs"
end

補遺