特定のポートの転送

特定のポートの転送

特定の 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 を別のマシンに直接転送できます。

関連情報