如何在 wireguard 中手动配置应用程序拆分隧道?

如何在 wireguard 中手动配置应用程序拆分隧道?

我在为一个相当不寻常的用例配置 NAS 时遇到了困难。我希望 NAS 有一个持久的配置,以便通过 wireguard 路由除来自我家庭网络的 ssh 之外的所有流量。问题是 NAS(运行 debian)位于与我家庭网络其余部分不同的 VLAN 192.168.2.0/24 上,而我家庭网络的其余部分位于 192.168.1.0/24 上,因此只能通过 VLAN 之间的端口转发来访问 ssh,因此,排除我的家庭子网不起作用AllowedIPs。有没有解决方案可以配置 wireguard 以允许响应 NAT 后面的 ssh 流量可以解决我的问题

我已着手的部分解决方案是使用 mullvad 实用程序(来自我的 VPN 提供商)的自动拆分隧道,该实用程序会排除通过 VPN 接口路由的进程列表。我找到了 sshd 的 pid,并将其添加到排除列表中,如下所示:

% ps aux | grep sshd
    root    xxxx    ..... sshd: /usr/sbin/sshd ....
% mullvad split-tunnel pid add xxxx

然后它就会按照我想要的方式运行。我想我可以有一个在启动时运行的脚本,它可以找到 sshd 的 pid 并像我手动完成的那样添加它,但让我困扰的是,我不明白它在幕后做了什么,而且它看起来有点黑客行为。

我试图弄清楚当我使用 mullvad 实用程序的拆分隧道功能时幕后发生了什么,但什么也没发现。如果我检查防火墙规则% nft list ruleset,没有任何与 sshd 的 pid 相关的内容。此外,如果我完全禁用防火墙,我仍然无法在没有拆分隧道功能的情况下获得 ssh 访问权限。

如果我检查% ip route% ip link使用或不使用 Mullvad 的分割隧道功能,结果都是相同的

% ip route
default via 192.168.2.1 dev enp0sx proto dhcp src 192.168.2.x metric 202
xxx.xxx.xxx.xxx dev wg-mullvad proto static
192.168.2.0/24 dev enp0sx proto dhcp scope link src 192.168.2.x metric 202
% ip link
....
wg-mullvad: <POINTOPOINT,UP,LOWER_UP> mtu 1380 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/none

我注意到的区别是,在启用拆分隧道功能后,fwmark: 0xyyyyyyyy的接口输出中会出现一个% wg,它对应于一条 IP 规则

% ip rule
0: from all lookup local
32764: from all lookup main suppress_prefixlength 0
32765: not from all fwmark 0xyyyyyyy lookup zzzzzzzzzz
32766: from all lookup main
32767: from all lookup default

我不确定这是做什么的,也不知道进程 pid 列表在哪里配置的,而且我还没能理解 wireguard 文档。我想我对路由表有点不了解,我不确定要查找什么才能理解。任何帮助都可以手动配置它,或者只是给我指出正确的文档可以解决我的问题。

我认为使用其他 wireguard 选项可能也很重要。作为参考,mullvad 的默认 wireguard 配置可用于路由所有流量 ( wg-quick up mullvad),如下所示:

# /etc/wireguard/mullvad.conf

[Interface]
PrivateKey = xxxxxxxxxxxxxxxx
Address = x.x.x.x/32, fc00:x:x:x::x/128
DNS = x.x.x.x

[Peer]
PublicKey = xxxxxxxxxxxxxxxx
AllowedIPs = 0.0.0.0/0,::0/0
Endpoint = x.x.x.x:x

谢谢 :)

答案1

您希望以与将流量路由到192.168.1.0/24NAS 网络 ( ) 相同的方式将流量路由到您的家庭网络 ( 192.168.2.0/24),因此像 Daniel B 建议的那样,为您的家庭网络添加一条使用与您的 NAS 网络相同网关的路由:

ip route add 192.168.1.0/24 via 192.168.2.1 dev enp0sx

如果您/0的 WireGuardAllowedIPs设置中有阻止,wg-quick 将始终添加您记录的suppress_prefixlengthfwmark策略路由规则——这些规则告诉内核跳过主表中的默认路由,而是使用zzzzzzzzzzwg-quick 为此情况设置的自定义表(WireGuard 端点的流量除外,WireGuard 会用 标记0xyyyyyyy)。这些规则会将所有未定义特定路由的流量发送到 WireGuard 隧道。它们会有效地覆盖主表中通常会将该流量发送到 LAN 路由器的默认路由192.168.2.1

相关内容