目标
您好,在解决通过远程 VPS 将端口转发到本地家庭服务器的问题时,我遇到了很大的困难。我想做的是为我和我的好友托管一个 Counter Strike GO 服务器,但让每个人(包括我自己)通过位于德克萨斯州达拉斯的 VPS 进行连接,理论上这会通过 OpenVPN 将请求转发到我的家庭服务器,因为这会均衡我比东海岸的朋友有什么 ping 优势吗?
端口和IP
27005 UDP 出站
27015 TCP 和 UDP 入站和出站主要港口
27020 UDP 入站和出站
51840 UDP 出站
广域网 VPS 45.58.xx.xx
VPN网关10.8.0.1
VPN 客户端 10.8.0.2
问题
所以现在这看起来应该是一个简单的项目,这就是我一开始的想法,但在网上搜索其他论坛帖子并尝试其中许多帖子后,我却空手而归。我的目标是使用iptables
以下是我尝试运行的不同命令组合,但没有成功实现我的目标。
sysctl -w net.ipv4.ip_forward=1
iptables -I FORWARD 1 -d 10.8.0.2 -p tcp --dport 27015 -j ACCEPT
iptables -I FORWARD 1 -d 10.8.0.2 -p udp --dport 27015 -j ACCEPT
iptables -I FORWARD 1 -d 10.8.0.2 -p udp --dport 27020 -j ACCEPT
iptables -t nat -A POSTROUTING -m conntrack --ctstate DNAT -d 10.8.0.2 -p tcp --dport 27015 -j SNAT --to-source 10.8.0.1
iptables -t nat -A POSTROUTING -m conntrack --ctstate DNAT -d 10.8.0.2 -p udp --dport 27015 -j SNAT --to-source 10.8.0.1
iptables -t nat -A POSTROUTING -m conntrack --ctstate DNAT -d 10.8.0.2 -p udp --dport 27020 -j SNAT --to-source 10.8.0.1
iptables -t nat -A POSTROUTING -m conntrack --ctstate DNAT -d 10.8.0.2 -p udp --dport 27005 -j SNAT --to-source 10.8.0.1
iptables -t nat -A POSTROUTING -m conntrack --ctstate DNAT -d 10.8.0.2 -p udp --dport 51840 -j SNAT --to-source 10.8.0.1
iptables -t nat -A PREROUTING -d 45.58.xx.xx -p udp --dport 27005 -j DNAT --to-dest 10.8.0.2:27005
iptables -t nat -A PREROUTING -d 45.58.xx.xx -p tcp --dport 27015 -j DNAT --to-dest 10.8.0.2:27015
iptables -t nat -A PREROUTING -d 45.58.xx.xx -p udp --dport 27015 -j DNAT --to-dest 10.8.0.2:27015
iptables -t nat -A PREROUTING -d 45.58.xx.xx -p udp --dport 27020 -j DNAT --to-dest 10.8.0.2:27020
iptables -t nat -A POSTROUTING -d 10.8.0.2 -p tcp --dport 27015 -j SNAT --to-source 10.8.0.1
iptables -t nat -A POSTROUTING -d 10.8.0.2 -p udp --dport 27015 -j SNAT --to-source 10.8.0.1
iptables -t nat -A POSTROUTING -d 10.8.0.2 -p udp --dport 27020 -j SNAT --to-source 10.8.0.1
iptables -t nat -A POSTROUTING -d 10.8.0.2 -p udp --dport 27005 -j SNAT --to-source 10.8.0.1
iptables -t nat -A POSTROUTING -d 10.8.0.2 -p udp --dport 51840 -j SNAT --to-source 10.8.0.1
现在,这些 iptable 条目的组合都不起作用,因为当我在本地服务器上运行服务器时,我无法查看在任何这些端口上运行的任何服务或通过我的 CSGO 客户端连接到服务器。另外,在命令集之间,我清除了 iptables,所有这些命令都使用 sudo 运行,并iptables-save
运行 afterword。
更多信息
当我运行命令时,ip a
这是我从控制台收到的转储。
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: venet0: <BROADCAST,POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default
link/void
inet 127.0.0.1/32 scope host venet0
valid_lft forever preferred_lft forever
inet 45.58.xx.xx/32 brd 45.58.xx.xx scope global venet0:0
valid_lft forever preferred_lft forever
inet6 2602:ffc5:1f::xx:xxxx/128 scope global
valid_lft forever preferred_lft forever
inet6 ::2/128 scope global
valid_lft forever preferred_lft forever
3: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 500
link/none
inet 10.8.0.1/24 brd 10.8.0.255 scope global tun0
valid_lft forever preferred_lft forever
inet6 fddd:1194:1194:1194::1/64 scope global
valid_lft forever preferred_lft forever
inet6 fe80::2105:549d:51f6:9a16/64 scope link stable-privacy
valid_lft forever preferred_lft forever
关于上面的转储,我注意到的一件事是我没有,eth0
但我的 WAN 是通过venet0
.我不确定这是否会有所作为。
除了这个端口转发废话之外,我还可以连接到 VPN,并且当我连接时,我的本地服务器上确实有互联网连接。
谢谢你!
答案1
解决方案
通常,需要简单的解决方案。最后我的问题是围绕Windows 防火墙展开的。由于某种原因,它不允许我的 CSGO 服务器通过防火墙进行通信。
我所做的就是打开我的服务器exe的防火墙,iptables
我使用的命令如下,我从Linux问题:
iptables -t nat -A POSTROUTING --out-interface tun0 -j MASQUERADE
iptables -A FORWARD --in-interface venet0 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -i venet0 -m tcp --dport 27015 -j DNAT --to-destination 10.8.0.2:27015
字面意思就是这样。感谢您阅读我的文章,希望这对将来的其他人有所帮助。