午安.我正在使用 Ubuntu 伺服器開發一個項目,並且設置了 3 個虛擬機器。目前有防火牆、路由器和客戶端 (1)。我目前可以使用 putty 來 ssh 到防火牆,然後我可以 ssh 到路由器,最後我可以 ssh 到客戶端並編寫程式碼和編譯。
我想知道的是如何直接 ssh 到客戶端而不需要所有額外的 ssh?
謝謝你
編輯:sudo iptables -t nat -v -x -n -L
防火牆上的輸出:
Chain PREROUTING (policy ACCEPT 1217 packets, 108875 bytes)
pkts bytes target prot opt in out source destination
Chain INPUT (policy ACCEPT 2 packets, 136 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 11 packets, 783 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 6 packets, 406 bytes)
pkts bytes target prot opt in out source destination
35 2218 MASQUERADE all -- * eth0 0.0.0.0/0 0.0.0.0/0
答案1
首先,我建議您將防火牆和路由器伺服器合併為一台伺服器,因為防火牆已經實現了路由器功能。
假設您希望保留透過 SSH 連接到防火牆的功能,同時新增從外部世界直接透過 SSH 連線到您的用戶端的功能。為此,您需要使用不同的端口,因為這是 iptables 規則集確定您想要的內容的唯一方法。我將使用連接埠 2222,但您可以使用您想要的任何空閒連接埠。
您將需要 nat 表中的 PREROUTING 規則:
sudo iptables -t nat -A PREROUTING -p tcp -i $EXTIF --dport 2222 -j DNAT --to $INTIP:22
其中: $EXTIF 是您的外部網路介面名稱。我認為eth0. $INTIP 是您的內部 IP 位址。
您還需要允許流量通過您的 FORWARD 鏈,因為您的預設策略是 DROP,它應該是:
sudo iptables -A FORWARD -i $EXTIF -o $INTIF -p tcp --dport 2222 -d $INTIP -m state --state NEW -j LOG --log-prefix "PFNEW2222:" --log-level info
sudo iptables -A FORWARD -i $EXTIF -o $INTIF -p tcp --dport 2222 -d $INTIP -m state --state NEW -j ACCEPT
其中: $INTIF 是您的內部網路介面名稱。我認為eth1。
請注意,還有一個日誌記錄規則。只是建議。
你的返迴路徑應該沒問題
其他建議:
您不需要目前的 OUTPUT 鏈規則,因為您的預設策略是 ACCEPT。
如果您知道外部 IP 位址(下面的 $EXTIP),請使用 SNAT 而不是 MASQURADE:
sudo iptables -t nat -A POSTROUTING -o $EXTIF -j SNAT --to $EXTIP
如果你不這樣做,那麼好吧
我假設您已經啟用轉送:
$ cat /proc/sys/net/ipv4/ip_forward
1