我的 VPN 使用哪個網路介面?

我的 VPN 使用哪個網路介面?

我有一個連接到互聯網的有線(enp59s0u2u1i5)和無線接口,除此之外我還使用了VPN(wg-mulvad)。

如何查看 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-mulvad 使用的 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可以從字面上顯示透過每個介面發送的資料包。

相關內容