ポート変更による DNAT が機能しない

ポート変更による DNAT が機能しない

VM コンテナ上で NAT を確立するために次のコマンドを使用しています:

iptables -t nat -A PREROUTING -d ${MAIN_IP} -p tcp --dport ${2} -j DNAT --to-destination ${SUBNET}${3}

  • MAIN_IPはメインサーバーのグローバルIPです
  • SUBNET は VM サブネットの最初の 3 つの数字です (例: 「192.168.1」)。
  • $2は転送したいポートです
  • $3は最後のサブネットセグメント、例:20

これは、直接 NAT の場合は正常に機能します。

しかし、今日は SSH ポートへの DNAT を宣言したかったので、わかりやすくするために $2 を 5022 に、$3 を 20:22 に設定しました。結果は次のようになります。

iptables -t nat -A PREROUTING -d ${MAIN_IP} -p tcp --dport 5022 -j DNAT --to-destination 192.168.1.20:22

しかし、これは機能しません。VM に ssh しようとすると、接続がタイムアウトします。nat を使用しない場合はタイムアウトしないので、問題なく動作することに注意してください。NAT 経由でのみ機能しません。ssh [email protected]

コンテナ サーバーでは UFW が有効になっていません。ほとんど何もリッスンしないので、何も閉じる必要はありません (そう願っています)。

DNAT ルールは正しいと想定していますが、何がブロックされているのかをどのように判断すればよいでしょうか?

編集: NAT テーブルの出力:

#iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
DNAT       tcp  --  anywhere             my-server         tcp dpt:2113 to:192.168.1.35
DNAT       tcp  --  anywhere             my-server         tcp dpt:2115 to:192.168.1.35

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
MASQUERADE  all  --  anywhere             anywhere

編集 2: VM sshd が複数のポートを listen するようにすることで、一時的に問題を解決しています。この方法では、NAT は正常に動作します。

関連情報