vgulch 0 Posted 2005-01-14 09:07:01 Share Posted 2005-01-14 09:07:01 подскажите как зароутить переход с одного провайдера на второй. 1 провайдер - eth1, 2 - eth2 Link to post Share on other sites
XoRe 0 Posted 2005-01-14 12:53:56 Share Posted 2005-01-14 12:53:56 т.е. зароутить и т.е. переход? Link to post Share on other sites
nn 7 Posted 2005-01-14 15:10:15 Share Posted 2005-01-14 15:10:15 Насколько я понял идет речь о том, что если ложится один пров или канал к нему, переходить на другого. Продвинутый метод: Если у тя AS, что вряд-ли, то то BGP. Если не знаешь, что это, то забудь про это, руками или скриптом тогда. Ну скрипт нарисать в принцыпе, можно, чтобы выбивал один дефолт гейтвей и поднимал другой, если не пингуется что-то там. Если бэкапить канал, другим каналом или построить ВПН через второго прова, то RIP умеет это делать. Но тогда меняется только маршрут, а не пров. Link to post Share on other sites
XoRe 0 Posted 2005-01-14 17:25:05 Share Posted 2005-01-14 17:25:05 написать скрипт, который пингует каналы обоих провов каждую минуту по 20 раз. если у первого провайдера пингов больше проходит, то на него. если у второго, то на него. у меня примерно что-то подобное реализовано. единственный минус - при переходе рвутся все соединения. т.е. отключается icq и т.д. Link to post Share on other sites
nn 7 Posted 2005-01-16 15:14:31 Share Posted 2005-01-16 15:14:31 написать скрипт, который пингует каналы обоих провов каждую минуту по 20 раз. если у первого провайдера пингов больше проходит, то на него. если у второго, то на него.у меня примерно что-то подобное реализовано. единственный минус - при переходе рвутся все соединения. т.е. отключается icq и т.д. Скрипт в студию, плиз, может пригодится кому. Link to post Share on other sites
XoRe 0 Posted 2005-01-17 00:04:44 Share Posted 2005-01-17 00:04:44 Скрипт мудреный. one - один провайдер, two - другой 1.1.1.1 - шлюз одного провайдера, 2.2.2.2 - другого 111.111.111.111 и 222.222.222.222 хосты, которые идут следующими после шлюзов провайдеров по пути следования пакетов. Советую отследить с помощью traceroute. 111.111.111.111 - ip адрес, который всегда роутится через первого провайдера, 222.222.222.222 - через другого. Используется модуль для perl Net::Ping. pping.pl #!/usr/local/bin/perl use Net::Ping; open (OLD, '/usr/bin/netstat -rn | /usr/bin/grep default |') or die 'Can\'t open pipe'; while ($line = <OLD>) { ($way, $ip) = (split(/[\s\t]+/, $line))[0,1]; last if ($way eq 'default'); } close OLD; $host{one} = '111.111.111.111'; #ip адрес, который всегда роутится через первого провайдера $host{two} = '222.222.222.222'; #ip адрес, который всегда роутится через второго провайдера $ways{one} = '1.1.1.1'; $ways{two} = '2.2.2.2'; $ways{'1.1.1.1'} = 'one'; $ways{'2.2.2.2'} = 'two'; if(exists $ways{$ip}) { $route = $ways{$ip}; } else { die "$ip - unknown route\n"; } if($#ARGV >= 0) { $routenow = @ARGV[0]; goto need if (exists $ways{@ARGV[0]}); } $ping{two} = 0; $ping{one} = 0; foreach(1..20) { #one #two $one = Net::Ping->new('icmp', 1.5, 56); $two = Net::Ping->new('icmp', 1.5, 56); if($one->ping($host{one})) { $ping{one}++; } if($two->ping($host{two})) { $ping{two}++; } $one->close(); $two->close(); } if($ping{one} + 10 >= $ping{two}) { $routenow = 'one'; } else { $routenow = 'two'; } need: open(FILE,"> /usr/local/stat/traf/route") or exit; print FILE "Pings to one: $ping{one}\nPings to two: $ping{two}\nWere route: $route\nNow route: $routenow\n"; close FILE; if($route eq $routenow) { exit; } else { `/bin/cat /usr/local/etc/squid/squid.conf | /usr/bin/grep -v cache_peer | /usr/bin/grep -v never_direct > /tmp/sq`; `/bin/cp -f /tmp/sq /usr/local/etc/squid/squid.conf`; `/bin/rm -f /tmp/sq`; if($routenow eq 'one') { `echo cache_peer proxy.one.ru parent 8080 3130 no-query default >> /usr/local/etc/squid/squid.conf`; `echo never_direct allow all >> /usr/local/etc/squid/squid.conf`; } elsif($routenow eq 'two') { `echo cache_peer proxy.two.ru parent 8080 3130 no-query default >> /usr/local/etc/squid/squid.conf`; `echo never_direct allow all >> /usr/local/etc/squid/squid.conf`; } `/usr/local/sbin/squid -k reconfigure`; `/usr/local/etc/rc.d/routes.sh $routenow`; } exit; У меня в кроне стоит на запуск каждые 2 минуты. В Net::Ping->new('icmp', 1.5, 56);, icmp - протокол, 1.5 - допустимая задержка, 56 - объем данных в пакете. У меня такая задержка потому что у меня пинг на глобал 0,5 секунды минимум. Советую задержку поставить поменьше и запускать каждую минуту. if($ping{one} + 10 >= $ping{two}) - у меня у провайдера one траффик дешевле в полтора раза, по сравнению с two. Поэтому есть приоритет в его использовании. Кроме роутинга, перенастривается прокси-сервер для работы через прокси провайдеров. Если у вас такого нету - убирайте. В /usr/local/stat/traf/route записывается кол-во пингов, какой роутинг был, какой стал. /usr/local/etc/rc.d/routes.sh #!/bin/sh route="/sbin/route -q" main() { #какой-то внутренний и остальной роутинг ${route} add -net 192.168.2.0/24 внутренний_шлюз # homenet2 # для пингования каких-то хостов через разный провайдеров ${route} add 111.111.111.111 1.1.1.1 #For testing one channel ${route} add 222.222.222.222 2.2.2.2 #For testing two channel } case "$1" in start) main ${route} delete default ${route} add default 1.1.1.1 exit 0 ;; two) ${route} delete default ${route} add default 2.2.2.2 exit 0 ;; one) ${route} delete default ${route} add default 1.1.1.1 exit 0 ;; stop) exit 0 ;; *) echo "Usage: `basename $0` { start | one | two }" exit 64 ;; esac В результате можно настроить нужный роутнг командой /usr/local/etc/rc.d/routes.sh { one | two } или pping.pl { one | two } Претензии по написанию принимаются только конструктивные. Т.е. после слов "все это лажа" должен идти пример своих скриптов. Правится по вкусу. 2админам, которые "только установили линукс и как это юзать ваще": юзайте как хотите. Меня попросили только выложить скрипт. Все мои пояснения - личная инициатива. Дальше читайте доки. P.S. Эти скрипты можно настроить на использование хоть 2, хоть 3, хоть n провайдеров. Link to post Share on other sites
vgulch 0 Posted 2005-01-17 12:57:14 Author Share Posted 2005-01-17 12:57:14 Хорошо -XoRe- --- я в принципе так и делал, что удалял дефолтный роут - и прописывал на нового провайдера - но он нешол. Только при выключении карточки (перезагруза->выброс карточки).Включаю карточку.(определение карточки->прописывание роутинга через нее при помощи утилитки настройки карточки). Тогда все пашет. Я делал delete default add default ... и ничего... Link to post Share on other sites
XoRe 0 Posted 2005-02-26 13:47:27 Share Posted 2005-02-26 13:47:27 Так, а на какой ОСи это делается? Link to post Share on other sites
vgulch 0 Posted 2005-02-28 07:20:44 Author Share Posted 2005-02-28 07:20:44 Mandrake 10.0 (дело в том, что сам я iptables-правила не прописывал- у меня стоит Shorewall) - вообшем не понимаю.... Link to post Share on other sites
fork() 0 Posted 2005-03-06 14:09:24 Share Posted 2005-03-06 14:09:24 Воспользоваться возможностями advanced routing ядер 2.2 и выше с помощью пакета iproute2 При этом Сделать несколько маршрутов по умолчанию с одинаковым приоритетом (можно и с разным, в зависимости от того, через какой интерфейс преподчтительнее отсылать пакеты). ip route add default scope global nexthop via $P1 dev $IF1 weight 1 \ nexthop via $P2 dev $IF2 weight 1 здесь $P1 - адрес первого шлюза, $P2 - адрес второго шлюза, $IF1 - интерфейс, который смотрит на первый шлюз, $IF2 - интерфейс, смотрящий на второй шлюз weight - предпочтение (чем больше - тем лучше). При этом если один шлюз недоступен - пакеты пойдут по другим. Здесь есть два момента: - несколько пакетов из одного соединения могут уйти на разные интерфейсы. - при недоступности шлюза через один из интерфейсов уже установленное соединение через "упавший" интерфейс будет разрываться только по time-out. Обе эти проблемы можно решить, если знать исходящий адрес пакета, являющегося частью уже существующего соединения, до момента принятия решения о маршрутизации, но как это сделать средствами iptables conntrack без сторонних патчей - не знаю, может кто подскажет. Подход, решающий обе эти проблемы,правда, с накладыванием "левых" патчей, можно посмотреть здесь Link to post Share on other sites
ispolin 0 Posted 2005-03-06 21:42:36 Share Posted 2005-03-06 21:42:36 Воспользоваться возможностями advanced routing ядер 2.2 и выше с помощью пакета iproute2 Во, так и делается, а люди скриптов напридумывали, хотя все равно молодцы что альтернативу предложили Link to post Share on other sites
fork() 0 Posted 2005-03-07 13:01:03 Share Posted 2005-03-07 13:01:03 Воспользоваться возможностями advanced routing ядер 2.2 и выше с помощью пакета iproute2 Во, так и делается, а люди скриптов напридумывали, хотя все равно молодцы что альтернативу предложили а как преодалеваются те возникающие при этом проблемы, которые я описал? Link to post Share on other sites
ispolin 0 Posted 2005-03-08 00:16:49 Share Posted 2005-03-08 00:16:49 Нет ну нужно ж людям что по другому шли только в случае если первый не работает, поэтому приоритет на первом больше поставить, а вот от второго я и не избавлялся, просто не так часто уж эти переходы и случаются Link to post Share on other sites
nn 7 Posted 2005-03-08 07:22:41 Share Posted 2005-03-08 07:22:41 Доступность шлюза еще не значит, что дальше канал не лежит. В моем случае рутер, который шлюз всегда доступен. И дальше часть канала практически всегда доступна. Заыки случаются как раз за 2 узлами. Link to post Share on other sites
XoRe 0 Posted 2005-03-08 09:21:55 Share Posted 2005-03-08 09:21:55 Доступность шлюза еще не значит, что дальше канал не лежит.В моем случае рутер, который шлюз всегда доступен. И дальше часть канала практически всегда доступна. Заыки случаются как раз за 2 узлами. Вот вот. У меня такая-же ситуация. Есть два провайдера, оба получают инет через спутник. От шлюзов до точек приземления канала 3-5 хопов. Каналы приземляются на постояные айпишники. Я вписал маршрутизацию статически до этих айпишников. В моем случае мои скрипты лучше всего решают задачу постоянного инета. Само собой, реализаций сабжа куча. Я даже не предложил, я просто опубликовал свою реализацию. Потом. Вопрос по теме. Кто какими программами для генерации icmp пакетов пользуется? Link to post Share on other sites
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now