実際のIP/ポートを公開せずにiptablesでトラフィックを転送する

実際のIP/ポートを公開せずにiptablesでトラフィックを転送する

送信ホストに異なる 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必要かどうかはわかりません。

出典参照

関連情報