如何设置 VPN 链

如何设置 VPN 链

我有一台带有 2 个 VPN 客户端的机器:

  1. ExpressVPN 使用 OpenVPN,设置连接到 A 国的服务器。

  2. Wireguard,设置为连接B国的服务器。

目前,两种配置/客户端都不知道彼此的存在。

有没有办法创建一个到服务器 1 / 国家 A 的隧道,并且从那里到服务器 2/国家 B 的隧道?

期望的最终结果应该是,就服务器 2 的流量而言,它来自服务器 1 / 国家 A,而就互联网的流量而言,它来自服务器 2 / 国家 B?

我认为这叫做 VPN 链接。

不起作用的是,只是先创建隧道(1),过一段时间再创建隧道(2),然后根本就不可能有互联网流量。

嗯…你的互联网访问已被阻止

防火墙或防病毒软件可能阻止了该连接。

尝试:

检查连接

检查防火墙和防病毒配置

运行 Windows 网络诊断

错误网络访问被拒绝

这不仅仅是一个 DNS 问题;直接使用 IP 地址(例如https://140.82.113.3/对于 github 来说)也不起作用。

我完全控制两个客户端的配置,以及服务器 2 的设置/配置。我缺乏的是知识/能力,我希望有人能给我指明正确的方向。

Wireguard 配置当前如下所示:

[Interface]
PrivateKey = xxx
Address = 10.6.0.7/24
DNS = 8.8.8.8, 8.8.4.4
MTU = 1420

[Peer]
PublicKey = xxx
PresharedKey = xxx
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = xxx:51820

答案1

[Interface]您可以尝试在所谓的客户端 wg-quick conf 部分下添加类似的内容:

PreUp = ip route add xxx dev tun0
PostDown = ip route delete xxx dev tun0

其中xxxIP 地址是Endpoint=。请注意,这仅在您在 Linux 上使用 wg-quick 时才有效,因为它运行的ip是 Linux 专用的“外部”程序 ( )。


您(仅)需要上述内容的原因是,当将对等点设置为默认网关时,wg-quick 会执行一些“技巧”,即,它利用策略路由和额外的路由表来避免在路由表中添加/更改有效的默认路由main。此外,其中一个技巧还确保非默认路由所涵盖的目的地的流量main不会被路由到 WireGuard 隧道中。

通常,当您连接到“商业”OpenVPN 时,由于其目的,它会在客户端配置中推送 / 选项redirect-gateway,这将导致服务器远程地址的主机路由添加到 ( main) 路由表中以避免路由循环。然后,它将原始默认路由(使用物理 NIC)替换为使用它创建的隧道接口的路由(可能不是tun0;请检查 egip link并相应地调整上述内容)。

main由于WireGuard 启动时路由表中的默认路由将被忽略,因此您最终将得到以下结果:

  1. Internet 流量(更准确地说,仅由main路由表中的默认路由覆盖的目的地)将路由到 WireGuard 隧道
  2. WireGuard 封装的流量,如果其目的地地址为,Endpoint=则将路由到 OpenVPN 隧道,因为使用上述命令添加了路由
  3. OpenVPN 封装的流量,其目的地是 OpenVPN conf 中的远程地址,将被路由出最初用于默认路由的物理网卡

请注意,这意味着您必须先启动 OpenVPN。每当其 tun 接口(例如tun0)消失时,上述命令添加的路由也会消失,这意味着您需要PreUp=手动再次运行它(中的那个)或在 tun 接口重新创建后重新启动 wg-quick。

注意:通常您会redirect-gateway在带有标志的 conf 中被推送 / def1,这自然会使 wg-quick 技巧之一无效。结果是 WireGuard 隧道将根本无法使用。因此,请确保您摆脱了该标志,显然,像往常一样,我的 ip 测试应该会告诉您事情是否按您希望的方式运行。(好吧,我的意思是,您是否至少使用 WireGuard 服务器作为您的 Internet 网关。)此外,在撰写此答案时未考虑有关 DNS 的问题。


需要说明的是,即使从技术上来说这应该可行,但可能还有其他因素(可能是 MTU?)会阻碍其工作或无法按您的期望顺利工作。另外,不要指望这样的设置能给您带来真正不错的性能或稳定性。

相关内容