« Бамбуковая дощечка с кнопками. | Тяжелое детство, деревянные игрушки. » |
Linux. Переключение на резервный канал.
Поскольку недавно у любимого провайдера в очередной раз случился даунтайм, озадачился автоматическим переключением на канал резервный. Не, в общем-то все просто, только руки никак не доходили.
Собственно, алгоритм простой:
- проверяем состояние основного канала
- если работаем через основной и он лежит - переключаемся на резервный
- если работаем через резервный, а основной уже поднялся - переключаемся на основной
Получился такой скрипт:
#!/bin/bash
GW_DEFAULT="192.168.1.1" # IP шлюза на основном канале
IF_DEFAULT="eth1" # Интерфейс основного канала
GW_BACKUP="192.168.2.1" # IP шлюза на резервном канале
IF_BACKUP="eth2" # Интерфейс резервного каналаGW_CURRENT=$(route -n | grep -E "^0.0.0.0 .* UG .*" | awk '{print $2}')
PINGS=$(ping -c 5 -i .5 -w 6 -I ${IF_DEFAULT} ${GW_DEFAULT} | grep "icmp_seq=" | wc -l)if [ "${GW_CURRENT}" == "${GW_DEFAULT}" ]; then
if [ "${PINGS}" -le "3" ]; then
echo "Switching to backup route"
route del default
route add default gw ${GW_BACKUP} ${IF_BACKUP}
fi
else
if [ "${PINGS}" -gt "3" ]; then
echo "Switching back to primary route"
route del default
route add default gw ${GW_DEFAULT} ${IF_DEFAULT}
fi
fi
Собственно, пингуем шлюз основного канала и смотрим сколько пингов вернулось. Дальше, если мы на основном канале и потерялось больше двух пингов из шести, то переключаемся на резервный. Если мы на резервном и на основном потерялось меньше двух пингов, то переключаемся обратно на основной. Как-то так...