Всем привет!
На рутере есть две сетевухи. Обе дают выход в инет.
Один из линков может отказать(глюки прова).
Тaкой вопрос: можно (при помощи Linux iproute2?) сделать так что бы при падении одного интерфейса, весь трафик автоматически рутился на другой. Т.е. система должна сама это определять и выполянть соответ. действия. Возможна ли такая фишка для рутеров(мой рутер направляет траффик на 2 внешних рутера и один из них упал )?
Всем заранее пасибо.
>Всем привет!
>На рутере есть две сетевухи. Обе дают выход в инет.
>Один из линков может отказать(глюки прова).
>Тaкой вопрос: можно (при помощи Linux iproute2?) сделать так что бы при
>падении одного интерфейса, весь трафик автоматически рутился на другой. Т.е. система
>должна сама это определять и выполянть соответ. действия. Возможна ли такая
>фишка для рутеров(мой рутер направляет траффик на 2 внешних рутера и
>один из них упал )?
>Всем заранее пасибо.
Поставь демона routed, а еще лучше gated, и распиши для него статические правила, что-бы он не обновлял таблицу маршрутов динамически.
>Поставь демона routed, а еще лучше gated, и распиши для него статические
>правила, что-бы он не обновлял таблицу маршрутов динамически.
Я в Debian routed и gated не нашел, нашел какой-то bird. Ковыряю его.
>Поставь демона routed, а еще лучше gated, и распиши для него статические
>правила, что-бы он не обновлял таблицу маршрутов динамически.
Про routed - слышал, про gated - нет, на bird вобще случайно наткнулся. Хотелось бы поинтересоваться а какой софт вообще существует для решения таких проблем. Хотелось бы также в кратце узнать основные достоинства и недостатки.
Routed довольно старый, и многого не умеет, особенно новые версии протоколов динамической маршрутизации, но в принципе как я понял у вас только два интерфейса, и надо разруливать между ними, тут не надо никакой динамики, но тем не мене лучше использовать gated, он более новый и умеет туеву хучу всего, в том числе и то что вам нужно.
С bird'ом никогда не сталкивался, что это такое сказать не могу.
>Routed довольно старый, и многого не умеет, особенно новые версии протоколов динамической
>маршрутизации, но в принципе как я понял у вас только два
>интерфейса, и надо разруливать между ними, тут не надо никакой динамики,
>но тем не мене лучше использовать gated, он более новый и
>умеет туеву хучу всего, в том числе и то что вам
>нужно.
>С bird'ом никогда не сталкивался, что это такое сказать не могу.Защел на www.gated.org (теперь www.nexthop.com) и понял что нынче эта распрекрасная софтина платная.
Может я что-то не до конца понял?
Возможно, все в жизни меняется, хотя мне в свое время она досталась, если можно так сказать, бесплатно в составе дистрибутива линукса, правда в RPM.
>Возможно, все в жизни меняется, хотя мне в свое время она досталась,
>если можно так сказать, бесплатно в составе дистрибутива линукса, правда в
>RPM.
Да я тут уже bird ковыряю, славная штучка. Поддерживает RIP, ospf, bgp. Хрумс, ковыряю.
Хотелось бы узнать какой протокол для этого надо использовать OSPF или BGP.
Уточню начальные условия:
рутер предоставляет выход в инет сети, состоящие из двух сегментов. Выход в инет осуществляется при помощи двух внешних интерфейсов.
Я еще не до конца разобрался что к чему, читаю RFC про оба протокола.
>Хотелось бы узнать какой протокол для этого надо использовать OSPF или BGP.
>
>Уточню начальные условия:
>рутер предоставляет выход в инет сети, состоящие из двух сегментов. Выход
>в инет осуществляется при помощи двух внешних интерфейсов.
>Я еще не до конца разобрался что к чему, читаю RFC про
>оба протокола.
Для решения вашей задачи вполне достаточно OSPF.
Лучшая его реализация для Unix - это Zebra, которая намного превосходит и gated и тем более routed.
объясните, как вы будете OSPF настраивать когда провайдер (вероятность 99%) пошлёт вас подальше? :) И тем более, BGP...
>объясните, как вы будете OSPF настраивать когда провайдер (вероятность 99%) пошлёт вас
>подальше? :) И тем более, BGP...Накой хрен вам OSPF, у вас два интерфейса, настройте статическую мршрутизацию и все, самое сложное что вам может понадобиться, это балансировка нагрузки между интерфейсами, а если у вас второй интерфейс просто резервный, то и это вам не понадобится.
>Накой хрен вам OSPF, у вас два интерфейса, настройте статическую мршрутизацию и
>все, самое сложное что вам может понадобиться, это балансировка нагрузки между
>интерфейсами, а если у вас второй интерфейс просто резервный, то и
>это вам не понадобится.
Типа согласен, только условие такое что на 2 интерфейс ничего не должно идти когда 1 пашет. Траффик пойдет туда ТОЛЬКО при условии, если 1 интерфейс тормознул.
Надо сделать так: пока все ОК гоним траффик через 1 интрефейс, а когда 1 интрефейс здох, перенаправляем все на 2. Как только 1 очнулся всё опять рутим туда.
Значит вам нужны просто статические правиля мршрутизации, это самы простой вариант
>Значит вам нужны просто статические правиля мршрутизации, это самы простой вариант
Условия я написал. ip любые. Теперь при помоще route или ip route напиши эти самы статические правила.
ну уж не получится, я с этим давно давно разбирался, поэтому синтаксис правил не помню, да разбираться, честно говоря, нет никакого желания.
Просто я помню принцип работы всего этого огорода, вот и объяснил, а с правилами разбирайся сам.
>ну уж не получится, я с этим давно давно разбирался, поэтому синтаксис
>правил не помню, да разбираться, честно говоря, нет никакого желания.
>Просто я помню принцип работы всего этого огорода, вот и объяснил, а
>с правилами разбирайся сам.
Не надо меня считать дебилом который задает тупые вопросы типа "А как мне то?" "А как мне это?" не ознакомившись с маном. Если ты не понял я уже этот ознакомился с man ip route и синтаксисом правил вполне знаком. Типа если ты думаешь что я не могу набросать два дефолтовых маршрута это не так. Фишка в том будет ли это правильно работать.
>объясните, как вы будете OSPF настраивать когда провайдер (вероятность 99%) пошлёт вас
>подальше? :) И тем более, BGP...
Типа согласен. Насколько я понимаю если пров не откроет моему рутеру доступ к своим хотя бы по 1 из этих протоколов, то тогда не хера пахать не будет.
>>объясните, как вы будете OSPF настраивать когда провайдер (вероятность 99%) пошлёт вас
>>подальше? :) И тем более, BGP...
>Типа согласен. Насколько я понимаю если пров не откроет моему рутеру доступ
>к своим хотя бы по 1 из этих протоколов, то тогда
>не хера пахать не будет.
вот iproute2 должен уметь так делать :
Сейчас рассмотрим ситуацию с разделением каналов. Предположим у нас
есть два линка на разных провайдеров. Создаем для каждого свою таблицу
маршрутов, и правила привязывающие соответственные сети провайдеров к
нужным интерфейсам. Это гарантирует нам возврат пакета, отправленного
через одного из провайдеров от него-же. Однако если маршрут по
умолчанию будет указывать только на один линк, мы получим
разбалансированную нагрузку по каналам. Для решения этой проблемы
маршрут по умолчанию укажем на два устройства сразу:# ip route add default scope global nexthop via $ip_prov1 dev ppp0 \
weight 1 nexthop via $ip_prov2 dev ppp1 weight 1Это сбалансирует маршруты через обоих провайдеров. Параметр weight
может быть настроен для перевеса нагрузки в ту или иную сторону.
А работает ли ? хз
>>>объясните, как вы будете OSPF настраивать когда провайдер (вероятность 99%) пошлёт вас
>>>подальше? :) И тем более, BGP...
>>Типа согласен. Насколько я понимаю если пров не откроет моему рутеру доступ
>>к своим хотя бы по 1 из этих протоколов, то тогда
>>не хера пахать не будет.
>вот iproute2 должен уметь так делать :
>Сейчас рассмотрим ситуацию с разделением каналов. Предположим у нас
> есть два линка на разных провайдеров. Создаем для каждого
>свою таблицу
> маршрутов, и правила привязывающие соответственные сети провайдеров к
> нужным интерфейсам. Это гарантирует нам возврат пакета, отправленного
> через одного из провайдеров от него-же. Однако если маршрут
>по
> умолчанию будет указывать только на один линк, мы получим
>
> разбалансированную нагрузку по каналам. Для решения этой проблемы
> маршрут по умолчанию укажем на два устройства сразу:
>
> # ip route add default scope global
>nexthop via $ip_prov1 dev ppp0 \
> weight 1 nexthop via $ip_prov2
>dev ppp1 weight 1
>
> Это сбалансирует маршруты через обоих провайдеров. Параметр weight
> может быть настроен для перевеса нагрузки в ту или
>иную сторону.
>
>
>А работает ли ? хз
Прикинь вот как раз щас читаю про nexthop
А так посибки попробую.
>>>>объясните, как вы будете OSPF настраивать когда провайдер (вероятность 99%) пошлёт вас
>>>>подальше? :) И тем более, BGP...
>>>Типа согласен. Насколько я понимаю если пров не откроет моему рутеру доступ
>>>к своим хотя бы по 1 из этих протоколов, то тогда
>>>не хера пахать не будет.
>>вот iproute2 должен уметь так делать :
>>Сейчас рассмотрим ситуацию с разделением каналов. Предположим у нас
>> есть два линка на разных провайдеров. Создаем для каждого
>>свою таблицу
>> маршрутов, и правила привязывающие соответственные сети провайдеров к
>> нужным интерфейсам. Это гарантирует нам возврат пакета, отправленного
>> через одного из провайдеров от него-же. Однако если маршрут
>>по
>> умолчанию будет указывать только на один линк, мы получим
>>
>> разбалансированную нагрузку по каналам. Для решения этой проблемы
>> маршрут по умолчанию укажем на два устройства сразу:
>>
>> # ip route add default scope global
>>nexthop via $ip_prov1 dev ppp0 \
>> weight 1 nexthop via $ip_prov2
>>dev ppp1 weight 1
>>
>> Это сбалансирует маршруты через обоих провайдеров. Параметр weight
>> может быть настроен для перевеса нагрузки в ту или
>>иную сторону.
>>
>>
>>А работает ли ? хз
>Прикинь вот как раз щас читаю про nexthop
>А так посибки попробую.Прикинь а про nexthop есть статья на opennet.ru! И не только про него! Это ж можно было даже не начинать тред !!
>Прикинь а про nexthop есть статья на opennet.ru! И не только про
>него! Это ж можно было даже не начинать тред !!
Я вот не понимаю почему меня все за тормоза держат. С Linux Advanced Routing Howto я тоже вполне ознакомлен. Там про маршрутизацию маленький кусочек написан.
> # ip route add default scope global
>nexthop via $ip_prov1 dev ppp0 \
> weight 1 nexthop via $ip_prov2
>dev ppp1 weight 1
Протестил это на домашней сети(2 реальных тачки 2 на vmware).
Не катит. Линукс до посинения роутит все на via $ip_prov1 dev ppp0(eth0) хоть епнись. Даже если этот хост не включен. После чего рапортует host unreach...
>> # ip route add default scope global
>>nexthop via $ip_prov1 dev ppp0 \
>> weight 1 nexthop via $ip_prov2
>>dev ppp1 weight 1
>Протестил это на домашней сети(2 реальных тачки 2 на vmware).
>Не катит. Линукс до посинения роутит все на via $ip_prov1 dev ppp0(eth0)
> хоть епнись. Даже если этот хост не включен. После чего
>рапортует host unreach...Лохонулся с децл. Через 15 минут случилось озарение.
>>> # ip route add default scope global
>>>nexthop via $ip_prov1 dev ppp0 \
>>> weight 1 nexthop via $ip_prov2
>>>dev ppp1 weight 1
Этот вариант похоже не катит по тем причинам что происходит балансировка нагрузки т.е. если даже $ip_prov1 в поряде траффик может пойти через $ip_prov2.
>Всем привет!
>На рутере есть две сетевухи. Обе дают выход в инет.
>Один из линков может отказать(глюки прова).
>Тaкой вопрос: можно (при помощи Linux iproute2?) сделать так что бы при
>падении одного интерфейса, весь трафик автоматически рутился на другой. Т.е. система
>должна сама это определять и выполянть соответ. действия. Возможна ли такая
>фишка для рутеров(мой рутер направляет траффик на 2 внешних рутера и
>один из них упал )?
>Всем заранее пасибо.Здесь как раз все просто, делается обыкновенной статической
маршрутизацией, рекомендованные здесь gated,routed и пр. - ересь,
т.к. как минимум для этого протоколы маршрутизации должны быть запущены
со стороны провадеров.
Основная проблема заключается в том, чтобы обнаружить, что линия
накрылась, так если у тебя ethernet к провадерам, то мягко выражаясь
это нетривиальная задача.
В случае же, если интерфейс позволяет ослеживать свое состояние и
обрабатывать изменения (например ppp через ip-up/ip-down), то все очень
просто.
>Основная проблема заключается в том, чтобы обнаружить, что линия
>накрылась, так если у тебя ethernet к провадерам, то мягко выражаясь
>это нетривиальная задача.
Именно он. А обнаруживается это по такми симптомам: траффик не идет. И мне пох на то как это случилось файрвольное правило iptables -I FORWARD 1 -j DROP у прова на рутере или просто где-то кусок эзернет кабеля бомжи в утиль отправили.
>>Основная проблема заключается в том, чтобы обнаружить, что линия
>>накрылась, так если у тебя ethernet к провадерам, то мягко выражаясь
>>это нетривиальная задача.
>Именно он. А обнаруживается это по такми симптомам: траффик не идет. И
>мне пох на то как это случилось файрвольное правило iptables -I
>FORWARD 1 -j DROP у прова на рутере или просто где-то
>кусок эзернет кабеля бомжи в утиль отправили.Провайдеры-то разные ?
>Провайдеры-то разные ?
Разные, один через ethernet другой через ppp.
>>Провайдеры-то разные ?
>Разные, один через ethernet другой через ppp.
В таком разе есть 2 варианта:1. Самописным скриптом мониторить состояние интерфейса eth0 на предмет
наличия входящих пакетов (ppp при падении/подъеме сам в состоянии об
этом сообщать) и при их наличии/отсутствии производить необходимые настройки
в таблице маршрутизации2. Получить AS и запустить bgp (этот процесс достаточно длителный)
>2. Получить AS и запустить bgp (этот процесс достаточно длителный)
Хы а ты смешной.
А что средствами ip-route это точно сделать незя.
Скрипт я кстати уже написал, но считаю этот вариант кривоватым.
>>2. Получить AS и запустить bgp (этот процесс достаточно длителный)
>Хы а ты смешной.
>А что средствами ip-route это точно сделать незя.Я не понял, это вопрос или утверждение ?
>Скрипт я кстати уже написал, но считаю этот вариант кривоватым.
А других вариантов у тебя и нет, хоть и криво, но в твоем случае это
единственный способ, т.к. других механизмов в ядре не наблюдается.
более того, zebra например ospf multipath, делает все через тот же
iproute.
А то, что криво, так это не страшно - весь юникс вообще сборище костылей.
>А то, что криво, так это не страшно - весь юникс вообще
>сборище костылей.
А-а-а-а-а-а!!!!!
Привожу скрипт (точнее его версию для публикации здесь), который проверяет работоспособность каналов до двух разных провайдеров, и, если надо, меняет маршрут по умолчанию.
Точнее меняет, если до одного провайдера начинает доходить меньше 50% пингов.
Да, скрипт просто ингует сначала один шлюз, потом другой.
Скрипт работает на FreeBSD 5.1.
В этой системе таблица маршрутов смотрится командой netstat -rn.
Маршруты добавляются и удаляются статически командами
route add адрес шлюз
route delete адрес
route add default и route delete default - ставит и убирает маршрут по умолчанию.
Как я понимаю, в linux для этого используются свои программы.---------------------
#!/usr/bin/perlopen (OLD, '/usr/bin/netstat -rn | /usr/bin/grep default |') or die 'Can\'t open pipe';
while ($line = <OLD>)
{
($def, $old) = (split(/[\s\t]+/, $line))[0,1];
last if ($def eq 'default');
}
close OLD;$ip{one} = '1.1.1.1';
$ip{two} = '2.2.2.2';$name{'1.1.1.1'} = 'one';
$name{'2.2.2.2'} = 'two';die "$old - unknown route\n" unless exists $name{$old};
$old = $name{$old};
while($adr = (each %ip)[0])
{
$line = (`/sbin/ping -q -c 20 $ip{$adr}`)[3];
chomp $line;
($ping{$adr}) = $line =~ /(\d+)%/;
$ping{$adr} = 100 if($ping{$adr} eq '');
$ping{$adr} = 100 - $ping{$adr};
}if($ping{one} >= 50) { $route = 'one'; }
else { $route = 'two'; }#`/bin/date >> /usr/local/stat/traf/route.log`;
#open(FILE,">> /usr/local/stat/traf/route.log") or exit;
#print qq~
#To global-iks: $ping{one}%
#To global-dsv: $ping{two}%
#Were route: '$old'
#Now route: '$route'
#---
#~;
#close FILE;if($old ne $route)
{`/sbin/route delete default`;
`/sbin/route add default $ip{$route}`;
}exit;
---------------------У меня примерно такой скрипт работает уже около года.
Насчет BGP и прочих протоколов - не забывайте, что один канал у автора темы организован через ppp.
А ppp - это point to point, т.е. никаких протоколов такого типа, насколько я понимаю, в нем не предусматривается.
За скриптик пасибо, правдо я уже сам кое-чего накатал (анализировал /proc/net/dev на предмет изменения траффика за час, тоже на перле).
Абыр!
Может быть это все и так понимают, но как мне показалось не совсем.
В задаче не совсем определены условия, а именно:
1. Если машина с двумя интерфейсами к провайдерам маршрутизит трафик с реальных Ip-адресов (т.е. за ним у Вас стоят серверы с реальной интернет-подсетью одного из провайдеров - почта там еще чего), то в этом случае однозначно протоколы динамической маршрутизации + поддержка со стороны провайдеров, потому как при падении линка одного его маршрутизаторы должны понимать, что пакеты на адреса выделенной Вам посети нужно кидать через сети второго - соответственно в конце маршрута через Ваш второй линк. Тут лучший выбор - AS->BGP, Zebra (как уже было сказано) или cisco.
2. Если за машиной нет реальной подсети, на ней поднят NAT и все вообще проходит через нат. ТУт все решается простой статикой/скриптами и т.д. Хотя можно и поднять один из демонов, перекидывающий по приоритету пакеты после ната на один из линков.Я думаю, не стоит удивляться, что Вам советуют и статику и BGP - условия до конца не определены и оба решения актуальны и имеют место быть