LAN内でテスト

某ソフトのクローンを作ってLAN内でテストした時の方法についてメモ。
このソフトはグローバルIPを取得してからではないと本格稼働してくれない。
自分のクローンのほうはどうにでもいじれるのだが、本家のほうはいじってコンパイルするのが面倒だったのでグローバルと思いこませることにした。

Windows機 本家を動かす IPアドレス192.168.1.24 -> 12.0.0.2 と思いこませる
Linux機 クローンを11個動かす IPアドレス192.168.1.21 -> 12.0.0.1 と思いこませる
まず Windows機で12.0.01へのルーティングを192.168.1.21に投げる

route add 12.0.0.1 192.168.1.21

次にLinux機でNATをかける。

  • DNATを使って12.0.0.1行きを自分のマシン行きに変更
  • DNATを使って12.0.0.2行きを自分のWindows機行きに変更
  • SNATを使ってWindows機に向かうパケットを12.0.0.1から来たように見せる
$IPTABLES -t nat -A PREROUTING -d 12.0.0.1 -j DNAT --to 192.168.1.21
$IPTABLES -t nat -A OUTPUT -d 12.0.0.2 -j DNAT --to 192.168.1.24
$IPTABLES -t nat -A POSTROUTING -d 192.168.1.24 -j SNAT --to-source 12.0.0.1

あとはWindows機から来たパケットを12.0.0.2から来たように見せたかったのだが…。これはうまくいかなかった。SNATはPOSTROUTINGでしか動かないし、このパケットはPOSTROUTINGを通らない。
これはもう仕方がないので、クローン側で192.168.1.24を12.0.0.2と見るようにした。

iptables は結構いろいろなことができるので便利。