Статус:
Offline
Реєстрація: 09.02.2007
Повідом.: 27218
Реєстрація: 09.02.2007
Повідом.: 27218
скрипт переключения wan
Есть 2 провайдера, 2 WAN интерфейса на роутере, для одних серваков канал АДСЛ, в теории стабильный, но лучше не засирать, для других - канал локального провайдера, потенциально нестабильный. Задача - написать скрипт который бы проверял нестабильный канал и переключал всех на АДСЛ в случае падения канала локального провайдера. Нагуглил скрипт, есть по нему вопросы, т.к. не совсем понимаю некоторые места
#!/bin/bash
# опрашиваемый узел основного провайдера
HOST=10.1.0.254
# шлюз к основному провайдеру
GW1=10.1.0.1
# шлюз к резервному провайдеру
GW2=10.2.0.1
ping -q -c 1 ${HOST} > /dev/null 2>&1 комбинация /dev/null 2>&1 куда загоняет результаты?
if [ $? -eq 0 ]; then что такое $? -eq 0 ? Как я понимаю, это условие прохождения пинга ,но откуда берётся что он прошёл?
....ping -q -c 1 ${GW1} > /dev/null 2>&1
....if [ $? -eq 0 ]; then
........ip route change default via ${GW1}
....else
........ip route change default via ${GW2}
....fi
else
....ip route change default via ${GW2}
fi
Ну и в общем по самому скрипту. Он пингует какой-то узел основного провайдера. Но как быть если его узел доступен, а инет - нет? Допустим пущу пинг я на 8.8.8.8 вместо узла провайдера, если система в штатном режиме - всё ок. Если канал упал - оно переключит его на GW2. А теперь самое интересное - проходит минута, крон снова запускает скрипт, идут пинги на 8.8.8.8 (через GW2), потом идёт проверка условия пинга на шлюз GW1, а шлюз-то пингуется, хотя инета нет. Скрипт переключает шлюз на GW1, и минуту, пока он снова не запустится, инет лежит. Потом снова переключение на GW2 и т.д., короче инет минуту будет, минуту - нет. Можно конечно после проверки пинга на шлюз локального провайдера и переключения на него делать ещё одну проверку пинга на 8.8.8.8, и если не идёт - менять обратно на GW2, но это как-то коряво. Кто какие решения в данном случае использовал?
Есть 2 провайдера, 2 WAN интерфейса на роутере, для одних серваков канал АДСЛ, в теории стабильный, но лучше не засирать, для других - канал локального провайдера, потенциально нестабильный. Задача - написать скрипт который бы проверял нестабильный канал и переключал всех на АДСЛ в случае падения канала локального провайдера. Нагуглил скрипт, есть по нему вопросы, т.к. не совсем понимаю некоторые места
#!/bin/bash
# опрашиваемый узел основного провайдера
HOST=10.1.0.254
# шлюз к основному провайдеру
GW1=10.1.0.1
# шлюз к резервному провайдеру
GW2=10.2.0.1
ping -q -c 1 ${HOST} > /dev/null 2>&1 комбинация /dev/null 2>&1 куда загоняет результаты?
if [ $? -eq 0 ]; then что такое $? -eq 0 ? Как я понимаю, это условие прохождения пинга ,но откуда берётся что он прошёл?
....ping -q -c 1 ${GW1} > /dev/null 2>&1
....if [ $? -eq 0 ]; then
........ip route change default via ${GW1}
....else
........ip route change default via ${GW2}
....fi
else
....ip route change default via ${GW2}
fi
Ну и в общем по самому скрипту. Он пингует какой-то узел основного провайдера. Но как быть если его узел доступен, а инет - нет? Допустим пущу пинг я на 8.8.8.8 вместо узла провайдера, если система в штатном режиме - всё ок. Если канал упал - оно переключит его на GW2. А теперь самое интересное - проходит минута, крон снова запускает скрипт, идут пинги на 8.8.8.8 (через GW2), потом идёт проверка условия пинга на шлюз GW1, а шлюз-то пингуется, хотя инета нет. Скрипт переключает шлюз на GW1, и минуту, пока он снова не запустится, инет лежит. Потом снова переключение на GW2 и т.д., короче инет минуту будет, минуту - нет. Можно конечно после проверки пинга на шлюз локального провайдера и переключения на него делать ещё одну проверку пинга на 8.8.8.8, и если не идёт - менять обратно на GW2, но это как-то коряво. Кто какие решения в данном случае использовал?