我有一台带有 2 个 VPN 客户端的机器:
ExpressVPN 使用 OpenVPN,设置连接到 A 国的服务器。
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
其中xxx
IP 地址是Endpoint=
。请注意,这仅在您在 Linux 上使用 wg-quick 时才有效,因为它运行的ip
是 Linux 专用的“外部”程序 ( )。
您(仅)需要上述内容的原因是,当将对等点设置为默认网关时,wg-quick 会执行一些“技巧”,即,它利用策略路由和额外的路由表来避免在路由表中添加/更改有效的默认路由main
。此外,其中一个技巧还确保非默认路由所涵盖的目的地的流量main
不会被路由到 WireGuard 隧道中。
通常,当您连接到“商业”OpenVPN 时,由于其目的,它会在客户端配置中推送 / 选项redirect-gateway
,这将导致服务器远程地址的主机路由添加到 ( main
) 路由表中以避免路由循环。然后,它将原始默认路由(使用物理 NIC)替换为使用它创建的隧道接口的路由(可能不是tun0
;请检查 egip link
并相应地调整上述内容)。
main
由于WireGuard 启动时路由表中的默认路由将被忽略,因此您最终将得到以下结果:
- Internet 流量(更准确地说,仅由
main
路由表中的默认路由覆盖的目的地)将路由到 WireGuard 隧道 - WireGuard 封装的流量,如果其目的地地址为,
Endpoint=
则将路由到 OpenVPN 隧道,因为使用上述命令添加了路由 - OpenVPN 封装的流量,其目的地是 OpenVPN conf 中的远程地址,将被路由出最初用于默认路由的物理网卡
请注意,这意味着您必须先启动 OpenVPN。每当其 tun 接口(例如tun0
)消失时,上述命令添加的路由也会消失,这意味着您需要PreUp=
手动再次运行它(中的那个)或在 tun 接口重新创建后重新启动 wg-quick。
注意:通常您会redirect-gateway
在带有标志的 conf 中被推送 / def1
,这自然会使 wg-quick 技巧之一无效。结果是 WireGuard 隧道将根本无法使用。因此,请确保您摆脱了该标志,显然,像往常一样,我的 ip 测试应该会告诉您事情是否按您希望的方式运行。(好吧,我的意思是,您是否至少使用 WireGuard 服务器作为您的 Internet 网关。)此外,在撰写此答案时未考虑有关 DNS 的问题。
需要说明的是,即使从技术上来说这应该可行,但可能还有其他因素(可能是 MTU?)会阻碍其工作或无法按您的期望顺利工作。另外,不要指望这样的设置能给您带来真正不错的性能或稳定性。