Wireguard 客户端 IP 识别

Wireguard 客户端 IP 识别

假设我们有一个如下图所示的 Wireguard 设置(参见 imgur 链接,没有声誉就无法发布图片),其中包含以下 PostUp 和 PostDown:

PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

图表

客户端可以通过 Wireguard 访问我们的专用网络(服务器不是 Wireguard 客户端,只是具有连接到我们专用网络的第二个网络接口。在这种情况下,如果我们查看在我们服务器上运行的服务中的访问日志,我们会看到客户端 IP 是 Wireguard 服务器的 IP 地址(172.16.2.1)。这是正确的,因为使用了 MASQUERADE,它在转发时替换了源 IP。我们希望的结果是看到在我们服务器上运行的服务中的客户端 IP(即 172.16.2.2 或 172.16.2.3)。有没有办法在 Wireguard 服务器上设置路由,以便在通过 Wireguard 转发请求时保留源 IP?所以我们可以在服务器本身上根据客户端 IP 阻止和允许客户端,并且拥有可追溯到特定客户端的访问日志?

PS,我知道如何配置 iptables 以便从那里安排访问控制,但这不是最优选的解决方案,因为无法追溯谁在网络上做了什么。

答案1

为了使双向通信正常工作,必须正确配置路由。详细信息取决于您的实际网络布局,但原则如下。我将10.0.8.0/24在下文中用作 VPN IP 网络:

  • 每个服务器都需要一个到网络的路由10.0.8.0/24,其中​​下一跳指定为172.16.2.1。如果172.16.2.1已经是默认路由器,则它可以正常工作。

  • 每个客户端都需要一条到网络的路由172.16.2.0/2410.0.8.1下一跳(VPN 服务器)在哪里。

通过此配置,路由设置正确,并且不需要 MASQUERADE。

如何在服务器和 VPN 客户端上实际设置路由是单独的问题。

相关内容