Перейти до

2 providers


Рекомендованные сообщения

Насколько я понял идет речь о том, что если ложится один пров или канал к нему, переходить на другого.

Продвинутый метод:

Если у тя AS, что вряд-ли, то то BGP.

Если не знаешь, что это, то забудь про это, руками или скриптом тогда.

Ну скрипт нарисать в принцыпе, можно, чтобы выбивал один дефолт гейтвей и поднимал другой, если не пингуется что-то там.

Если бэкапить канал, другим каналом или построить ВПН через второго прова, то RIP умеет это делать. Но тогда меняется только маршрут, а не пров.

Ссылка на сообщение
Поделиться на других сайтах

написать скрипт, который пингует каналы обоих провов каждую минуту по 20 раз. если у первого провайдера пингов больше проходит, то на него. если у второго, то на него.

у меня примерно что-то подобное реализовано.

единственный минус - при переходе рвутся все соединения. т.е. отключается icq и т.д.

Ссылка на сообщение
Поделиться на других сайтах
написать скрипт, который пингует каналы обоих провов каждую минуту по 20 раз. если у первого провайдера пингов больше проходит, то на него. если у второго, то на него.

у меня примерно что-то подобное реализовано.

единственный минус - при переходе рвутся все соединения. т.е. отключается icq и т.д.

Скрипт в студию, плиз, может пригодится кому.

Ссылка на сообщение
Поделиться на других сайтах

Скрипт мудреный.

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 провайдеров.

Ссылка на сообщение
Поделиться на других сайтах

Хорошо -XoRe- --- я в принципе так и делал, что удалял дефолтный роут - и прописывал на нового провайдера - но он нешол. Только при выключении карточки (перезагруза->выброс карточки).Включаю карточку.(определение карточки->прописывание роутинга через нее при помощи утилитки настройки карточки). Тогда все пашет.

 

Я делал

delete default

add default ...

 

и ничего...

Ссылка на сообщение
Поделиться на других сайтах
  • 1 month later...

Воспользоваться возможностями 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 без сторонних патчей - не знаю, может кто подскажет.

Подход, решающий обе эти проблемы,правда, с накладыванием "левых" патчей, можно посмотреть здесь

Ссылка на сообщение
Поделиться на других сайтах
Воспользоваться возможностями advanced routing ядер 2.2 и выше с помощью пакета iproute2

Во, так и делается, а люди скриптов напридумывали, хотя все равно молодцы что альтернативу предложили

Ссылка на сообщение
Поделиться на других сайтах
Воспользоваться возможностями advanced routing ядер 2.2 и выше с помощью пакета iproute2

Во, так и делается, а люди скриптов напридумывали, хотя все равно молодцы что альтернативу предложили

а как преодалеваются те возникающие при этом проблемы, которые я описал?

Ссылка на сообщение
Поделиться на других сайтах

Нет ну нужно ж людям что по другому шли только в случае если первый не работает, поэтому приоритет на первом больше поставить, а вот от второго я и не избавлялся, просто не так часто уж эти переходы и случаются

Ссылка на сообщение
Поделиться на других сайтах

Доступность шлюза еще не значит, что дальше канал не лежит.

В моем случае рутер, который шлюз всегда доступен. И дальше часть канала практически всегда доступна.

Заыки случаются как раз за 2 узлами.

Ссылка на сообщение
Поделиться на других сайтах
Доступность шлюза еще не значит, что дальше канал не лежит.

В моем случае рутер, который шлюз всегда доступен. И дальше часть канала практически всегда доступна.

Заыки случаются как раз за 2 узлами.

Вот вот. У меня такая-же ситуация.

Есть два провайдера, оба получают инет через спутник.

От шлюзов до точек приземления канала 3-5 хопов.

Каналы приземляются на постояные айпишники.

Я вписал маршрутизацию статически до этих айпишников.

В моем случае мои скрипты лучше всего решают задачу постоянного инета.

Само собой, реализаций сабжа куча.

Я даже не предложил, я просто опубликовал свою реализацию.

 

Потом. Вопрос по теме.

Кто какими программами для генерации icmp пакетов пользуется?

Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Вхід

Уже зарегистрированы? Войдите здесь.

Войти сейчас
  • Зараз на сторінці   0 користувачів

    Немає користувачів, що переглядають цю сторінку.

×
×
  • Створити нове...