
我正在我的 VPS 上使用公用 IP 來運行 openvpn 伺服器。有一個連接到 VPN 的後端伺服器。這些是 VPN 上的 IP:VPS:10.8.0.1 後端伺服器:10.8.0.2。 eth0是公共接口,tun0是VPN接口
現在,我想將後端伺服器上的連接埠 22 轉送到 VPS 上的連接埠 2200。這是我在 VPS 上所做的(基於幾個教程和已經提出的問題):
- 開放2200端口
- 啟用 IPv4 轉送
將其放入 /etc/ufw/before.rules (是的,我正在使用 ufw 並且它工作正常):
*nat
:預路由接受[0:0]
: 後路由接受 [0:0]
-A PREROUTING -i eth0 -p tcp --dport 2200 -j DNAT --to-destination 10.8.0.2:22
-A POSTROUTING -d 10.8.0.2 -p tcp --dport 22 -j SNAT --to-source VPS-public-IP:2200
-A 後路由 -s 10.8.0.0/24 -o eth0 -j 偽裝
重新加載 ufw 甚至重新啟動一切...
嘗試了其他解決方案,註解掉一些行(例如上面的第一個 POSTROUTING 規則)。顯然,沒有任何幫助。
的輸出nmap VPS-public-IP -p 2200
表示端口已“過濾”,當我嘗試ssh 到端口2200 時,它只是掛起並且不執行任何操作,我什至沒有收到任何錯誤- 當我嘗試從VPS ssh 到後端伺服器時也會發生這種情況通過 VPN(通常有效)。我缺什麼?
答案1
對於那些可能仍在尋找解決方案的人。
取決於您的 FORWARD 策略(假設其 DROP)
iptables -t nat -A PREROUTING -p tcp -d xx.xx.xxx.xxx --dport 80
-j DNAT --to-destination yyy.yyy.yy.yy:80
iptables -A FORWARD -p tcp -d yyy.yyy.yy.yy --dport 80 -j ACCEPT
Result: x:80 --> X --y:80--> Y
iptables -t nat -A POSTROUTING -p tcp -d yyy.yyy.yy.yy --dport 80
-j SNAT --to-source xx.xx.xxx.xxx
Result: x:80 --> X <--y:80--> Y
iptables -A FORWARD -p tcp -s yyy.yyy.yy.yy --sport 80 -j ACCEPT
Result: x:80 <--> X <--y:80--> Y
也可以為本機啟動的連線新增此規則:x --> x:80
iptables -t nat -A OUTPUT -p tcp --dport 80 -d xx.xx.xxx.xxx
-j DNAT --to-destination yyy.yyy.yy.yy:80
Result:
x:80 ->- X <--y:80--> Y
|_____V