我遇到了一个似乎无法解决的问题。我在 VPS 上有一个 VPN 服务器。我可以连接我的客户端电脑(家庭局域网)。它按其应有的方式工作。我在客户端 PC 上获取 VPS IP 地址。
不过,我希望能够使用特定端口通过 VPN 连接到客户端 PC。我有一个 MineCraft 服务器,我希望能够通过 VPN 连接到 MC 服务器。
我启用了IP转发:
sysctl -w net.ipv4.ip_forward=1
尝试转发特定端口:
iptables -t nat -A PREROUTING -d 50.x.x.x -p tcp --dport 25565 -j DNAT --to-dest 10.98.0.2:25565
50.xxx 是我的 VPN 公共 IP 地址。 10.98.0.2 是客户端的本地(tun0) IP 地址。
由于某种原因它不起作用。tcpdump port 25565
当我尝试连接到客户端时,VPN 服务器上会显示以下内容:
20:49:58.345498 IP MyInternetPublicIP.62336 > VPNPublicIP.25565: Flags [S], seq 2320085851, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0
20:50:01.344059 IP MyInternetPublicIP.62336 > VPNPublicIP.25565: Flags [S], seq 2320085851, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0
20:50:07.342439 IP MyInternetPublicIP.62336 > VPNPublicIP.25565: Flags [S], seq 2320085851, win 8192, options [mss 1460,nop,nop,sackOK], length 0
在客户端什么也没有显示。我确信我错过了一些东西,只是不知道是什么。
答案1
您必须允许在过滤器表中(在FORWARD
链中或从那里调用的链中)进行转发,如下所示:
iptables -I FORWARD 1 -d 10.98.0.2 -p tcp --dport 25565 -j ACCEPT
如果客户端没有特殊配置来确保响应数据包通过 VPN 发送,您还必须配置 SNAT:
iptables -t nat -A POSTROUTING -m conntrack --ctstate DNAT -d 10.98.0.2 -p tcp --dport 25565 -j SNAT --to-source 10.98.0.1
假设10.98.0.1是VPS VPN地址。