前回のエントリの続き。某所の共用サーバは結局 Ubuntu 10.04 + Sun VirtualBox 2.0 で実現しようと思う。その際,ホスト側ネットワークの IP アドレスは十分に余裕があるが,
- ホスト側でゲストのファイアウォールを設定したい
- VirtualBox は 2 人以上のユーザが 1 つの NIC にブリッジ接続できない
などの事情により,ゲストはホストの NAT 下に置くことにした。しかし,VirtualBox の NAT 接続では,ホストからゲストにアクセスすることができない。今回は,ホスト側の IP アドレスを NAT を用いてゲストに割り当て,ホスト側ネットワークからゲストにアクセスできるようにする方法をメモしておく。
前提
今回は次のような環境を前提とする。
- ホスト側ネットワーク: 172.16.0.0/16
- vboxnet0 ネットワーク: 192.168.56.0/24
- ホストの IP アドレス: 172.16.1.1 (eth0), 192.168.56.1 (vboxnet0)
- ゲストの IP アドレス: 192.168.56.2 (⇔ 172.16.1.2)
手順
- まず,ホストの Ubuntu をルータ化するために,パケット転送を有効にする。
$ sudo echo "1" > /proc/sys/net/ipv4/ip_forward
$ sudo sed -i -e "s/net.ipv4.ip_forward=0/net.ipv4.ip_forward=1/" /etc/sysctl.conf - ゲストからホストを経由して,IP マスカレードでネットワークに接続できるようにする。
$ sudo /sbin/iptables -A INPUT -i vboxnet0 -s 192.168.56.0/24 -j ACCEPT
$ sudo /sbin/iptables -A POSTROUTING -t nat -o eth0 -s 192.168.56.0/24 -j MASQUERADE - ゲスト用の IP アドレスをホストに追加するため,/etc/network/interfaces を編集する。
auto lo iface lo inet loopback post-up iptables-restore < /etc/iptables.up.rules # ここから auto eth0:0 iface eth0:0 inet static address 172.16.1.2 netmask 255.255.0.0
- 変更を有効にする。
$ sudo /etc/init.d/networking restart
- ホスト側ネットワークの IP アドレスを NAT でゲストに割り当てる。
$ sudo /sbin/iptables -A PREROUTING -t nat -i eth0 -d 172.16.0.2 -j DNAT --to 192.168.56.2
- ゲストには VirtualBox のネットワーク設定で「ホストオンリーアダプタ」を割り当て,IP アドレスは 192.168.56.2,ゲートウェイは 192.168.56.1 を指定する。
以上で NAT 化のゲストがホスト側ネットワークの IP アドレスを使用できるようになった。あとはホスト側で適宜ファイアウォールを設定すれば良い。
(2010/06/10 追記)
とんでもないことが発覚した。ホストオンリーアダプタを使用していても、2 人以上のユーザでは使用できない。これは困った。
コメント