Назад | Перейти на главную страницу

Заменить маршрут по умолчанию

У меня два сетевых интерфейса eth1 и wlan0. Я бы предпочел, чтобы весь исходящий трафик проходил через eth1 перед wlan0, но если eth1 не встает, а затем wlan0 должен обрабатывать трафик.

Оба интерфейса получают IP-адреса через dhclient.

Я экспериментировал с supersede routers для interface "wlan0" в dhclient.conf, но это не дает желаемого эффекта (если wlan0 сначала включен и устанавливается как шлюз по умолчанию, затем eth1 появляется, он не перезаписывает шлюз).

Есть лучший способ сделать это?

Ключевое слово, которое вы ищете, - "метрика". Он в основном определяет, насколько «предпочтительным» является конкретный маршрут. Комментарий в конце этой статьи объясняет, как настроить его в системах на основе Debian:

https://singpolyma.net/2012/08/how-to-force-the-default-route-to-always-use-a-specific-interface-on-ubuntu/

В статье есть информация о том, как настроить dhclient, но в комментарии есть более простая альтернатива:

Другой способ - отредактировать / etc / network / interfaces и в разделе для вашей сетевой карты, трафик которой вы НЕ хотите принудительно пересылать, добавьте строку «metric 150» (без кавычек).

Это даст другой сетевой карте более низкую метрику, отдав ей приоритет.

Для этого нет встроенного способа, но с помощью небольшого сценария оболочки это сделать довольно легко. Поскольку оба интерфейса вызываются dhclient, у них есть ловушка, позволяющая выполнить сценарий в соответствии с руководством:

Сразу после того, как dhclient установит интерфейс UP с новым IP-адресом, маской подсети и маршрутами, в состояниях REBOOT / BOUND он проверит наличие исполняемого скрипта / etc / dhcp / dhclient-up-hooks и отправит его. если найден. Этот сценарий может обрабатывать параметры DHCP в среде, которые не обрабатываются по умолчанию. Интерфейс. Сценарий / etc / dhcp / dhclient - $ {IF} -up-hooks переопределит общий сценарий и будет загружен, когда будет запущен интерфейс $ IF.

Итак, в вашем случае вы хотите, чтобы маршрут по умолчанию от интерфейса WAN был удален, если уже существует маршрут по умолчанию. Таким образом, вы можете создать файл / etc / dhcp / dhclient-wlan0-up-hooks с помощью некоторого сценария оболочки, подобного этому:

RESULT=$(netstat -rn | grep ^0.0.0.0 | grep eth0\$ | wc -l)

if [[ $RESULT == "1" ]]; then
   printf "eth0 already has a default route\n"
   printf "removing wlan0 default route since eth0 default route found\n"
   ...enter ip route del command to delete this route ...
else
   printf "do nothing since eth0 default route NOT found"
fi