ネットワークのテスト環境をVMwareで真面目に
──┐ ┌── ├─┬──┤ ──┘ │ └── host OS │192.168.1.10 ==================== VMware ==================== │bridge 192.168.1.11,192.168.1.12,... ┌───┴───┐ ┌───────┐ │ wan router │ │global servers│ └───┬───┘ └───┬───┘ │1.2.3.1/24 vmnet5 │1.2.3.17/28 ├───────────────────┤ │1.2.3.2/28 │1.2.3.129 ┌───┴───┐192.168.1.1/24 ┌───┴───┐ │ lan router ├─────┬─────┤ local router │ └───┬───┘ │ ↑ └───┬───┘ │192.168.0.1/24 │ 192.168.1.2/24 │192.168.2.1/24 │ │ │ ┌───┴───┐ ┌───┴───┐ ┌───┴───┐ │ servers... │ │inner servers │ │ clients... │ └───────┘ └───────┘ └───────┘ vmnet2 vmnet3 vmnet4
まだ出来てない部分もあるけど、こんな感じで想定。
host os はリアルネットワークの inner servers に位置する。
外部からテスト用のサーバに接続する場合は 192.168.1.11 を指定すると、wan router が 1.2.3.11 などの仮想グローバルIPに変換して lan router が 192.168.0.11 などの仮想サーバ用IPに変換して servers に到達する。
これは現在の環境をほぼそのまま書いていて(いいのか?)lan routerはグローバルIPを16個管理、local router はテスト用回線&社内クライアント用回線を表している。
vmnet5は 1.2.3.0/24 でも 1.2.0.0/16 でも良い・・と思う。仮想NICの設定は変えていなくて、仮想NIC自体は192.168で設定されたままだ。それでも仮想NICに繋ぐ端末同士のIPに矛盾がなければ上手く動くようだ。
wan router は仮想WAN(?)とリアルネットワークを繋ぐNATで、global servers はインターネット上にあるサーバを想定している。
iptables の設定は
############### # wan router ############### # リアルネットワークから仮想ネットワークへの接続 iptables -t nat -A PREROUTING -j DNAT -d 192.168.1.11 -i eth0 --to 1.2.3.11 iptables -t nat -A POSTROUTING -j SNAT -d 1.2.3.11 --to 1.2.3.1 ... # 仮想ネットワークから外部への通信 iptables -t nat -A POSTROUTING -j SNAT -d ! 1.2.3.0/23 --to 192.168.1.10 ############### # lan router # 現実のルータ設定を写す ############### # 外部へ iptables -t nat -A POSTROUTING -j SNAT -o eth0 -s 192.168.0.0/28 --to 1.2.3.2 iptables -t nat -A POSTROUTING -j SNAT -o eth0 -s 192.168.1.0/24 --to 1.2.3.2 # サーバ毎に設定を追加 iptables -t nat -A PREROUTING -j DNAT -d 1.2.3.11 --to 192.168.0.11
vmnet5に属するノードのルーティング設定も必要。
route add -net 1.2.3.0 netmask 255.255.255.240 gw 1.2.3.2 route add -net 1.2.3.16 netmask 255.255.255.240 gw 1.2.3.17 ...
自分自身がgwの場合は除く。
これは /etc/network/interfaces に書くと楽。
そんな感じで。。。あとは lan router と global servers を設定すると今の社内ネットワークと同一のものをVMware上に再現できる。
仮想インターネットのアドレス範囲が狭いが、支障はないように思う。
で、ここまでして何がやりたいのかと言うと・・。
clients からローカル回線を使ってサーバに接続したりテスト用回線を使ってサーバに接続したり、global servers とのメールのやり取りが出来るのかをテストしたかったわけです。
global serversをプロバイダと仮定すると、例えばWindowsなんかをインストールしてメーラから servers に接続して送受信できるか、とかね。
これ書いてて、何だか凄く無駄手間な気がしてきた・・・・。
ネットワーク環境が同じなので、テストサーバから本番にコピーする時は /etc 以下も含めてrsync出来るのが楽かなーと思ってたんだけども・・これだとIPアドレスをささっと書き換えた方が楽なのか?
一度仮想ルータ群の設定さえしてしまえば・・とか思っているのだが。
# 何も考えてなかったけど、テストサーバ群を一気に全部動かすのには無理があるよなぁ・・。
# やはり物理的なネットワークを別途用意した方がいいかも