Как автоматом перекинуть default route на резервного провайдера?

Доброго времени суток!

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

bgp

bgp

bgp Садись, два :). про ASку

bgp

Садись, два :). про 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

slepnoga написал(а):
bgp

Садись, два :). про ASку речи не было ( знаю, знаю, можно без нее) - вполне хватит ospf/rip

Мне что-то интуитивно подсказывает что наши провайдеры эти протоколы не поддерживают. Или такого не может быть по определию?

Поддерживают конечно, но за

Поддерживают конечно, но за $$

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 написал(а): Каков

slepnoga написал(а):
Каков критерий отвала линка ?

Дальше шлюза провайдера пакеты не уходят. Провайдер это называет "ремонтом на линии". Пробовали с помощью метрики решить проблему - не вышло.

Orange написал(а): slepnoga

Orange написал(а):
slepnoga написал(а):
Каков критерий отвала линка ?

Дальше шлюза провайдера пакеты не уходят. Провайдер это называет "ремонтом на линии". Пробовали с помощью метрики решить проблему - не вышло.

Если времени для "перехода" на другой default rout достаточно и 5-ти минут, то можно и скриптом в крон-е обойтись.
1. пингуем шлюз провайдера
2. Если нет пингов переключаем роут
3. если есть оставляем как есть.
4. если у основного провайдера появилась связь то восстанавливаем default rout

в крон-е ставим этот скрипт, крон запускает скрипт каждые 5-ть минут.

slepnoga написал(а): Если

slepnoga написал(а):

Если времени для "перехода" на другой default rout достаточно и 5-ти минут, то можно и скриптом в крон-е обойтись.
1. пингуем шлюз провайдера
2. Если нет пингов переключаем роут
3. если есть оставляем как есть.
4. если у основного провайдера появилась связь то восстанавливаем default rout

в крон-е ставим этот скрипт, крон запускает скрипт каждые 5-ть минут.

Нормально. Только где такой скрипт взять? Не ручками же его делать :)

Orange написал(а): slepnoga

Orange написал(а):
slepnoga написал(а):

Если времени для "перехода" на другой default rout достаточно и 5-ти минут, то можно и скриптом в крон-е обойтись.
1. пингуем шлюз провайдера
2. Если нет пингов переключаем роут
3. если есть оставляем как есть.
4. если у основного провайдера появилась связь то восстанавливаем default rout

в крон-е ставим этот скрипт, крон запускает скрипт каждые 5-ть минут.

Нормально. Только где такой скрипт взять? Не ручками же его делать :)

Я "сделал руками" sh-шный скрипт, с десяток строк примерно.

slepnoga написал(а): Я

slepnoga написал(а):
Я "сделал руками" sh-шный скрипт, с десяток строк примерно.

Классно! Научишь меня скрипты писать? :)

Вас в местном поиске

Вас в местном поиске забанили?
http://www.gentoo.ru/node/12621

Orange написал(а): slepnoga

Orange написал(а):
slepnoga написал(а):
Я "сделал руками" sh-шный скрипт, с десяток строк примерно.

Классно! Научишь меня скрипты писать? :)

о_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 а че

danvach написал(а):
о_0 а че уметь то? Достаточно базовых знаний bash.
Вы наверняка в консоли пользуетесь некоторыми командами типа ping... или route add...
Скрипт(ы) начинается со трок /bin/bash далее все что необходимо.
вот пример скрипта:

Спасибо огромное за отличный пример! В том то и дело что базовых знаний 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 написал(а): вот я делал

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

Orange написал(а):
Кстати, это не работает если упадет DNS :(
... наверное надо было делать через if ping

таки пингуйте 8.8.8.8 или 208.67.222.222
и добавьте его же в DNS))

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".