我有一個連接到互聯網的有線(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
可以從字面上顯示透過每個介面發送的資料包。