
特定の IP:ポートを Linux マシン上の特定の IP:ポートに転送しようとしました。次のコマンドで iptables を使用しました。
iptables -t nat -A OUTPUT -p tcp -d 10.0.2.5 --dport 80 -j DNAT --to-destination 69.31.21.42:80
10.0.2.5 は、コマンドが機能するかどうか確認するために選択した任意のアドレスで、69.31.21.42 はパブリック Web サイトのアドレスです。次に、転送が機能していることを確認しました。 を実行してnmap -p 80 10.0.2.5
、肯定的な結果が得られました。ここまでは非常に良好です。ただし、次に を実行しようとしたところnmap -p 81 10.0.2.5
、肯定的な結果が得られました。これは、ポート 80 のみを転送したかったため、予想外の結果でした。 を実行して、iptables -t nat -L
確かに 10.0.2.5 ホスト全体が 69.31.21.42:80 にマップされていることに気付きました。
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
DNAT tcp -- anywhere ip-10-0-2-5.ec2.internal tcp dpt:http to:69.31.21.42:80
iptables コマンドに何が欠けているのでしょうか? なぜ--dport
機能しないのでしょうか?
答え1
POSTROUTING
やりたいことを実行するにはチェーンを使用する必要があります。
iptables -t nat -A POSTROUTING -p tcp -d 10.0.2.5 --dport 80 -j SNAT --to 69.31.21.42:80
iptables のマニュアル
and POSTROUTING (for altering packets as they are about to go
out)
答え2
まず、TCP IP:ポートを別の IP:ポートに転送することはできないことに注意してください。これは UDP でのみ可能であり、そのための別の Perl スクリプトがあります。
はい、特定のポートではなく、IP を別のマシンに直接転送できます。