通过 OpenVpn 进行端口转发

通过 OpenVpn 进行端口转发

我想在我的家庭网络上托管一些游戏服务器来和我的朋友一起玩,问题是拥有一个公共 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以获得更详细的解释。

相关内容