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

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

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

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

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

0
задан 2 February 2015 в 00:21
2 ответа

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

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

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

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

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

4
ответ дан 4 December 2019 в 11:48

Нет встроенного способа сделать это, но с небольшим написанием сценария оболочки это довольно легко сделать. Поскольку оба интерфейса вызываются 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
0
ответ дан 4 December 2019 в 11:48

Теги

Похожие вопросы