OS X Yosemite環境のVagrantをポート80で運用する方法
ちょっと困ったので調べてみました。
自分のローカル環境ではMac上にMAMPなどは置いておらず、開発用のローカルサーバは Vagrant上のApacheやMySQLを使用しています。
Vagrant(VirtualBox)では通常の方法ではホストマシン→ゲストマシンに対して 標準ポート(HTTPの場合は80)でポートフォワードを行うことができません。 (Windowsの場合は可能ですが警告が出ます、Macは起動すらしません)
警告が出る理由も分かりますし、ポート8080などで運用することが正しいとは思いつつも Windows環境と揃えたいなどの理由でこれまでipfwを使用して無理やりホストマシン上で 80→8080のポートフォワードを行っていました。
これまではipfwがあったので以下のような設定で良かったのですが、 Yosemiteに変わってipfwが削除されてしまいました。(正確にはMountainLionの時から非推奨だったようです)
sudo ipfw add 100 fwd 127.0.0.1,8080 tcp from any to me 80
代替手段を探してみたところYosemiteからはPFを使用するようです。
Vagrantの起動時にPFの設定を行いたため、まず最初にvagrant-triggersのインストールを行います。
vagrant plugin install vagrant-triggers
次にVagrantfileに以下の記述を追加します。
config.trigger.after [:provision, :up, :reload] do
system('echo "
rdr pass on lo0 inet proto tcp from any to 127.0.0.1 port 80 -> 127.0.0.1 port 8080
" | sudo pfctl -ef - > /dev/null 2>&1; echo "==> Fowarding Ports: 80 -> 8080 & Enabling pf"')
end
config.trigger.after [:halt, :destroy] do
system("sudo pfctl -df /etc/pf.conf > /dev/null 2>&1; echo '==> Removing Port Forwarding & Disabling pf'")
end
ここまで設定が完了した状態でVagrantを起動すると起動時に PFの設定が行われホストマシン上で80->8080のポートフォワードが設定されます。