多个 wireguard 接口,每个都直接使用“真实”接口,并且可以通过其中任何一个访问任何 IP

多个 wireguard 接口,每个都直接使用“真实”接口,并且可以通过其中任何一个访问任何 IP

我需要wg-quick在一台机器上设置多个接口,两个接口都直接独立地使用真正的以太网 NIC。
我遇到的问题是,我想通过每个接口访问整个互联网,我认为这意味着AllowedIPs = ::0,但wg-quick喜欢在本地添加路由,这样所有去往任何地方的流量都将通过这个新接口;包括任何后续wg-quick尝试。

有没有办法调用wg-quick并告诉它“嘿,不,我希望你使用特定的eno1,而不是‘默认网关’”?也许使用原始的wg

我尝试在网上阅读了很多,但我总是搞不清楚别人在问什么似乎就像一个类似的问题,但结果是托管多个 wireguard 服务或其他东西。

下面描述的是基本要点,有两个 wg 接口。wg0在本例中,它正在wg-quick透明地窃取所有流量,其中wg1有一个可用接口,我可以在其中配置应用程序以专门与其通信。
我不介意您的解决方案被迫wg0以这种方式工作,我可以为不支持“使用此接口/IP 进行流量”标志的软件设置 SOCKS 和 HTTP 代理以获得相同的效果。

                                                             
      Home                ║      ISP       ║       Internet  
                          ║                ║                 
                          ║                ║                 
  ┌─────────────┐         ║                ║                 
  │             │         ║                ║                 
  │             │         ║                ║        ┌───┐    
  │             │         ║                ║     ╔══╪        
  │         eno1│         ║                ║     ║  └───┘    
  │   wg0      ┐│         ╙────────────────╜     ║  VPN0     
  │     ┐      └─────────────┘                   ║           
  │     ╞════════════════════════════════════════╝           
  │     ┘   ╔════════════════════════════════════╗           
  │   wg1   ║  ┌─────────────┐                   ║           
  │     ╓   ║  ┘│  router                        ║  ┌───┐    
  │     ╠═══╝   │         ╓────────────────╖     ╚══╪        
  │     ╙       │         ║                ║        └───┘    
  │             │         ║                ║        VPN1     
  │             │         ║                ║                 
  └─────────────┘         ║                ║                 
        PC                                                   
                                                             

“为什么?”。使用 openVPN,我的提供商允许开放端口,基本上是本地防火墙允许,我可以公开路由,并且可以在任意数量的端口上托管服务。他们已经转向 wireguard,这很好,但他们只支持每个 wireguard 连接一个开放端口。所以基本上对于我转发了端口的每个应用程序,我都想为其启动一个 vpn 接口。

只使用 wireguard 而不使用 iptables 或任何东西(我完全不明白)可以实现吗?

答案1

是的。好的。因此,表面上看,解决方案其实很简单,即sudo ip route add $VPN1 via eno1无论 wg0 是否存在,它都可以通过 eno1 连接到 VPN1。您完全可以::0相同的命名空间其中一个为默认 (wg0),只要您的应用程序支持绑定到连接接口(如)。需要注意的是netcat -s,只能使用 的 生成一个这样的隧道。wg-quickTable=auto


然而,我花了一周时间去奋斗的是我最初想要这样做的目的;让这些 wg 接口传输入站流量!

我尝试了多种方法;

  • 天真地只是wg-quick在路由到位的情况下多次运行(这会杀死所有内容并试图wg-quick down完全破坏你的网络堆栈)
  • 如上所述,旋转多个,一个用Table=auto,其他用Table=off
  • 如上所述,旋转多个,一个用wg-quick,其他用wg
  • 旋转多个eno1躲在后面namespace(我甚至无法让它适用于出站流量......)
  • 旋转多个各有wg各的namespace

但即使这些工作[对于通过其各自隧道的出站流量](除非另有说明)所有这些都拒绝传入连接(用测试netcat -l -p $assignedPort),无论ufw disable使用相同或不同的“VPN{0,1}”服务器。


解决方案是我昨天终于遇到了. 神奇的酱汁wg-quick是用Table=auto;FwMark 做的。

我一直试图避免自己学习如何做这件事:“仅使用 wireguard 是否可行?”。好吧,您确实需要标记数据包并将其与表关联,但您不需要理解/模仿/重新实现什么wg-quick......显然您可以使用它。

因此,在设置到 VPN0 的默认隧道后,wg-quick您将获得该 FwMark,并在设置ip routeVPN1后重复使用 FwMark对于wg。后者的连接现在通过 eno1(根据路由),但允许从 VPN1 转发的传入数据包(感谢 VPN0 隧道设置的表格)。

相关内容