У меня два сетевых интерфейса eth1
и wlan0
. Я бы предпочел, чтобы весь исходящий трафик проходил через eth1
перед wlan0
, но если eth1
не встает, а затем wlan0
должен обрабатывать трафик.
Оба интерфейса получают IP-адреса через dhclient.
Я экспериментировал с supersede routers
для interface "wlan0"
в dhclient.conf
, но это не дает желаемого эффекта (если wlan0
сначала включен и устанавливается как шлюз по умолчанию, затем eth1
появляется, он не перезаписывает шлюз).
Есть лучший способ сделать это?
Ключевое слово, которое вы ищете, - "метрика". Он в основном определяет, насколько «предпочтительным» является конкретный маршрут. Комментарий в конце этой статьи объясняет, как настроить его в системах на основе Debian:
В статье есть информация о том, как настроить 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