通过 OpenVPN 隧道保留连接客户端的 IP 地址

通过 OpenVPN 隧道保留连接客户端的 IP 地址

我将尽力解释我的问题,但这是我第一次在 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 保护的其他游戏托管提供商。

相关内容