Comments 27
>Заранее намеренно опускаю всякий флейм, как не превратить debian в slackware.
Тут бы checkinstall помог.
Тут бы checkinstall помог.
+3
UPD: Я правильно понимаю, что bird не занимается какой-либо балансировкой, а устанавливает маршрут на работающий канал который имеет максимальный приоритет?
+2
а если добавить в список source.list:
и указать текущую версию в apt.conf:
можно сделать проще:
и версия bird 1.3.8 окажется магическим образом установленной на вашем компьютере
deb http://ftp.ru.debian.org/debian unstable main contrib non-free
и указать текущую версию в apt.conf:
APT::Default-Release "testing";
можно сделать проще:
apt-get -t sid install bird
и версия bird 1.3.8 окажется магическим образом установленной на вашем компьютере
+5
Приведу тут одну ссылку: make checkinstall.
0
1) Да, checkinstall поможет, но я специально умолчал об этом :-) На самом деле, эту конфигурацию я собрал более 2-х месяцев назад и писал статью по хистори и уже готовым конфигам.
2) Так как в static route нет стоимости (cost), то тут балансировки нет, это самая простая реализация. Но никто не запрещает использование каких-либо внешних тулзов.
3) Конечно, можно добавить репо сида и установить последний bird, но я сделал так.
2) Так как в static route нет стоимости (cost), то тут балансировки нет, это самая простая реализация. Но никто не запрещает использование каких-либо внешних тулзов.
3) Конечно, можно добавить репо сида и установить последний bird, но я сделал так.
-3
А в чем преимущество этого метода, если практически все мы настраиваем руками? Простой скриптик с пинговалкой заменит эту «курочку».
+3
Данное решение проверят только наличие линка в ethernet, а ведь это не значит что интернет доступен через этого провайдера.
Обычно запускают какой-то скрипт из cron, который пингает что-то через каждый канал и удаляет маршрут по умолчанию на этот канал.
Обычно запускают какой-то скрипт из cron, который пингает что-то через каждый канал и удаляет маршрут по умолчанию на этот канал.
+5
Эм, либо я не понял содержание статьи, либо все всё это можно сделать немного проще (пример для FreeBSD)
make -C /usr/ports/net/quagga/ install clean
echo 'quagga_enable="YES"' >> /etc/rc.conf
echo 'quagga_daemons="zebra"' >> /etc/rc.conf
echo 'ip route 0.0.0.0/0 em0 20' >> /usr/local/etc/quagga/zebra.conf
echo 'ip route 0.0.0.0/0 em1 10' >> /usr/local/etc/quagga/zebra.conf
service quagga start
0
Да, можно и так, но ключевое слово bird.
0
Я сильно сомневаюсь в
1) dead gateway detection
2) ответ уйдет с тогоже линка куда и пришел
3) балансировка исходящего трафика будет работать
Был бы рад если бы написали статью с гарантировано рабочим решением для FreeBSD.
1) dead gateway detection
2) ответ уйдет с тогоже линка куда и пришел
3) балансировка исходящего трафика будет работать
Был бы рад если бы написали статью с гарантировано рабочим решением для FreeBSD.
0
1) Тут нет dead gateway detection, тут чистой воды ethernet link detection
2) ответ уедет с того же линка.
3) про балансировку никто не говорил.
2) ответ уедет с того же линка.
3) про балансировку никто не говорил.
0
Мой коментарий был к quagga и FreeBSD. В любом случае quagga не умеет ни dead gw ни link down определять. Как заставить отвечать с тогоже интерфейса тоже не ясно, ответ уходит через тот где default. Я проверил только что на FreeBSD 9.0. Посему вопрос, как сделать аналогичное на FreeBSD по прежнему открыт для меня.
0
2) На pf (openbsd'шный брандмауэр, пользуюсь им) погуглите reply-to. По памяти там синтаксис такой:
www.openbsd.org/faq/pf/pools.html
3) Ввиду того, что у меня на 8.2 на которой старая версия pf, удалось сделать только балансировку исходящего из ната с помощью пула адресов, ссылка та же:
В новой версии pf, если я правильно понял, есть конструкция
www.openbsd.org/faq/pf/nat.html
pass in on $ext_if1 reply-to ($ext_if1 $ext_gateway1) from any to $ext_if1
pass in on $ext_if2 reply-to ($ext_if2 $ext_gateway2) from any to $ext_if2
www.openbsd.org/faq/pf/pools.html
3) Ввиду того, что у меня на 8.2 на которой старая версия pf, удалось сделать только балансировку исходящего из ната с помощью пула адресов, ссылка та же:
nat on $ext_if1 from $lan_if:network to $ext_if1 -> {$ext_if1, $ext_if2}
nat on $ext_if2 from $lan_if:network to $ext_if2 -> {$ext_if1, $ext_if2}
В новой версии pf, если я правильно понял, есть конструкция
pass out on $ext_if1 from $lan_if:network to any nat-to {$ext_if1, $ext_if2}
pass out on $ext_if2 from $lan_if:network to any nat-to {$ext_if1, $ext_if2}
www.openbsd.org/faq/pf/nat.html
0
Мой рабочий вариант скрипта переключения каналов, принцип работы скрипта: пингуем шлюз каналов, если пинга до шлюза нет, значит канал лежит, ничего умнее не придумал.
Скрипт изменяет шлюз по умолчанию если основной канал вдруг падает, если канал возвращается на место шлюз также возвращается. В pf имею 3 конфига, активен только канал 1, активен только канал 2 и активны оба канала, что там писать уж на свой вкус, мой вариант когда оба канала работают
#!/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
GW1=Шлюз первого аплинка
GW2=Шлюз второго аплинка
tester=0;
itest1=`/sbin/ping -c 3 $GW1 | grep "64 bytes" | wc -l`;
itest2=`/sbin/ping -c 3 $GW2 | grep "64 bytes" | wc -l`;
if [ ! -f "/tmp/countGW.tmp" ]
then
echo 3 > /tmp/countGW.tmp
fi
oldtest=`cat /tmp/countGW.tmp`
if (test $itest1 -gt "0")
then
let tester=tester+1
fi
if (test $itest2 -gt "0")
then
let tester=tester+2
fi
if [ $oldtest = $tester ]; then
exit;
#echo "Canali ne izmenilis"
else
if [ $oldtest = 3 ]; then
cp /etc/pf.conf /etc/pf.conf3
fi
if [ $tester = 3 ]; then
cp /etc/pf.conf3 /etc/pf.conf
/sbin/route change default $GW1
fi
if [ $tester = 2 ]; then
cp /etc/pf.conf2 /etc/pf.conf
/sbin/route change default $GW2
fi
if [ $tester = 1 ]; then
cp /etc/pf.conf1 /etc/pf.conf
/sbin/route change default $GW1
fi
/etc/rc.d/pf restart
fi
Скрипт изменяет шлюз по умолчанию если основной канал вдруг падает, если канал возвращается на место шлюз также возвращается. В pf имею 3 конфига, активен только канал 1, активен только канал 2 и активны оба канала, что там писать уж на свой вкус, мой вариант когда оба канала работают
ext_if1="ip канала 1"
ext_if2="ip канала 2"
ext_gw1="Шлюз канала 1"
ext_gw2="Шлюз канала 2"
#{Тут какую сеть на какой канал, либо текущий рабочий канал для всех сетей}
#Этих через канал 2
nat on $ext_if1 from 192.168.3.0/24 to !<no_nat> -> $ext_if2
nat on $ext_if1 from 192.168.4.0/24 to !<no_nat> -> $ext_if2
#Остальных через канал 1
nat on $ext_if1 from 192.168.0.0/16 to !<no_nat> -> $ext_if1
pass out on $ext_if1 route-to ($ext_if2 $ext_gw2) from $ext_if2 to !<no_nat>
pass out on $ext_if2 route-to ($ext_if1 $ext_gw1) from $ext_if1 to !<no_nat>
0
это всё замечатльно, но работать у вас будет всего 1 маршрут. автор статьи хотел рассказать про equal cost multipath.
причём, работать оно будет как бог на душу положит и ожидать что вот всё будет per connection не стоит.
заставить это работать per packet мне не удалось. есть идеи с tc actions, но это надо пробовать.
причём, работать оно будет как бог на душу положит и ожидать что вот всё будет per connection не стоит.
заставить это работать per packet мне не удалось. есть идеи с tc actions, но это надо пробовать.
+1
Как-бы, не совсем, если учитывать ECMP, то на линуксе это вообще отстойно сделано, лучше чем на Cisco я еще не встречал.
Простейший вариант ECMP:
при этом, предполагается, что через 10.10.10.1 будет уходить 70%, через 172.17.5.1 — 30%, но, как было уже сказано — будет это работать как попало.
Простейший вариант ECMP:
route 0.0.0.0/0 multipath
via 10.10.10.1 weight 7
via 172.17.5.1 weight 3;
при этом, предполагается, что через 10.10.10.1 будет уходить 70%, через 172.17.5.1 — 30%, но, как было уже сказано — будет это работать как попало.
0
А можно и хардварно и не очень дорого: Mikrotik RB750 или помощнее (если потребности значительные)
0
что значит «хардварно»? внутри микротика routeros, который есть linux. аппаратная акселерация там, максимум в RNG и AES/3DES/SHA-1.
+1
А чего вам не хватает чтобы назвать этот маршрутизатор аппаратным? По крайней мере, я не слышал пока чтобы NAT как-то ускорялся аппаратно.
0
Если вы не слышали, это не значит что такого не делают. например, ускорять можно state table lookup.
afaik, делается это с помощью TCAM.
Если state table основана на хештаблице, то ускориться можно реализовав хеш-фукцию в железе(например, ту же sha-1).
Можно принимаемые фреймы класть в SRAM, которая проецируется в адресное пространство cpu на SoC.
cpu путём записи в опр. регионы памяти инструктирует железку что с фреймом делать.
afaik, делается это с помощью TCAM.
Если state table основана на хештаблице, то ускориться можно реализовав хеш-фукцию в железе(например, ту же sha-1).
Можно принимаемые фреймы класть в SRAM, которая проецируется в адресное пространство cpu на SoC.
cpu путём записи в опр. регионы памяти инструктирует железку что с фреймом делать.
0
Sign up to leave a comment.
Домашний интернет: маршрутизация двух (и боле) провайдеров на основе Bird Routing Daemon