LinuxForum.Fans
Тема

Два шлюза в одной сети.

Автор: semperN 6 сообщений 4331 просмотров
#298170

В сети есть два шлюза через разных провайдеров. Как сделать так что бы выход в интернет как то динамически распределялся между двумя шлюзами? И в случае не работы одного из них использовался рабочий канал?
Если более подробно описывать инфраструктуру то на данный момент у меня один правайдер. Для выхода в интернет используется Linux шлюз который авторизируется у провайдера по pptp со всеми ограничениями по договору. Так же есть шлюз cisco 1921 который просто получает ip внутрений от правайдера и поднимает тунель с другой организации (МИАЦ). Его скорость не как не ограничена, и этот тунель используется для терминального доступа тонких клиентов. Сейчас планируется подключить второго правайдера. Как лучше всего го вписать в существующую инфраструктуру?

#298175
semperN написал:
В сети есть два шлюза через разных провайдеров. Как сделать так что бы выход в интернет как то динамически распределялся между двумя шлюзами? И в случае не работы одного из них использовался рабочий канал?
Если более подробно описывать инфраструктуру то на данный момент у меня один правайдер. Для выхода в интернет используется Linux шлюз который авторизируется у провайдера по pptp со всеми ограничениями по договору. Так же есть шлюз cisco 1921 который просто получает ip внутрений от правайдера и поднимает тунель с другой организации (МИАЦ). Его скорость не как не ограничена, и этот тунель используется для терминального доступа тонких клиентов. Сейчас планируется подключить второго правайдера. Как лучше всего го вписать в существующую инфраструктуру?

Через таблици маршрутизации.
Описано в lartc, глава 4.2. "Маршрутизация через несколько каналов/провайдеров."

#298625

Ещё как вариант протоколы динамической маршрутизации, BGP, RIP. А если попроще, скрипт.


Вот рабочий вариант, только тут для 3-х провайдеров, но думаю это не проблема ;)

text

#!/bin/bash
isp1=ppp0;
isp2=t253n1;
isp3=eth3;
remote_site=ya.ru;
isp0=$isp1;
logfile="/var/log/gateways.log";
gwcurr ()
 {
curr=$(ip route show|grep default|awk '{print $3}');
 }
gwcurr
if ping -c 4 -I $isp0 $remote_site > /dev/null 2>&1; then
        if [ $curr = $isp0 ]; then
        exit 0
        else
        ip route del default > /dev/null;
        ip route add default dev $isp0;
date '+ %d.%m.%Y %H:%M:%S' >> $logfile
echo "isp1 up" >> $logfile
        exit 0
        fi
else
date '+ %d.%m.%Y %H:%M:%S' >> $logfile
echo "isp1 down" >> $logfile
isp0=$isp2;
    if ping -c 4 -I $isp0 $remote_site > /dev/null 2>&1; then
gwcurr
        if [ $curr = $isp0 ]; then
        exit 0
        else
        ip route del default > /dev/null;
        ip route add default dev $isp0;
date '+ %d.%m.%Y %H:%M:%S' >> $logfile
echo "isp2 up" >> $logfile
        exit 0
        fi
    else
date '+ %d.%m.%Y %H:%M:%S' >> $logfile
echo "isp2 down" >> $logfile
isp0=$isp3;
    if ping -c 4 -I $isp0 $remote_site > /dev/null 2>&1; then
gwcurr
        if [ $curr = $isp0 ]; then
        exit 0
        else
        ip route del default > /dev/null;
        ip route add default dev $isp0;
date '+ %d.%m.%Y %H:%M:%S' >> $logfile
echo "isp3 up" >> $logfile
        exit 0
        fi
        else
date '+ %d.%m.%Y% %H:%M:%S'>> $logfile
echo "WARNING! DOWN ALL!" >> $logfile
  fi
fi
fi

#298719
Сергей В. написал:
Ещё как вариант протоколы динамической маршрутизации, BGP, RIP. А если попроще, скрипт.


Вот рабочий вариант, только тут для 3-х провайдеров, но думаю это не проблема ;)
text

#!/bin/bash
isp1=ppp0;
isp2=t253n1;
isp3=eth3;
remote_site=ya.ru;
isp0=$isp1;
logfile="/var/log/gateways.log";
gwcurr ()
 {
curr=$(ip route show|grep default|awk '{print $3}');
 }
gwcurr
if ping -c 4 -I $isp0 $remote_site > /dev/null 2>&1; then
        if [ $curr = $isp0 ]; then
        exit 0
        else
        ip route del default > /dev/null;
        ip route add default dev $isp0;
date '+ %d.%m.%Y %H:%M:%S' >> $logfile
echo "isp1 up" >> $logfile
        exit 0
        fi
else
date '+ %d.%m.%Y %H:%M:%S' >> $logfile
echo "isp1 down" >> $logfile
isp0=$isp2;
    if ping -c 4 -I $isp0 $remote_site > /dev/null 2>&1; then
gwcurr
        if [ $curr = $isp0 ]; then
        exit 0
        else
        ip route del default > /dev/null;
        ip route add default dev $isp0;
date '+ %d.%m.%Y %H:%M:%S' >> $logfile
echo "isp2 up" >> $logfile
        exit 0
        fi
    else
date '+ %d.%m.%Y %H:%M:%S' >> $logfile
echo "isp2 down" >> $logfile
isp0=$isp3;
    if ping -c 4 -I $isp0 $remote_site > /dev/null 2>&1; then
gwcurr
        if [ $curr = $isp0 ]; then
        exit 0
        else
        ip route del default > /dev/null;
        ip route add default dev $isp0;
date '+ %d.%m.%Y %H:%M:%S' >> $logfile
echo "isp3 up" >> $logfile
        exit 0
        fi
        else
date '+ %d.%m.%Y% %H:%M:%S'>> $logfile
echo "WARNING! DOWN ALL!" >> $logfile
  fi
fi
fi

ваш скрипт вроде для переключения шлюза а не как длля балансировки траффика.

#298750
"semperN" написал:
И в случае не работы одного из них использовался рабочий канал?

Я понял так. Ну да ладно

А для балансировки http://www.opennet.ru/docs/RUS/LARTC/x348.html дальше по теме nexthop

#298757
Сергей В. написал:
[quote="semperN"] И в случае не работы одного из них использовался рабочий канал?

Я понял так. Ну да ладно

А для балансировки http://www.opennet.ru/docs/RUS/LARTC/x348.html дальше по теме nexthop[/quote]
угу плюс к этому проще прикрутить ospf чем скрипты.

Войдите или зарегистрируйтесь, чтобы ответить.