旁路/分割隧道 wireguard

旁路/分割隧道 wireguard

我的 Linux 机器上有一个 wg-quick wireguard vpn。它使用 FwMark 路由技术,因此默认情况下所有数据包都通过 wireguard 接口发送。它还充当我本地网络的默认网关,因此也通过 VPN 转发所有网络数据包。

我也将 nftables 用于我的防火墙。

我正在尝试绕过特定用户“no_vpn”(uid 1003)的 wireguard 接口。

我尝试过几种方法,但都没有完全奏效。

利用 wireguards Fw 标记。

我发现由于 wireguard 使用 fw 来路由数据包,并且带有 fw 标记的数据包会被路由到默认接口,例如 eth0。

因此,我尝试将 fw 标记添加到来自用户“no_vpn”的所有数据包中。我尝试通过添加 nfttable 链来实现这一点,如下所示:

chain outbound_mangle { 
    type route hook output priority mangle; policy accept; 
    meta skuid 1003 meta mark set 0x76BA 
}

但是,这并没有达到我想要的效果,在数据包路由到接口之前似乎没有添加标记。当我将日志添加到规则中时,在添加标记之前,输出接口已经设置为“wg0”。

自定义路由规则

我的第二次尝试是添加一个优先级比 wireguard 规则更高的路由规则。

规则如下:ip rule add uidrange 1003-1003 lookup main

当我查看数据包时,这似乎更幸运,出站数据包通过 eth0 路由,但是没有收到响应数据包。我的 nftables 允许所有接口上已建立和相关的数据包。

网络命名空间

我设置了一个网络命名空间,其中 macvlan 接口以桥接模式链接到 eth0。当在其中执行命令时,这可以绕过 VPN。但是,macvlan 无法访问主机命名空间,而我的本地 DNS 服务器位于那里。所以我无法解析 DNS。

绕过/拆分隧道的Wireguard VPN的最佳方法是什么?

相关内容