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