URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 78215
[ Назад ]

Исходное сообщение
"Разборки с двумя аплинками"

Отправлено Vit , 12-Янв-08 13:46 
Выкладываю на общий суд сабж: ну нету БГП ни у одного из моих провов :-(
Нужно простое переключение каналов: при падении основного на резерв, при восстановлении - обратно.

роутер - фряха 6.2 (ДНС,почта,апач,помойка,нат...)
xl0 -> 192.168.x.x
rl0 -> ISP A (ADSL 256 kbit)
rl1 -> ISP B (WiFi 1 Mbit)

Сию каку, по имени fallover.sh "пихаю" в 5-ти минутный крон.

#cat fallover.sh
#!/bin/sh
WAN_MAIN_CHECK_IP=google.ru    # Надежный как кирпич ip-шник, я так думаю!? :-)
WAN_BACKUP_CHECK_IP= rl0    # Вместо фейса, его ip-шник конечно же.
DEFAULT_ROUTE_IP=`netstat -nr | grep default`
ISP_1_GATE=A.A.A.A
ISP_1_HALFBAND=`expr 32 \* 1024 \* 300 / 2`
ISP_1_ROUTE_COUNT=`ipfw show 40 | awk '{print $3}' ; ipfw -q zero 40`
ISP_2_GATE=B.B.B.B
ISP_2_HALFBAND=`expr 128 \* 1024 \* 300 / 2`
ISP_2_ROUTE_COUNT=`ipfw show 60 | awk '{print $3}' ; ipfw -q zero 60`

if echo $DEFAULT_ROUTE_IP | grep $ISP_1_GATE > /dev/null;
then
    if [ "$ISP_1_HALFBAND" -gt "$ISP_1_ROUTE_COUNT" ];
    then
        if ! (ping -c 3 $WAN_MAIN_CHECK_IP > /dev/null);
        then
            route delete default;
            route add default $ISP_2_GATE;
            route add $WAN_BACKUP_CHECK_IP $ISP_2_GATE;
        fi
    fi
else
    if [ "$ISP_2_HALFBAND" -gt "$ISP_2_ROUTE_COUNT" ];
    then
        if (ping -c 3 $WAN_BACKUP_CHECK_IP > /dev/null) || !(ping -c 3 $WAN_MAIN_CHECK_IP > /dev/null);
        then
            route delete default;
            route delete $WAN_BACKUP_CHECK_IP;
            route add default $ISP_1_GATE;
        else
            echo "<<L1e" > /dev/speaker;
        fi
    else
        echo "<<e3e3e3e3" > /dev/speaker;
    fi
fi

Поднимаю еще один НАТ, и добавляю каунты в ipfw:

/sbin/natd -f /etc/natd.conf -n rl1 -P /var/run/8669.pid
ipfw -q add 40 count ip from any to me in via rl0
ipfw -q add 60 count ip from any to me in via rl1
ipfw -q add 70 divert 8669 from any to any via rl1

Сам знаю что данная резолюция не фен-шуй (далеко не..), и скорее всего похожа на протез.
Поетому меня интересует ВАШЕ мнение относительно ее кривизны.

P.S. Просьба, сильно ногами не пинать :-(


Содержание

Сообщения в этом обсуждении
"Разборки с двумя аплинками"
Отправлено lapweed , 12-Янв-08 14:21 
Я пользуюсь следующей схемой:
rl1 --- local
rl2 --- ISP1
rl3 --- ISP2

Запущен NAT на rl2 и rl3 порты 8668 8669 соответственно.
При падении канала меняю роуту по умолчанию с ISP1 на ISP2,
заменяю строку в IPFW с дивертом 8668 на строку с дивертом на порт 8669

Через второго провайдера ежеминутно пингую свой внешний IP
предоставленный первым провом. Как появляется ответ, меняю все обратно как было.


"Разборки с двумя аплинками"
Отправлено pinger , 22-Янв-08 15:30 
Меня тоже интересует этот вопрос, можно ли пользоваться этим скриптом?

"Разборки с двумя аплинками"
Отправлено Vit , 15-Фев-08 22:13 
>Меня тоже интересует этот вопрос, можно ли пользоваться этим скриптом?

Можно :), я пользуюсь - работает.


"Разборки с двумя аплинками"
Отправлено veridata , 29-Янв-08 17:02 
своим ответом автору не помогу, но подолью масла в огонь...

у меня похожая ситуация, но немного сложнее:

что имеем:

FreeBSD 6.1 (почта,ftp,nat...) - обслуживает 100 клиентских компьютеров

em0 -> 192.168.200.x
em1 -> ISP A (ADSL 2 Mbit)
em2 -> ISP B (ADSL 2 Mbit)

что хотим:

половина клиентских компов должна выходить в инет через ISP A
вторая половина через ISP B
при падении одного из какалов все автоматически юзают один рабочий

помогите разобраться кто в теме, а то я ни когда с двумя аплинками не сталкивался, даже не понимаю с чего начать...


"Разборки с двумя аплинками"
Отправлено veridata , 29-Янв-08 20:59 
>[оверквотинг удален]
>em2 -> ISP B (ADSL 2 Mbit)
>
>что хотим:
>
>половина клиентских компов должна выходить в инет через ISP A
>вторая половина через ISP B
>при падении одного из какалов все автоматически юзают один рабочий
>
>помогите разобраться кто в теме, а то я ни когда с двумя
>аплинками не сталкивался, даже не понимаю с чего начать...

на сколько мне удалось понять, в моем случае все решается только динамической маршрутизацией...или все же можно что-то более простое придумать(я надеюсь)

все упирается в маршрут по умолчанию, а у меня для каждого линка он свой...

ткните носом в каком направлении рыть


"Разборки с двумя аплинками"
Отправлено veridata , 29-Янв-08 21:01 
>[оверквотинг удален]
>>помогите разобраться кто в теме, а то я ни когда с двумя
>>аплинками не сталкивался, даже не понимаю с чего начать...
>
>на сколько мне удалось понять, в моем случае все решается только динамической
>маршрутизацией...или все же можно что-то более простое придумать(я надеюсь)
>
>все упирается в маршрут по умолчанию, а у меня для каждого линка
>он свой...
>
>ткните носом в каком направлении рыть

да, вот еще что настораживает: если маршрутизация динамическая значит нет маршрут по умолчанию, а сендмейлу это понравится?


"Разборки с двумя аплинками"
Отправлено CrAzOiD , 29-Янв-08 23:07 
>[оверквотинг удален]
>>на сколько мне удалось понять, в моем случае все решается только динамической
>>маршрутизацией...или все же можно что-то более простое придумать(я надеюсь)
>>
>>все упирается в маршрут по умолчанию, а у меня для каждого линка
>>он свой...
>>
>>ткните носом в каком направлении рыть
>
>да, вот еще что настораживает: если маршрутизация динамическая значит нет маршрут по
>умолчанию, а сендмейлу это понравится?

какое дело сендмылу есть ли маршрут в таблице маршрутизации??? его дело 7-5 уровень OSI, за доставку пакетов отвечает 3 уровень. Но не суть.
Алгоритм действия простой:
1. Предполагаем что отправлять трензитныей трафик через чужого провайдера мы не можем.
2. Соответственно все должно NATиться и PATитьтся
3. считаем что локальная сеть А выходит через итнерфейс провайдера ПА, Б соответственно ПБ
4. настраиваем выход в инет для каждой сети. сеть А натишь на адрес ПА, Б на ПБ
5. Рисуешь скрипт проверки живости канала. Пингами. До ближайшего интерфейса провайдера. Потерял 3-5-7 пингов (вставить нужное), принимаешь решение что канал упал, но продолжаешь его мониторить. Скрипт такой проверки гуглится на ура.
5. переписываешь правила маршрутизации и трансляции согласно новым условиям
6. аналогичная проверка для второго канала
7. и в цикл...

где-то так


"Разборки с двумя аплинками"
Отправлено veridata , 30-Янв-08 10:22 
>какое дело сендмылу есть ли маршрут в таблице маршрутизации??? его дело 7-5
>уровень OSI, за доставку пакетов отвечает 3 уровень. Но не суть.
>
>Алгоритм действия простой:
>1. Предполагаем что отправлять трензитныей трафик через чужого провайдера мы не можем.

а если можем?
вообще-то провайдер один только вот подключений два...

>2. Соответственно все должно NATиться и PATитьтся

что значит PATитьтся?

>3. считаем что локальная сеть А выходит через итнерфейс провайдера ПА, Б
>соответственно ПБ

сеть пока одна (192.168.1.0), но как я понял для решения моей задачи нужно обязательно раделить на две т.ч. считаем что сеть А - 192.168.1.0 а сеть Б - 192.168.2.0, но подключено все через один интерфейс с alias-ом :

em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        options=b<RXCSUM,TXCSUM,VLAN_MTU>
        inet 192.168.1.30 netmask 0xffffff00 broadcast 192.168.1.255
        inet 192.168.2.30 netmask 0xffffff00 broadcast 192.168.2.255
        ether 00:30:48:8d:68:18
        media: Ethernet autoselect (1000baseTX <full-duplex>)
        status: active


>4. настраиваем выход в инет для каждой сети. сеть А натишь на
>адрес ПА, Б на ПБ

такой фокус у меня не получается...
изначально был один нат и все ходили и продолжают ходить в инет через него.
настроено все по хендбуку:

defaultrouter="X.X.X.X"
gateway_enable="YES"
firewall_enable="YES"
firewall_type="OPEN"

natd_enable="YES"
natd_interface="em1"
natd_flags="-f /etc/natd.conf"

ну и соответственно
divert 8668 ip4 from any to any via em1

для второго канала делаю аналогично:
natd -interface em2 -p 8778
и перед первым divert-ом вставляю еще один
divert 8778 ip4 from 192.168.2.0/24 to any via em2
все как ходили через первый nat так и продолжают, как я понимаю из-за того что маршрут по умолчанию все отправляет через первое соединение (em1)

>5. Рисуешь скрипт проверки живости канала. Пингами. До ближайшего интерфейса провайдера. Потерял
>3-5-7 пингов (вставить нужное), принимаешь решение что канал упал, но продолжаешь
>его мониторить. Скрипт такой проверки гуглится на ура.
>5. переписываешь правила маршрутизации и трансляции согласно новым условиям
>6. аналогичная проверка для второго канала
>7. и в цикл...

на счет скрипта я тоже думал, но даже не приступал к реализации т.к. решил что раз через нат не получается придется делать динамическую маршрутизацию а там уже скрипты не нужны...

>
>где-то так


"Разборки с двумя аплинками"
Отправлено CrAzOiD , 30-Янв-08 15:25 
>на счет скрипта я тоже думал, но даже не приступал к реализации
>т.к. решил что раз через нат не получается придется делать динамическую
>маршрутизацию а там уже скрипты не нужны...

динамика у вас бедет работать только если вы получите AS и поднимите BGP
Ну, или, договоритесь с провайдером, поскольку он один, о протоколе маршрутизации.
Поднимайте RIP


"Разборки с двумя аплинками"
Отправлено Kos , 17-Фев-08 13:36 
>[оверквотинг удален]
>em2 -> ISP B (ADSL 2 Mbit)
>
>что хотим:
>
>половина клиентских компов должна выходить в инет через ISP A
>вторая половина через ISP B
>при падении одного из какалов все автоматически юзают один рабочий
>
>помогите разобраться кто в теме, а то я ни когда с двумя
>аплинками не сталкивался, даже не понимаю с чего начать...

Два, три та хоть 4)) работают у меня во фре через Police Base Routing. Статья на эту тему прямо на этом форуме лежит. Правда там используется несколько НАТов, а насколько я знаю на 1 физическом интерфейсе можно запустить только 1. Можете половину натить а вторую пускать сквидом) ну а скрипты при падениях, тут уж только Ваша фантазия. Хоть не очень верю что в вашей ситуации может упасть один линк, а второй будет работать;)


"Разборки с двумя аплинками"
Отправлено Anatoliy , 29-Янв-08 18:05 
Честно говоря не пробовал, но если обновиться до 6.3 и попробовать
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/ne...

Удачи ;-)))


"Разборки с двумя аплинками"
Отправлено Anatoliy , 29-Янв-08 18:10 
Поспешил я с ответом.
Этот вариант Вам не подойдет, так как сдесь failover сработает только на падение физиского линка.