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