我将尽力解释我的问题,但这是我第一次在 OpenVPN 服务器后面自行托管游戏服务器,而且我在这方面没有经验。
目前我在 VPS 上托管一个游戏服务器(我将其称为 GS VPS)。我还在另一台 VPS 上托管一个 OpenVPN 服务器(我将其称为 VPN VPS)。我使用 VPN VPS 作为 GS VPS 的入口点,因为 GS VPS 提供商没有 DDOS 保护,并且有非常严格的不得遭受 DDOS 的 TOS,而 VPN VPS 有 DDOS 保护,带宽只有 GS VPS 的一半。
我的配置是,我在 VPN VPS 上托管了一个 OpenVPN 服务器,并且我使用 GS VPS 连接到该 VPS(因此 GS VPS 是客户端,VPN VPS 是主机)。我使用 iptables NAT 转发传入 VPS VPN 的流量。
sudo iptables -t nat -A PREROUTING -p udp --dport <game server port> -j DNAT --to-destination <OpenVPN client local address>:<game server port>
sudo iptables -t nat -A POSTROUTING -j MASQUERADE
现在谈谈我的问题。在游戏服务器上,所有传入流量都记录为来自 OpenVPN 服务器隧道的本地 IP 地址。这是一个问题,因为能够看到玩家的 IP 地址对于管理至关重要。所以我的问题是:有没有办法将游戏服务器隐藏在代理后面,同时保留游戏服务器上连接客户端的 IP 地址?
我尝试在线查找解决方案,但没有找到任何结果。使用 OpenVPN 或任何其他代理软件可以实现吗?我使用的是 Ubuntu Server 20.04。
答案1
所有 VPN 软件都有可能实现这一点。你看不到客户端 IP 地址的唯一原因是因为那个MASQUERADE规则就在那里。它的字面目的是让路由器用路由器自己的 IP 地址重写源 IP 地址。所以第一步是删除它。
但你需要这个规则的副作用:因为源地址被重写,这会让你的游戏服务器发送回应通过 VPN 而不是直接通过互联网。因此,第二步是配置您的游戏服务器以通过 VPN 路由所有内容。
实现第二部分的方法有两种:
更简单:路线一切通过 VPN。这对你来说可能更好,因为它可以更好地保护服务器的真实 IP 地址;这基本上就是你使用 VPN 保护隐私时会做的事情。
OpenVPN 可以使用此选项自动配置:
redirect-gateway
更复杂:配置“策略路由”。这使得仅有的对客户端的响应会通过 VPN,但当游戏服务器本身发起连接时,仍然会直接转到互联网。
注意:使用“redirect-gateway”,您将无法从任何地方直接通过 SSH 连接到游戏服务器除了来自 VPN 服务器。
答案2
这是我理解的结构:
除非你的游戏 VPS 直接加入 VPN(可能不会发生?),否则这将不起作用,原因如下:
- 您的 VPN VPS 很可能被禁止使用除其自身 IP 地址之外的任何地址发送流量
- 即使可以,……
- 这会导致响应不会返回到 VPN VPS(只有到 VPS 的 IP 地址的流量才能到达它)
- 它将使用 VPN 内部的地址
因此,基本上,为了有机会实现这一点,您需要一个足够大的 IP 池,然后您可以使用它将 VPN 的内部 IP 地址 1:1 NAT 为指向您的 VPN VPS 的公共 IP 地址。
在这一切中,绝对不可能使用客户端的原始 IP 地址。
我的建议是简单地使用具有 DDoS 保护的其他游戏托管提供商。