Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: переключение на резервный канал интернета  (Прочитано 15035 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Гарри Кашпировский

  • Гость
Re: переключение на резервный канал интернета
« Ответ #15 : 22 Октября 2009, 22:12:18 »
На самом деле, если пользоваться маскарадингом, то правило NAT одно
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -d ! 192.168.1.0/24 -j MASQUERADEИ перёдергивать его в скрипте не нужно.

Оффлайн VerstaK

  • Автор темы
  • Любитель
  • *
  • Сообщений: 53
    • Просмотр профиля
Re: переключение на резервный канал интернета
« Ответ #16 : 24 Октября 2009, 14:31:55 »
Прочитал мануал по Firestarter, ничего про автоматическую смену провайдера при обрыве связи там нет...

Решил посмотреть в сторону firewall builder, уж больно он похож на виндовый kerio. Будем надеяться, найдем там функцию автоматического переключения

Оффлайн yuristep

  • Участник
  • *
  • Сообщений: 248
    • Просмотр профиля
Re: переключение на резервный канал интерне&#
« Ответ #17 : 24 Октября 2009, 17:47:50 »
Добый денб.

Есть Ubuntu, в которой стоит три сетевухи:
eth0 82.***.***.** - интернет от провайдера 1
eth1 94.***.***.** - интернет от провайдера 2
eth2 192.168.1.100 -локалка.

пользователи через поднятый SAMS ходят в интернет по каналу от провайдера 2, как сделать так, чтобы при пропадании связи на нем автоматом подхватывался провайдер 1. При восстановлении связи с провайдером 1 снова пользователи ходили через 2 провайдера.

стоит Firestarter, с его помощью поднят NAT. Proftpd слушает оба инет-интерфейса

Придется писать скрипт, который будет пинговать опр. IP и при провадании связи от провайдера 2 переключать на пров.1. Или можно это сделать с помощью какого-нибудь GUI? В линуксе новичок, сильно не пинайте
... с помощью GUI хорошо пасьянсы раскладывать, все остальное - лучше творить в консоли...
вопросы для начала:
 - тип подключения к этим двум провайдерам - именно eth, не PPP, PPPoE и т.д. ?
 - как получаете от провайдеров сетевые адреса ?
 - что понимается под словосочетанием "при пропадании связи"? - падает собственно интерфейс, или падает сам провайдер, а Ваш интерфейс на него остается "живым" ... ?
... пинговать внешние адреса - это хорошо, но! что-же у вас будет при канале, "лежащем в планке", когда шейпер провайдера начнет дропать Ваши пакеты? ...
« Последнее редактирование: 24 Октября 2009, 17:49:28 от yuristep »
Осторожно! - Злой админ!

Оффлайн VerstaK

  • Автор темы
  • Любитель
  • *
  • Сообщений: 53
    • Просмотр профиля
Re: переключение на резервный канал интернета
« Ответ #18 : 25 Октября 2009, 03:10:37 »
Оба провайдера выдали статические адреса, адреса шлюзов, макси подсети. подключение - именно eth.
В мир открыт фтп, почта, vnc. Пользователи ходят в инет через сквид (непрозрачный), нат в принципе сделан для удобства.
Необходимо чтобы при отсутствии связи с основным провайдером (у нас в Приморье это очень часто бывает) автоматом подключался второй, резервный, и пользователи ходили в интернет через него, а при воскрешении основного - он снова становился маршрутом по умолчанию.

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28366
    • Просмотр профиля
Re: переключение на резервный канал интернета
« Ответ #19 : 25 Октября 2009, 17:26:44 »
man iproute2
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн VerstaK

  • Автор темы
  • Любитель
  • *
  • Сообщений: 53
    • Просмотр профиля
Re: переключение на резервный канал интернета
« Ответ #20 : 29 Октября 2009, 13:53:28 »
Мда.... Что ж, будем читать

Вот. Еще один скрипт нашел

#!/usr/bin/perl -w
use strict;
use LockFile::Simple qw(lock trylock unlock);
require 'sys/syscall.ph';

# Устанавливаем путь по умолчанию
$ENV{PATH} = '/bin:/usr/bin:/sbin:/usr/sbin';

# Отладка
my $debug=1;

my $lockmgr = LockFile::Simple->make(-format => '%f',
-stale => 1, -autoclean => 1, -hold => 0,
-efunc => undef, -wfunc => undef);

my $lock = '/opt/change-route.lock';

sub quit {
# Помещаем сюда код для корректного
# прекращения работы
exit(0);
};

# Отделяемся от родителя
fork() && exit;

# Отключаемся от терминала
close STDOUT; close STDERR; close STDIN;

# Делаем корень текужим каталогом
chdir '/';

# Создаем новую сессию и становимся лидером
# группы процессов, чтоб нас случайно не прибили
syscall(&SYS_setsid);

# Блокировка (чтоб не запустилось одновременно 2 процесса)
exit 1 unless ($lockmgr->trylock($lock));

# Перехватываем сигналы, для корректного выхода
$SIG{'INT'} = $SIG{'QUIT'} = $SIG{'TERM'} = 'quit';
$SIG{'HUP'} = 'ignore';

# Основной канал
my %primaryip = (
iface => "eth1",
ip => "7.13.6.228",
netmask => "255.255.255.224",
route => "7.13.6.225"
);
# Резервный канал
my %secondaryip = (
iface => "eth2",
ip => "21.2.7.41",
netmask => "255.255.255.252",
route => "21.2.7.42"
);

# Ip для теста
my $testip='86.110.181.76';

# Локальная сеmь
my $iflocal='192.168.0.0/24';

# Правила для iptables
# основной канал
my $primaryrules = " -s $iflocal -o $primaryip{iface} -j SNAT --to-source $primaryip{ip}";
# резервный канал
my $secondaryrules = " -s $iflocal -o $secondaryip{iface} -j SNAT --to-source $secondaryip{ip}";

begin:

# Определение работающего канала
open(A,"route|");
my $activeiface='not';
while () {
next if (!($_ =~ m/default\s+\S+\s+\S+\s+\S+\s+\S+\s+\S+\s+\S+\s+(\S+)/));
$activeiface=$1;
};
close(A);

# Проверка каналов
my $primarystatus=system("ping -c 2 -I $primaryip{ip} $primaryip{route} > /dev/null");
my $secondarystatus=system("ping -c 2 -I $secondaryip{ip} $secondaryip{route} > /dev/null");
system("route add -host $testip gw $primaryip{route} metric 30");
my $primarystatusya=system("ping -c 2 -I $primaryip{ip} $testip > /dev/null");
system("route del -host $testip gw $primaryip{route} metric 30");
system("route add -host $testip gw $secondaryip{route} metric 30");
my $secondarystatusya=system("ping -c 2 -I $secondaryip{ip} $testip > /dev/null");
system("route del -host $testip gw $secondaryip{route} metric 30");

open(LogFile,">> /opt/change-route.log");
if ($debug){
print LogFile "\n",`date`;
print LogFile "Активный канал ", $activeiface, "\n";
print LogFile "Основной канал ",$primaryip{iface},", шлюз ", $primaryip{route}, " ",

$primarystatus?"Недоступен":"Доступен", " ",$testip, " " , $primarystatusya?"Недоступен":"Доступен", "\n";
print LogFile "Резервный канал ",$secondaryip{iface},", шлюз ", $secondaryip{route}, " ",

$secondarystatus?"Недоступен":"Доступен", " ",$testip, " ", $secondarystatusya?"Недоступен":"Доступен", "\n";
};

# Переключение шлюза
# Если используется резервный канал, но доступен основной переключаемся на него
if ( ($activeiface eq $secondaryip{iface}) and ($primarystatusya == 0)) {
print LogFile "Переключаю на основной",$primaryip{iface}, "\n";
system("route del default gw $secondaryip{route}");
system("route add default gw $primaryip{route}");
system("iptables -t nat -D POSTROUTING $secondaryrules");
system("iptables -t nat -A POSTROUTING $primaryrules");
open (MAIL, '| /bin/mail -a
root@diapazon.org

7922ххххххх@sms.ugsm.ru');
print MAIL "Subject: ",`hostname`,"service info";
print MAIL `date`," Pereklyuchenie na osnovnoi kanal";
close (MAIL);
};

# Если используется основной канал, но он не работает переключаемся на резервный
if ( ($activeiface eq $primaryip{iface}) and (!($primarystatusya == 0)) ) {
# Смена маршрута поумолчанию на резервный, при доступности второго канала
if ($secondarystatusya == 0) {
print LogFile "Переключаю на резервный",$secondaryip{iface}, "\n";
system("route del default gw $primaryip{route}");
system("route add default gw $secondaryip{route}");
system("iptables -t nat -D POSTROUTING $primaryrules");
system("iptables -t nat -A POSTROUTING $secondaryrules");
open (MAIL, '| /bin/mail -a
root@diapazon.org

7922ххххххх@sms.ugsm.ru');
print MAIL "Subject: ",`hostname`,"service info";
print MAIL `date`," Pereklyuchenie na rezervnyi kanal";
close (MAIL);
};
};

close(LogFile);
sleep 120;
goto begin;


Может кто-нибудь опытным взглядом посмотреть и сказать - как оно, пойдет?

« Последнее редактирование: 30 Октября 2009, 09:40:01 от VerstaK »

Оффлайн VerstaK

  • Автор темы
  • Любитель
  • *
  • Сообщений: 53
    • Просмотр профиля
Re: переключение на резервный канал интернета
« Ответ #21 : 02 Ноября 2009, 15:30:59 »
Видимо, некому посмотреть опытным глазом. Что ж, буду ставить на выходных да смотреть, как оно будет себя вести. Осталось только узнать, как запустить эту штуку демоном :)

Оффлайн VerstaK

  • Автор темы
  • Любитель
  • *
  • Сообщений: 53
    • Просмотр профиля
Re: переключение на резервный канал интернета
« Ответ #22 : 07 Ноября 2009, 13:27:05 »
Сегодня проводил пробный запуск... Ниччего не получилось. Сервер прекрасно ходит в интернет, а вот пользователи прокси - нет. При подключении обиох интернет-интерфейсов вообще полнейший затуп. Как только отключаешь резервный канал - вроде начинает идти трафик. Втыкаешь кабель на место - тишина... Будем ковырять дальше

 

Страница сгенерирована за 0.064 секунд. Запросов: 23.