Goal
- MacOSXをHostとして、CentOSをGuestとしたVMをVagrant/VirtualBoxで起動し、HTTPサーバをたててWebアプリを開発する
- Guest(CentOS/Vagrant)をpublic_networkの固定ipつきで起動し、同ネットワークからのアクセスを可能にする
- iPhone, iPadを同じWifiネットワークに接続し、固定ip直うちでWeb画面にアクセスする
- ホスト名でのVirtualHostを有効にできるように、WebサーバがのっているGuest(CentOS/Vagrant)に自前のDNSもたてて名前解決ができるようにする(iPhoneはjail breakしないとhostsをいじれないらしいので、その代替案...)
この例では、Wifiネットワークアドレスを192.168.2としている.
192.168.2.XXXはMac OSXが外と通信するためのネットワークインタフェース.
192.168.2.YYYはiPhone/iPadが外と通信するためのネットワークインタフェース(MacOSXと同じWifiを選択する).
192.168.2.ZZZはvagrantのホストが外部と直接通信するためのネットワークインタフェース.
vagrantに固定ipを割り当てて起動
固定ip=192.168.2.ZZZとしてWifiにブリッジして起動する.
bridgeは指定しなければvagrant起動時に選べるようになるので、その他のネットワークを選択したい場合は都度接続先を決めれば良い.
public_networkのIPはprivate_networkとは別のアドレスを指定する.
Mac OSXのIPを調べて、同じネットワーク以下のアドレスをもつようにする(今回は192.168.2をprefixにする).
config.vm.network :public_network, ip: '192.168.2.ZZZ', bridge: 'en0: Wi-Fi (AirPort)'
確認
Guestマシンのネットワークインタフェースが増えていることを確認する.
ifconfig | grep '192.168.2.ZZZ'
Hostマシン(Mac OSX)からpingコマンドで疎通できることを確認する.
ping 192.168.2.ZZZ
Guestマシン(CentOS,Vagrant)でapacheなどを起動して、port80をlistenしておく.
netstat -an | grep :80
# 192.168.2.ZZZ:80でLISTEN状態になっていること
iPhone/iPadからブラウザのアドレスバーにIP(192.168.2.ZZZ)直うちして、vagrantのapacheへリクエストがくることを確認する.
自前のDNSをたてて、ローカルドメインでアクセス可能にし、ホスト名でのVirtualHostを使えるようにする
IP直うちでアクセス可能にするところまでは簡単だけど、DNSサーバをたてるのはいろんな作業がいるので注意.
DNS設定
以下を参考にして、Guestマシン(CentOS,Vagrant)にDNSサーバをたてる.
djbdnsでローカルドメインの名前解決をおこなう
↑の例では、
192.168.2.ZZZ => 192.168.2.12
192.168.2.XXX => 192.168.2.100
として設定しています.
iPhone/iPadのDNSサーバを指定する
ネットワーク設定で、192.168.2.ZZZのアドレスを指定する.
設定 > Wi-Fi > 接続されているネットワークの(i)ボタン > DHCP > DNS
iPhone/iPadブラウザのアドレスバーにローカルドメインを入力してvagrantのapacheなどにアクセスできるようになればOK.
Environment
CentOS, Vagrant
uname -a
# Linux *** 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
cat /etc/issue
# CentOS release 6.5 (Final)
# Kernel \r on an \m
Mac OSX
OSX Yosemite version 10.10.1
iPhone
iOS 8.1.2