送信ホストに異なる IP/ポートを表示せずに、iptables を使用してトラフィックを転送したい。
私のアプリケーションは、TCP を使用してホスト xx15.42、ポート 23555 をリッスンします。クライアントは xx15.42:5555 に接続します。そのポートをクライアントに公開せずに、接続をポート 23555 に転送したいと考えています。
私はすでに DNAT の使用を試みました:
iptables -t nat -A PREROUTING -p tcp --dport 5555 -j DNAT --to-destination x.x.15.42:23555
しかし、クライアントにはポート 23555 に接続していることが表示されます。
REDIRECT も使用してみましたが、何らかの理由でまったく機能しません。クライアントが接続できません。
iptables -t nat -A PREROUTING -p tcp --dport 5555 -d x.x.15.42 -j REDIRECT --to-port 23555
アプリケーションがポート 5555 でリッスンしているように見せながら、このトラフィックを転送するにはどうすればよいですか?
答え1
したがって、私が使用した最初のファイアウォール ルールは機能します。
iptables -t nat -A PREROUTING -p tcp --dport 5555 -j DNAT --to-destination x.x.15.42:23555
唯一の問題は、サーバーがクライアントに、私が望んでいたポート 5555 ではなくポート 23555 に接続するように指示していたことです。サーバー側でこれを変更すると、問題は解決します。
答え2
私は iptables についてまだ少ししか知らないので、これを試していただけますか:
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 5555 -j DNAT --to x.x.15.42:23555
iptables -A FORWARD -p tcp -d x.x.15.42 --dport 23555 -j ACCEPT
両方の行が必要です(FORWARDオプションがないことが原因だと思いますが)が、インターフェースオプションが-i eth0
必要かどうかはわかりません。