我使用此命令在我的 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 就可以正常運作了。