備忘録のため,内容の正当性については責任を持ちません。

前回のエントリの続き。某所の共用サーバは結局 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)

手順

  1. まず,ホストの 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[/cc]
  2. ゲストからホストを経由して,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[/cc]
  3. ゲスト用の 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
  4. 変更を有効にする。
    $ sudo /etc/init.d/networking restart[/cc]
  5. ホスト側ネットワークの IP アドレスを NAT でゲストに割り当てる。
    $ sudo /sbin/iptables -A PREROUTING -t nat -i eth0 -d 172.16.0.2 -j DNAT --to 192.168.56.2[/cc]
  6. ゲストには VirtualBox のネットワーク設定で「ホストオンリーアダプタ」を割り当て,IP アドレスは 192.168.56.2,ゲートウェイは 192.168.56.1 を指定する。

以上で NAT 化のゲストがホスト側ネットワークの IP アドレスを使用できるようになった。あとはホスト側で適宜ファイアウォールを設定すれば良い。


(2010/06/10 追記)

とんでもないことが発覚した。ホストオンリーアダプタを使用していても、2 人以上のユーザでは使用できない。これは困った。

コメント

コメントする




CAPTCHA