端口更改後的 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 是我的虛擬機器子網路的前三個數字,例如「192.168.1」。
  • $2 是我要轉送的端口
  • $3 是最後一個子網段,例如 20

這對於直接 NAT 來說效果很好。

但今天我想聲明一個 DNAT 到 SSH 端口,所以我將 $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

然而,這個不起作用:當我嘗試 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 監聽多個連接埠的問題。這樣 NAT 就可以正常運作了。

相關內容