Проблема такая: есть локальная сеть и два канала связи с разными провайдерами. Стоимость трафика разная, но тот канал, что дешевле, падает чаще.Поставил пакет zebra, отключил defaulrouter в rc.conf, прописал два статичных маршрута в зебре - по одному на каждого провайдера, чтобы днс искались хотя бы напрямую, а не через противника. Пытался настроить ospfd и ripd для зебры, но сильно сомневаюсь, что вообще правильно делал. Отключил ospf и rip, остались только статичные маршруты. Настроил два правила в ipfw:
00050 divert 8668 ip from any to any via xl0
00051 divert 8669 ip from any to any via rl0xl0 - первый провайдер, rl0 - второй провайдер.
Формально все работает, но в таблице маршрутизации (netstat -r) почему-то есть, таки, маршрут default, и указывает он на первого провайдера. Когда провайдер в дауне, у меня вообще связи нет, хотя шлюз другого провайдера нормально пингуется.
Помогите последовательно разобраться. Думаю, что с зебры надо начинать, чтобы маршруты динамически прописывались и это было видно по той же таблице маршрутизации на уровне ядра.
>Проблема такая: есть локальная сеть и два канала связи с разными провайдерами.
>Стоимость трафика разная, но тот канал, что дешевле, падает чаще.>Формально все работает, но в таблице маршрутизации (netstat -r) почему-то есть, таки,
>маршрут default, и указывает он на первого провайдера. Когда провайдер в
>дауне, у меня вообще связи нет, хотя шлюз другого провайдера нормально
>пингуется.Вот скриптик для переключения дефолта:
Автор не известен, было взято из рассылки UAFUG
#!/bin/sh
ext_gw1="x.x.x.x"
ext_gw2="y.y.y.y"
# Setup route to ping through
# Test link one through ext_gw1 to see if any packets get returned
ping1=$( ping -q -c 5 -s 8 -o -t 2 $ext_gw1 | grep "packet loss" | cut
-c24-24 )
# Test link two through ext_gw2 to see if any packets get returned
ping2=$( ping -q -c 5 -s 8 -o -t 2 $ext_gw2 | grep "packet loss" | cut
-c24-24 )
# Configure the ipfw sets as per network route availability
if [ "$ping1" != "0" ]; then
if [ "$ping2" = "1" ]; then
# echo "All chanels fine!!!"
route add default $ext_gw1
else
# echo "Backup chanel dead!!!"
route add default $ext_gw1
fi
else
if [ "$ping2" != "0" ]; then
# echo "Primary chanel dead!!!"
route add default $ext_gw2
else
# echo "Noting is up :((("
fi
fi
#--------------------------------------
> Вот скриптик для переключения дефолта...Нельзя сделать балансировку более автоматической - без скрипта? Хотелось бы задать какие-нибудь параметры каналов, изходя из которых определяется маршрут. А если совсем один из каналов не работает, то весь трафик должен идти через второй.
>
>> Вот скриптик для переключения дефолта...
>
>Нельзя сделать балансировку более автоматической - без скрипта? Хотелось бы задать какие-нибудь
>параметры каналов, изходя из которых определяется маршрут. А если совсем один
>из каналов не работает, то весь трафик должен идти через второй.
>узнай и провайдера отдает ли он вообще роуты по динамики?
>>Нельзя сделать балансировку более автоматической - без скрипта? Хотелось бы задать какие-нибудь
>>параметры каналов, изходя из которых определяется маршрут. А если совсем один
>>из каналов не работает, то весь трафик должен идти через второй.>узнай и провайдера отдает ли он вообще роуты по динамики?
провайдера два разных. роуте не отдают. ospf не нужен, как я понимаю.
но так как провайдеры разные, получается, что разными путями могут пакеты через них ходить. у меня сейчас все ходит через одного. как сделать так, чтобы 1/3 ходила через одного, а 2/3 всех пакетов через другого, когда оба канала доступны, и все 100% пакетов через работающего, если один канал не работает вдруг. при этом, когда канал поднимается, распределение опять должно быть пропорциональным.
Подымайте AS и балансируйте длинами маршрутов.
>Подымайте AS и балансируйте длинами маршрутов.есть статья на эту тему или ветка в форуме может быть? как делать-то?