LinuxホストのaliasについたIPアドレスを、VMWare上のゲストに割り当てる

タイトルのような事をやろうとして、かなりハマった末なんとか上手くいったので記録しておきます。


LLTVの物理サイトは、現在レンタルサーバ上で動いているのですが、jusが借りているホスティングマシン上のVMware serverに移行しようという話がずいぶん前から出ていました。VM 上ならばjus関係者じゃない人にアカウント発行しても、直接jusマシンはいじれないので問題ないですしね。


ということでjusが借りているさくらのホスティングIPアドレスの追加を申し込んだところ、現在接続しているネットワークではないIPアドレスが割り振られてきました。ifconfig alias でインターフェースにIPアドレスを追加して使用する想定のようです。

最初に割り当てられているIPアドレス: 219.94.132.66 (eth0)
追加で割り当てられたIPアドレス: 210.188.198.12 (eth0:0)

jusマシンはDebianなので、/etc/network/interfaces にこんな感じで記述します。

iface eth0:0 inet static
 address 210.188.198.12
 netmask 255.255.255.255

さて、ここからが問題です。VMWare上のVMにこの alias で付けた IP アドレスを割り当てるやり方がわかりません。

host上のネットワークと同一ネットワークならば、仮想Bridgeを使えばすんなりいくのでしょうが、別ネットワークなのでそうもいきません。
VMNATを使って出口インターフェースを指定する方法はないかと探ったのですが、どうもないようです。

wassr でつぶやいていたところ、umqさんより素晴らしいヒントが。

あぁ。ここまでさかのぼって状況をある程度把握しました。 やはり、ホストOS側でルーティングするんじゃないかと思いました < http://communities.vmware.com/message/479214#jive-MEuEp906Wgjqt0XK

http://wassr.jp/user/umq/statuses/4nj3VizR6Z

ということでこの通りに VM guest に host only の固定IPを振り、VMware側でNATして外部に出れるようにしてから、さらにhost 側で NAT をしてやればいい感じです。*1


まずは guest 上の設定ですが、host only NATネットワークなので vmnet8 につなぎます。

/etc/vmware/vmnet8/dhcpd/dhcpd.conf を見ると分かりますが、128-254 が dhcp range なので、128 より小さい値で VM guest に固定 IP を振ります。今回は 172.16.63.10 としました。


次に、host 側で alias についたアドレスを VM guest に転送してやります。

# iptables -t nat -A PREROUTING -d 210.188.198.12 -i eth0 -j DNAT --to-destination 172.16.63.10
# iptables -t nat -A POSTROUTING -s 172.16.63.10 -i eth0 -j SNAT --to-source 210.188.198.12

これで無事に外部から来た 210.188.198.12 宛のパケットを vm guest に NAT してやる事ができるようになりました。*2

最後に、再起動しても大丈夫なように /etc/network/interfaces に追記しておきます。

iface eth0 inet static
 address 219.94.132.66 
 <省略>
 up iptables -t nat -A PREROUTING -d 210.188.198.12 -i eth0 -j DNAT --to-destination 172.16.63.10
 up iptables -t nat -A POSTROUTING -s 172.16.63.10 -i eth0 -j SNAT --to-source 210.188.198.12

*1:最初HostOnlyを用いると書いてましたが、NATの間違いでした。

*2:最初ipchainsと書きましたがiptablesの間違いです