我需要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-quick
Table=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 route
VPN1后重复使用 FwMark对于wg
。后者的连接现在通过 eno1(根据路由),但允许从 VPN1 转发的传入数据包(感谢 VPN0 隧道设置的表格)。