Выкладываю на общий суд сабж: ну нету БГП ни у одного из моих провов :-(
Нужно простое переключение каналов: при падении основного на резерв, при восстановлении - обратно.роутер - фряха 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. Просьба, сильно ногами не пинать :-(
Я пользуюсь следующей схемой:
rl1 --- local
rl2 --- ISP1
rl3 --- ISP2Запущен NAT на rl2 и rl3 порты 8668 8669 соответственно.
При падении канала меняю роуту по умолчанию с ISP1 на ISP2,
заменяю строку в IPFW с дивертом 8668 на строку с дивертом на порт 8669Через второго провайдера ежеминутно пингую свой внешний IP
предоставленный первым провом. Как появляется ответ, меняю все обратно как было.
Меня тоже интересует этот вопрос, можно ли пользоваться этим скриптом?
>Меня тоже интересует этот вопрос, можно ли пользоваться этим скриптом?Можно :), я пользуюсь - работает.
своим ответом автору не помогу, но подолью масла в огонь...у меня похожая ситуация, но немного сложнее:
что имеем:
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
при падении одного из какалов все автоматически юзают один рабочий
помогите разобраться кто в теме, а то я ни когда с двумя аплинками не сталкивался, даже не понимаю с чего начать...
>[оверквотинг удален]
>em2 -> ISP B (ADSL 2 Mbit)
>
>что хотим:
>
>половина клиентских компов должна выходить в инет через ISP A
>вторая половина через ISP B
>при падении одного из какалов все автоматически юзают один рабочий
>
>помогите разобраться кто в теме, а то я ни когда с двумя
>аплинками не сталкивался, даже не понимаю с чего начать...на сколько мне удалось понять, в моем случае все решается только динамической маршрутизацией...или все же можно что-то более простое придумать(я надеюсь)
все упирается в маршрут по умолчанию, а у меня для каждого линка он свой...
ткните носом в каком направлении рыть
>[оверквотинг удален]
>>помогите разобраться кто в теме, а то я ни когда с двумя
>>аплинками не сталкивался, даже не понимаю с чего начать...
>
>на сколько мне удалось понять, в моем случае все решается только динамической
>маршрутизацией...или все же можно что-то более простое придумать(я надеюсь)
>
>все упирается в маршрут по умолчанию, а у меня для каждого линка
>он свой...
>
>ткните носом в каком направлении рытьда, вот еще что настораживает: если маршрутизация динамическая значит нет маршрут по умолчанию, а сендмейлу это понравится?
>[оверквотинг удален]
>>на сколько мне удалось понять, в моем случае все решается только динамической
>>маршрутизацией...или все же можно что-то более простое придумать(я надеюсь)
>>
>>все упирается в маршрут по умолчанию, а у меня для каждого линка
>>он свой...
>>
>>ткните носом в каком направлении рыть
>
>да, вот еще что настораживает: если маршрутизация динамическая значит нет маршрут по
>умолчанию, а сендмейлу это понравится?какое дело сендмылу есть ли маршрут в таблице маршрутизации??? его дело 7-5 уровень OSI, за доставку пакетов отвечает 3 уровень. Но не суть.
Алгоритм действия простой:
1. Предполагаем что отправлять трензитныей трафик через чужого провайдера мы не можем.
2. Соответственно все должно NATиться и PATитьтся
3. считаем что локальная сеть А выходит через итнерфейс провайдера ПА, Б соответственно ПБ
4. настраиваем выход в инет для каждой сети. сеть А натишь на адрес ПА, Б на ПБ
5. Рисуешь скрипт проверки живости канала. Пингами. До ближайшего интерфейса провайдера. Потерял 3-5-7 пингов (вставить нужное), принимаешь решение что канал упал, но продолжаешь его мониторить. Скрипт такой проверки гуглится на ура.
5. переписываешь правила маршрутизации и трансляции согласно новым условиям
6. аналогичная проверка для второго канала
7. и в цикл...где-то так
>какое дело сендмылу есть ли маршрут в таблице маршрутизации??? его дело 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. и в цикл...на счет скрипта я тоже думал, но даже не приступал к реализации т.к. решил что раз через нат не получается придется делать динамическую маршрутизацию а там уже скрипты не нужны...
>
>где-то так
>на счет скрипта я тоже думал, но даже не приступал к реализации
>т.к. решил что раз через нат не получается придется делать динамическую
>маршрутизацию а там уже скрипты не нужны...динамика у вас бедет работать только если вы получите AS и поднимите BGP
Ну, или, договоритесь с провайдером, поскольку он один, о протоколе маршрутизации.
Поднимайте RIP
>[оверквотинг удален]
>em2 -> ISP B (ADSL 2 Mbit)
>
>что хотим:
>
>половина клиентских компов должна выходить в инет через ISP A
>вторая половина через ISP B
>при падении одного из какалов все автоматически юзают один рабочий
>
>помогите разобраться кто в теме, а то я ни когда с двумя
>аплинками не сталкивался, даже не понимаю с чего начать...Два, три та хоть 4)) работают у меня во фре через Police Base Routing. Статья на эту тему прямо на этом форуме лежит. Правда там используется несколько НАТов, а насколько я знаю на 1 физическом интерфейсе можно запустить только 1. Можете половину натить а вторую пускать сквидом) ну а скрипты при падениях, тут уж только Ваша фантазия. Хоть не очень верю что в вашей ситуации может упасть один линк, а второй будет работать;)
Честно говоря не пробовал, но если обновиться до 6.3 и попробовать
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/ne...Удачи ;-)))
Поспешил я с ответом.
Этот вариант Вам не подойдет, так как сдесь failover сработает только на падение физиского линка.