我在 Windows 主机上的 vmware 上运行的 Linux 来宾中运行多个服务。在 Linux 客户机中,我使用以下配置将wireguard 客户端连接到我的VPN 提供商:
[Interface]
PrivateKey = Redacted
Address = 100.81.66.38/32
DNS = 10.255.255.1
[Peer]
PublicKey = Redacted
AllowedIPs = 0.0.0.0/0
Endpoint = den-301-wg.whiskergalaxy.com:443
PresharedKey = Redacted
在我的路由器上,我运行一个 DDNS 客户端,以便我始终有一个友好的名称来通过网络连接到我的服务,然后我使用端口转发来访问我的各种服务(ssh、ftp 等)。
在连接我的wireguard客户端之前,我可以通过互联网很好地访问这些服务,但是在我wg-quick up wg0
进入我的linux guest虚拟机之后,我无法再从互联网访问这些服务。我仍然可以使用我的 linux guest 的本地 IP 地址(来自本地 LAN)访问它们。我似乎无法使用互联网上的路由器公共地址联系到他们。
这看起来很奇怪,因为我认为如果我可以从本地局域网访问 ssh 服务器之类的东西,那么我认为从路由器转发的端口也会起作用,因为它指向完全相同的本地 IP 地址。有趣的是,除了运行 Windows 之外,我在另一个来宾中运行了类似的设置。在那一个上,我可以连接wireguard客户端,并且我仍然可以通过路由器的公共IP和端口转发访问该来宾上运行的Web服务。只有 Linux 来宾在做一些不同的事情。
我做过类似的事情sysctl -w net.ipv4.ip_forward=1
,但似乎没有帮助。我也尝试过,AllowedIPs = 0.0.0.0/1, 128.0.0.0/1
但这也没有改变任何事情。我总是可以在本地访问它们,但不能通过互联网访问。一旦我断开电线保护,一切都会重新开始工作。
答案1
从您的故事中,我了解到您有一个外部 VPN 提供商,并且您希望将托管一些服务的 Linux 来宾连接到该 VPN 提供商。您的本地路由器上还有一个指向该 Linux 客户机的端口转发。
当您启用隧道时,您在 Linux 来宾上托管的服务将无法使用端口转发来使用,但它们仍然是内部的。
该问题是由于 Linux 客户机上的路由问题造成的。这是由于线路而发生的AllowedIPs=0.0.0.0/0
。
该线路AllowedIPs=0.0.0.0/0
告诉 Linux 来宾默认路由是通过 VPN 隧道。这意味着通过端口转发的所有传入互联网流量都将通过 VPN 隧道得到应答。
本地流量起作用的原因是因为您与 Linux 来宾位于同一网络上,因此返回流量知道它应该响应哪个网络。
由于我不清楚您想要启用 Wireguard 隧道的原因,因此我无法为您提供最终解决方案的准确答案。但您应该将其更改AllowedIPs
为更具体的网络。
例如,AllowedIPs=100.81.66.0/24
如果您只想发送发往100.81.66.0/24
网络的数据包。您可以用逗号分隔多个网络,以通过 VPN 获取所需的路由