Как автоматом перекинуть default route на резервного провайдера?
Orange 16 декабря, 2010 - 07:17
Доброго времени суток!
Собсно subj.. В конторе два провайдера, основной переодически отваливается, а резервный продает инет по трафику и соответственно дорого стоит.
Как лучше организовать смену default route автоматом? гугл скрипты рекомендует, а я от них чихаю :( - неужели нет какого-нить решения из коробки?
»
- Для комментирования войдите или зарегистрируйтесь

bgp
bgp
bgp Садись, два :). про ASку
Садись, два :). про ASку речи не было ( знаю, знаю, можно без нее) - вполне хватит ospf/rip
Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)
slepnoga
Мне что-то интуитивно подсказывает что наши провайдеры эти протоколы не поддерживают. Или такого не может быть по определию?
Поддерживают конечно, но за
Поддерживают конечно, но за $$
http://www.n-ix.com/ipesin/tr
http://www.n-ix.com/ipesin/translations/howto/lartc/lartc.html
Не уверен что получится, но попробуйте посмотеть в сторону default nexthop via GW1 dev wan1 weight 1 nexthop via GW2 dev wan2 weight 2
Каков критерий отвала линка ?
Каков критерий отвала линка ?
Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)
slepnoga написал(а): Каков
Дальше шлюза провайдера пакеты не уходят. Провайдер это называет "ремонтом на линии". Пробовали с помощью метрики решить проблему - не вышло.
Orange написал(а): slepnoga
Если времени для "перехода" на другой default rout достаточно и 5-ти минут, то можно и скриптом в крон-е обойтись.
1. пингуем шлюз провайдера
2. Если нет пингов переключаем роут
3. если есть оставляем как есть.
4. если у основного провайдера появилась связь то восстанавливаем default rout
в крон-е ставим этот скрипт, крон запускает скрипт каждые 5-ть минут.
slepnoga написал(а): Если
Нормально. Только где такой скрипт взять? Не ручками же его делать :)
Orange написал(а): slepnoga
Я "сделал руками" sh-шный скрипт, с десяток строк примерно.
slepnoga написал(а): Я
Классно! Научишь меня скрипты писать? :)
Вас в местном поиске
Вас в местном поиске забанили?
http://www.gentoo.ru/node/12621
Orange написал(а): slepnoga
о_0 а че уметь то? Достаточно базовых знаний bash.
Вы наверняка в консоли пользуетесь некоторыми командами типа ping... или route add...
Скрипт(ы) начинается со трок /bin/bash далее все что необходимо.
вот пример скрипта:
#!/bin/bash LOGFILE='/var/log/ping-script.log' testgateway="192.168.0.1" #------------------------------------------------------------------------------ echo `date` Cheking connection to ISP gateway >> $LOGFILE kol1=$(ping -c 10 $testgateway | grep "received" | awk '{print $4}') if [ $kol1 == 0 ] then echo `date` Отвалилась связь у 1 >> $LOGFILE sleep 120 kol2=$(ping -c 10 $testgateway | grep "received" | awk '{print $4}') if [ $kol2 == 0 ] then echo `date` Спустя две минуты тоже не появилась связь у 1 >> $LOGFILE sleep 5 echo `date` Переходим на связь 2 >> $LOGFILE sleep 10 route delete default gw 192.168.0.1 route add default gw 192.168.0.100 echo `date` Связь с офисом через 2 >> $LOGFILE exit 0 fiНо тут нужно еще дописать что бы если связь у 1 появилась надо поднять дефаул роут на прежний "путь".
danvach написал(а): о_0 а че
Спасибо огромное за отличный пример! В том то и дело что базовых знаний bash не хватает, буду осваивать..
вот я делал для себя скрипт,
вот я делал для себя скрипт, ... у меня иногда не доступен сервер, после перезапуска адсл сессии.. провайдер ничем не объясняет..
и когда сервер не доступен, то я перезапускаю соединение адсл и впн. Тебе вместо перезапуска соединений нужно вбить команду замены дефоулт роута.
#!/bin/sh VPN_SERVER="10.10.0.1" GUEST_DEV="ppp1" TIME_RESTART_CONNECTION="30" LOGFILE="/var/log/vpn_status" echo "Start scripts check status"; date >> ${LOGFILE}; echo "Start scripts check status" >> ${LOGFILE}; if ping -c 3 ${VPN_SERVER} &> /dev/null then echo "VPN Connect - Ok"; echo "VPN Connect - Ok" >> ${LOGFILE}; else echo "VPN Connect - Down"; echo "VPN Connect - Down" >> ${LOGFILE}; /etc/init.d/net.${GUEST_DEV} restart; echo "net.${GUEST_DEV} restart" >> ${LOGFILE}; sleep 5; /etc/init.d/openvpn restart; echo "Openvpn restart" >> ${LOGFILE}; sleep 5; echo "VPN Service was restarted"; echo "VPN Service was restarted" >> ${LOGFILE}; sleep ${TIME_RESTART_CONNECTION}; echo "Try connect again"; echo "Try connect again" >> ${LOGFILE}; if ping -c 3 ${VPN_SERVER} &> /dev/null then echo "VPN Connect after restart service- Ok"; echo "VPN Connect after restart service- Ok" >> ${LOGFILE}; else echo "VPN Connect after restart service - Down"; echo "VPN Connect after restart service - Down" >> ${LOGFILE}; fi fi echo "End scripts check status"; echo "End scripts check status" >> ${LOGFILE}; date >> ${LOGFILE}; echo "==========================================================" >> ${LOGFILE};beba написал(а): вот я делал
Тут немного сложнее - надо еще периодически проверять основного провайдера и как он оживет вернуть маршрут обратно, но дальше думаю уже справлюсь. Спасибо! :)
Помогите облагородить
#!/bin/bash LOGFILE='/var/log/ping-script.log' testpoint="gentoo.ru" # Пинговалка prigw="192.168.0.1" # Шлюз основного isp secgw="192.168.216.121" # Шлюз альтернативного isp pridns="192.168.0.254" # DNS основного isp secdns="192.168.114.254" # DNS альернативного isp #------------------------------------------------------------------------------ if [ -e /tmp/primary_isp_down ] then route add $testpoint gw $prigw sleep 5 kol3=$(ping -c 10 $testpoint | grep "received" | awk '{print $4}') if [ $kol3 == 0 ] then echo `date` Связь $prigw отсутствует >> $LOGFILE sleep 1 route del $testpoint exit 0 else echo `date` Связь через $prigw восстановлена >> $LOGFILE rm /tmp/primary_isp_down route del default route add default gw $prigw echo nameserver $pridns > /etc/resolv.conf /etc/init.d/squid reload fi fi echo `date` Проверка шлюза $prigw >> $LOGFILE kol1=$(ping -c 10 $testpoint | grep "received" | awk '{print $4}') if [ $kol1 == 0 ] then echo `date` Отвалилась связь на $prigw >> $LOGFILE sleep 60 kol2=$(ping -c 10 $testpoint | grep "received" | awk '{print $4}') if [ $kol2 == 0 ] then echo `date` Спустя минуту связь не появилась >> $LOGFILE sleep 5 echo `date` Переходим на $secgw >> $LOGFILE sleep 10 route delete default route add default gw $secgw echo nameserver $secdns > /etc/resolv.conf /etc/init.d/squid reload echo `date` Связь установлена через $secgw >> $LOGFILE touch /tmp/primary_isp_down exit 0 fi fi echo `date` "Изменения маршрута не требуется" >> $LOGFILEКстати, это не работает если упадет DNS :(
... наверное надо было делать через if ping
Orange
таки пингуйте 8.8.8.8 или 208.67.222.222
и добавьте его же в DNS))