我遇到了所描述的相同问题使用 VPN 客户端进行端口转发,但没有成功。
我有一个 OpenVPN 访问服务器版本 2.5 和一个配置了站点到站点路由的客户端。客户端和服务器都可以使用私有IP地址相互通信。在客户端,有一个 Apache 服务器监听端口 8081。
目标是能够连接到OpenVPN服务器的公网IP,并让它把连接转发给客户端,这样用户就可以访问后面的Apache服务器了
我当前的设置是:
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A PREROUTING -d 50.xxx.xxx.xxx -p tcp --dport 8081 -j DNAT --to-dest 192.168.2.86:8081
iptables -t nat -A POSTROUTING -d 192.168.2.86 -p tcp --dport 8081 -j SNAT --to-source 10.0.2.42
有什么简单的事情我做错了吗?谢谢。
答案1
该问题与 iptables 规则有关。通过添加以下规则,一切都会按预期进行:
iptables -t nat -I PREROUTING 1 -d {SERVER_LOCAL_IP_ADDRESS} -p tcp --dport {CLIENT_PORT} -j DNAT --to-dest {CLIENT_LOCAL_IP_ADDRESS}:{CLIENT_PORT}
iptables -t nat -I POSTROUTING 1 -d {CLIENT_LOCAL_IP_ADDRESS} -p tcp --dport {CLIENT_PORT} -j SNAT --to-source {VPN_GATEWAY_IP}
iptables -I FORWARD 1 -d {CLIENT_LOCAL_IP_ADDRESS} -p tcp --dport {CLIENT_PORT} -j ACCEPT
答案2
您的 SNAT 与不同的端口号 DNAT 和图表相匹配,因此只有当 OpenVPN 客户端作为路由器通过 OpenVPN 服务器返回互联网时,此设置才有效。
您可能应该将 32400 替换为 8081。