如何设置 WireGuard 客户端,以便只有特定 IP 的流量通过 VPN 路由

如何设置 WireGuard 客户端,以便只有特定 IP 的流量通过 VPN 路由

我在 Ubuntu 20.04 上通过 network-manager 插件使用 Wireguard VPN 客户端。该插件读取了我从系统管理员那里获得的配置文件,如下所示(network-manager 还处理 wg 客户端的启动和关闭):

[Interface]
PrivateKey = removed
Address = 10.200.85.2/32
MTU = 1412
DNS = 10.200.85.1

[Peer]
PublicKey = removed
Endpoint = removed
AllowedIPs = 0.0.0.0/0

我尝试访问 VPN 另一端的计算机位于 10.0.15.xxx 范围内。

这可行,但我的客户端上的所有流量都通过 WireGuard VPN 路由。我只希望 10.0.15.xxx 的流量通过 WireGuard VPN 路由。

我曾尝试将 AllowedIPs 更改为包含 10.200.85.x/x 和 10.0.15.x/x 的各种排列的地址,似乎将 AllowedIPs 更改为 0.0.0.0/0 之外的任何内容都会阻止任何内容通过 VPN 进行路由,“ip route get”显示通过主网络连接的所有地址的路由。

网络管理器中的 WireGuard 设置也具有“仅将此连接用于其网络上的资源”的功能,但检查 AllowedIps = 0.0.0.0/0 仍会通过 VPN 发送所有流量。

我在这里找到了一篇帖子配置路由以便 vpn 仅用于本地资源展示如何为 PPP VPN 添加一些路由以完成我想要做的事情。它基本上为 PPP 适配器分配了所需远程网络的路由,然后为 0.0.0.0 添加了一个具有高度量的路由。我按照该文章中的建议将路由添加到网络管理器 WireGuard 设置中,但所有内容仍通过 WireGuard VPN 路由。我可以看到路由是用“route -n”添加的,但 0.0.0.0 的高 WireGuard 度量并不鼓励通过主网络连接路由流量。

关于如何通过 WireGuard VPN 仅发送 10.xxx 流量,有什么建议吗?可能我遗漏了一些简单的东西。感谢您的帮助!

编辑:此外,当 WireGuard VPN 运行时,路由表中没有路由,这对我来说似乎很奇怪......

jhuber@t5610:~$ ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp0s25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
link/ether 34:17:eb:ad:40:72 brd ff:ff:ff:ff:ff:ff
7: vboxnet0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether 0a:00:27:00:00:00 brd ff:ff:ff:ff:ff:ff
8: vboxnet1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether 0a:00:27:00:00:01 brd ff:ff:ff:ff:ff:ff
47: APC-Wireguard: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1412 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/none 

jhuber@t5610:~$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref       Use Iface
0.0.0.0         192.168.0.1     0.0.0.0         UG    100    0        0 enp0s25
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 enp0s25
192.168.0.0     0.0.0.0         255.255.255.0   U     100    0        0 enp0s25

jhuber@t5610:~$ ip route get 1.1.1.1
1.1.1.1 dev APC-Wireguard table 51820 src 10.200.85.2 uid 1000 
cache 

答案1

经过进一步调查,network-manager-wireguard 插件和 NetworkManager 之间的交互似乎存在问题。我使用 切换到命令行sudo wg-quick upAllowedIPs = 10.0.0.0\8VPN 工作正常。10.xxx 流量通过 VPN 路由,所有其他流量都通过主网络连接。

比较两种方法的路由表,NetworkManager 设置 WireGurad VPN 时似乎缺少以下路由:

Destination Gateway Genmask Flags Metric Ref Use Iface

10.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 APC-Wireguard

作为一种解决方法,我在 NetworkManager 中 WireGuard 设置的 IPV4 选项卡上添加了此路由,似乎解决了问题。在浏览 network-manager-wireguard 代码时,虽然我不完全理解它,但代码似乎调整了 创建的路由wg-quick,而且可能做得不正确。

相关内容