2つのネットワークインターフェイスを備えたゲートウェイのように動作するコンピュータがあります。
eth0
LAN:192.168.1.0/24eth1
WAN:(XXX.XXX.XXX.XXX
私の公開IP)
このマシンにはvirtualboxに3つのVMゲストがあります。これらのすべてにはブリッジネットワークがあり、DNSが提供する静的IPがあります。
私は次のようなiptablesを持っています
*filter
-A FORWARD -i eth1 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth0 -o eth1 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
# Rules a webserver VM
*nat
-A POSTROUTING -o eth1 -j MASQUERADE
-A PREROUTING -d XXX.XXX.XXX.XXX/32 -i eth1 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.1.100
-A POSTROUTING -s 192.168.1.100/32 -j SNAT --to-source XXX.XXX.XXX.XXX
LANは仮想マシンにアクセスできますが、WANから仮想マシンにアクセスしようとすると機能しません。何が問題なの?
答え1
フィルタテーブルのFORWARDのデフォルトポリシーがDROPであると仮定するのは正しいですか? (そうでない場合はとにかくすべてを受け入れるので、これら2つのフィルタリングルールは意味がありません。)
この仮定が正しい場合、問題は新しいパケットを仮想マシンに転送するためのACCEPTルールがないことです。次のルールを追加してください。
iptables -A FORWARD -i eth1 -o eth0 -p tcp -d 192.168.1.100 --dport 80 -j ACCEPT
ところで、VMからの着信パケットのSNATルールは冗長です。すでにeth1を通過するすべてのパケットをなりすましています。