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 は正常に動作します。