У меня есть как проводной (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-адресом конечной точки туннеля и, что важно, с меткой fwmark, используемой wg-mullvad, если она отображается командой 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
буквально может показать вам пакеты, отправляемые через каждый интерфейс.