我在 VPS 上运行一个 openvpn 服务器,使用公共 IP。有一个后端服务器连接到 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 并且它运行正常):
*自然
:预路由接受 [0:0]
:后路由接受 [0:0]
-A PREROUTING -i eth0 -p tcp --dport 2200 -j DNAT --到目的地 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 POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
重新加载 ufw 甚至重新启动所有内容...
尝试了其他解决方案,注释掉一些行(例如上面的第一个 POSTROUTING 规则)。显然没有任何帮助。
输出nmap VPS-public-IP -p 2200
显示端口已被“过滤”,当我尝试 ssh 到端口 2200 时,它只是挂起并且什么也不做,我甚至没有收到任何错误 - 当我尝试通过 VPN 从 VPS ssh 到后端服务器时也会发生这种情况(通常可以正常工作)。我遗漏了什么?
答案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