我有有线(enp59s0u2u1i5)和无线接口连接到互联网,并且我还使用 VPN(wg-mullvad)。
如何查看 VPN 接口使用哪个接口(有线或无线)来路由流量?
这是输出ip link
:
2: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DORMANT group default qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
4: enp59s0u2u1i5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
6: wg-mullvad: <POINTOPOINT,UP,LOWER_UP> mtu 1380 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/none
输出netstat -r
:
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
default _gateway 0.0.0.0 UG 0 0 0 enp59s0u2u1i5
default _gateway 0.0.0.0 UG 0 0 0 wlan0
10.64.0.1 0.0.0.0 255.255.255.255 UH 0 0 0 wg-mullvad
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 enp59s0u2u1i5
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 wlan0
答案1
使用ip route get
精确的参数,即隧道端点的远程 IP 地址,以及重要的是 wg-mullvad 使用的 fwmark(如果命令显示)wg
。
# wg show wg-foo
interface: wg-foo
fwmark: 0x52
peer:
endpoint: 1.2.3.4
# ip r get 1.2.3.4 mark 0x52
1.2.3.4 via 192.168.10.1 dev rtl0 table 82 mark 0x52
(您可以添加fibmatch
以直接查看实际使用的路由条目。)
通常,使用ip route
列出 Linux 上的路由表,因为可能不止一个——WireGuard 设置的数据包标记用于ip rule
为加密流量选择备用表。您可以手动解决此问题,但某些 VPN 客户端会生成一些复杂的规则,使用起来更容易ip r get
,让内核提供答案。
# ip rule
501: from all fwmark 0x52 lookup 82 proto static
# ip r ls table 82
default via 192.168.10.1 dev rtl0 proto dhcp
(但即使只是主表,我通常也会避免netstat -r
在 Linux 上使用,因为它不知道如何显示最简单的路线条目之外的内容。)
不要忘记,它tcpdump
可以清楚地显示通过每个接口发送出的数据包。