Вспоминайте где.
Убрал из
примера команду
exit $? и скрипт заработал, только не совсем корректно
. Необходимые маршруты поднимаются, но не сразу, а через время, установленное в
DHCP Lease Time на роутере.
#!/bin/sh
# file /etc/dhcp/dhclient-enter-hooks.d/dhcp
table=uplink3
case $interface in
eth0)
case $reason in
BOUND|RENEW|REBIND|REBOOT)
ip rule del from $old_ip_address table $table
ip route del default via $old_routers dev $interface table default metric 10
ip route del default via $old_routers dev $interface table $table
ip rule add from $new_ip_address table $table
ip route add default via $new_routers dev $interface table default metric 10
ip route add default via $new_routers dev $interface table $table
unset new_routers new_domain_name_servers
;;
RELEASE)
ip rule del from $old_ip_address table $table
;;
esac
;;
esac
Выделил проверку для события
BOUND в отдельный шаблон, полагая, что проблема возникает из-за предварительного удаления маршрутов в общем шаблоне с командами, но не помогло.
#!/bin/sh
# file /etc/dhcp/dhclient-enter-hooks.d/multi-dhcp
table=uplink3
case $interface in
eth0)
case $reason in
BOUND)
ip route add default via $new_routers dev $interface table default metric 10
ip route add default via $new_routers dev $interface table $table
ip rule add from $new_ip_address table $table
unset new_routers new_domain_name_servers
;;
RENEW|REBIND|REBOOT|TIMEOUT)
ip rule del from $old_ip_address table $table
ip route del default via $old_routers dev $interface table $table
ip route del default via $old_routers dev $interface table default metric 10
ip route add default via $new_routers dev $interface table default metric 10
ip route add default via $new_routers dev $interface table $table
ip rule add from $new_ip_address table $table
unset new_routers new_domain_name_servers
;;
PREINIT|EXPIRE|FAIL|STOP|RELEASE)
ip rule del from $old_ip_address table $table
;;
esac
;;
esac
Маршруты появляются, но только после указанного времени. Хотя, если убрать из команды добавления маршрутов
dev $interface, то всё срабатывает сразу при включении системы и без выделения события BOUND в отдельный шаблон, но в качестве интерфейса маршрутизации пакетов устанавливается всё тот же
dev br3, и интернет через
eth0 разумеется не работает (
ping –I eth0 ya.ru – не работает).
P.S. По ходу тестирования скриптов и изучения работы операторов выбора на Bash, нашел такой
скрипт dhcp-lb на Python для настройки балансировки сети при подключении к нескольким провайдерам интернета по DHCP.
Для его работы требуется python, dhclient, iproute2 и включенная опция multipath ядра Linux (CONFIG_IP_ROUTE_MULTIPATH). Скрипт написан для старого клиента dhcp3.
Добавил из
dhcp-lb несколько условий проверки:
PREINIT|EXPIRE|FAIL|STOP) – удаление правила маршрутизации;
TIMEOUT) – удаление/добавление правил и необходимых маршрутов. Думаю, что они нужны в моём случае
.