在从 Wireguard 命名空间桥接的主机上创建虚拟网络接口

在从 Wireguard 命名空间桥接的主机上创建虚拟网络接口

我想设置 Wireguard,以便只通过隧道路由特定进程(如 qBittorrent),而其他进程默认使用物理接口。由于我的 VPN 提供商似乎只有在allowed-ips设置为时才有效0.0.0.0/0,因此我决定使用命名空间内的 Wireguard 接口例子。

我的初始设置脚本如下所示:

ip netns add tunnel0
ip link add wg0 type wireguard
ip link set wg0 netns tunnel0

ip netns exec tunnel0 wg set wg0 \
    private-key /etc/wireguard/wg0_privkey \
    peer <public_key> \
    endpoint x.x.x.x:51820 \
    allowed-ips 10.64.0.0/16,0.0.0.0/0
ip netns exec tunnel0 ip addr add 10.64.189.228/32 dev wg0 
ip netns exec tunnel0 ip link set mtu 1420 up dev wg0 
ip netns exec tunnel0 ip route add default dev wg0

这导致我的设置看起来类似这样的

正如标题所示,我想vpn0在我的主机上创建一个接口 ( ),该接口与命名空间内的 Wireguard 接口 ( wg0)桥接tunnel0,这样我就可以在 qBittorrent 等应用程序中选择该接口,而无需通过隧道路由任何其他进程。我的设置看起来如下类似这样的

我曾在某处读到过我需要使用类似 VXLAN 的东西,但是,由于我对 Linux 网络不是很有经验,所以我无法找到任何我想要具体实现的示例。

我这样做对吗,或者有没有更简单的解决方案?

答案1

由于我的 VPN 提供商似乎仅在将 allowed-ips 设置为 0.0.0.0/0 时才起作用,

是的,这对于 VPN 来说很正常,因为您使用隧道访问整个互联网,并且您还希望收到来自整个互联网的回复数据包。因此,隧道需要允许对等端代表整个互联网。

这并不意味着必须使用命名空间。wg0接口上的 AllowedIPs 设置可用作过滤器,但才不是实际上通过该接口抓取并路由所有 IP 流量。它更像是防火墙规则。¹

简而言之,您只需进行完全相同的wg0配置即可没有命名空间,那么您就不需要桥接任何东西,因为这里已经有了接口。

但是,不要通过 wg0 创建全局默认路由,而是使用 将其放入不同的路由表中,并且仅当程序尝试将 VPN 地址绑定到“源”地址时,才ip -4 route add default dev wg0 table 3使用“策略路由”规则来选择该表。ip -4 rule add

¹ (只有同名的wg-quick设置还会为所有允许的前缀创建 IP 路由,从而为您提供您不想要的通过 VPN 的默认路由。但由于您没有使用 wg-quick 来创建隧道,因此这不会对您造成影响 - 即使您使用它,wg-quick 也可以选择将路由放在不同的路由表中,或者根本不创建它们。)

相关内容