我想在我的家庭网络上托管一些游戏服务器来和我的朋友一起玩,问题是拥有一个公共 IP 就像乞求 DDoS 攻击一样,所以我所做的是我在受 DDoS 保护的 vps 上设置了一个 OpenVPN 服务器IP 98.158.113.x。我的家庭服务器公共IP是143.12.44.x。
我使用这些 iptables 规则通过 OpenVPN 将流量从 vps 转发到我的家庭服务器:
IVSS 7730
iptables -t nat -A PREROUTING -d 98.158.113.x -p udp --dport 7730 -j DNAT --to-dest 10.8.0.2:7730 iptables -t nat -A POSTROUTING -d 10.8.0.2 -p udp - -dport 7730 -j SNAT --到源 10.8.0.1
我认为10.8.0.1是OpenVPN网关,10.8.0.2是我的家庭服务器从OpenVPN服务器获得的IP。
这里的问题是,当有人连接到服务器时,他的 IP 被列为 10.8.0.1,而不是他的真实 IP。
我有什么办法可以解决这个问题吗?
答案1
如果您的游戏服务器运行的是 Linux,那么可以。
您需要摆脱 SNAT 规则,不幸的是,当您这样做时,您会产生另一个问题,不再有任何东西可以强制来自 VPN 的流量通过 VPN 返回。
要解决此问题,您可以在游戏服务器上使用策略路由。我相信你会大致如下设置(但这是来自记忆,不是经过测试的示例)
首先,通过将条目“100 openvpn”添加到 /etc/iproute2/rt_tables 来创建命名路由表
然后我们可以添加一条规则,将所有流量从游戏服务器的 VPN IP 地址发送到我们的新路由表。
ip rule add from 10.8.0.2 table openvpn
并在新的路由表中添加一条路由,将所有内容发送回 openvpn 服务器。
ip route add default dev tun0 table openvpn
(假设你的 openvpn 隧道是 tun0)
看https://lartc.org/howto/lartc.rpdb.multiple-links.html以获得更详细的解释。