我的 VPN 使用哪个网络接口?

我的 VPN 使用哪个网络接口?

我有有线(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可以清楚地显示通过每个接口发送出的数据包。

相关内容