Как направить весь VPN-трафик через определенный аппаратный интерфейс?

Как направить весь VPN-трафик через определенный аппаратный интерфейс?

У меня есть компьютер с двумя интерфейсами eth и одним интерфейсом wlan. Он также подключен к VPN (openvpn), поэтому у него также есть интерфейс tun0. Теперь я хотел бы убедиться, что весь трафик VPN отправляется с использованием интерфейса wlan, а не через ethernet. По умолчанию он отправляется через eth1, насколько я могу судить по запуску iftop. Моя таблица маршрутизации приведена ниже.

$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         Teltonika.lan   0.0.0.0         UG    100    0        0 eth1
default         192.168.222.1   0.0.0.0         UG    600    0        0 wlan0
link-local      *               255.255.0.0     U     1000   0        0 eth0
172.89.0.0      *               255.255.255.0   U     0      0        0 tun0
192.0.2.1       192.168.222.1   255.255.255.255 UGH   600    0        0 wlan0
192.168.0.0     *               255.255.0.0     U     100    0        0 eth1
192.168.3.0     *               255.255.255.0   U     100    0        0 eth0
192.168.222.0   *               255.255.255.0   U     600    0        0 wlan0

решение1

В Linux вы можете настроить правила маршрутизации с помощью команд ip ruleи ip route. Последняя является более продвинутым эквивалентом команды route.

В вашем случае вы можете добиться желаемого поведения, имея отдельную таблицу маршрутизации, где шлюз по умолчанию на wlan0интерфейсе является единственным (или в любом случае предпочтительным) присутствующим шлюзом по умолчанию, а затем установить правило маршрутизации, указывающее, что весь трафик, поступающий с интерфейса, tun0должен использовать эту отдельную таблицу маршрутизации.

Это можно получить, например, с помощью следующих двух команд:

ip route add default via 192.168.222.1 table 100  # <-- 100 is an arbitrary number for the separate routing table
ip rule add iif tun0 table 100

а чтобы их прояснить, используйте:

ip rule del iif tun0 table 100
ip route flush table 100

Вы можете протестировать команды в реальном времени после настройки VPN и убедиться, что все работает так, как задумано.

Затем вы можете захотеть, чтобы эти команды (или их лучший эквивалент для вашей общей настройки) выполнялись по openvpnмере необходимости. Для этого проще всего поместить эти команды в два скрипта (соответственно), а затем вызывать их через OpenVPN route-upи route-pre-downхуки.

В зависимости от того, как вы фактически используете OpenVPN, вам нужно либо запустить его, openvpnуказав --route-up script-that-adjusts-routing.shи --route-pre-down script-that-undoes-routing.sh(а возможно также --script-security 2) из командной строки, либо добавить эти конфигурации в .conf файл OpenVPN вашего туннеля.

Если у вас уже есть скрипты route-upи route-pre-down, то вам необходимо добавить команды настройки в уже существующие скрипты, и это может потребовать дополнительной осторожности в зависимости от того, что делают эти скрипты.

Связанный контент