![如何设置 WireGuard 客户端,以便只有特定 IP 的流量通过 VPN 路由](https://linux22.com/image/1186229/%E5%A6%82%E4%BD%95%E8%AE%BE%E7%BD%AE%20WireGuard%20%E5%AE%A2%E6%88%B7%E7%AB%AF%EF%BC%8C%E4%BB%A5%E4%BE%BF%E5%8F%AA%E6%9C%89%E7%89%B9%E5%AE%9A%20IP%20%E7%9A%84%E6%B5%81%E9%87%8F%E9%80%9A%E8%BF%87%20VPN%20%E8%B7%AF%E7%94%B1.png)
我在 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 up
,AllowedIPs = 10.0.0.0\8
VPN 工作正常。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
,而且可能做得不正确。