From: raver <raver@smtp.ru.>
Newsgroups: email
Date: Sun, 25 Dec 2005 17:02:14 +0000 (UTC)
Subject: Скрипт автоматического переключения интернет каналов на Linux сервере
Автоматическое переключение интернет каналов на Linux сервере. Данная
статья написана мною потому, что в интернете я не смог найти решения
проблемы автоматического переключения интернет каналов, если один из них
упадет. В этой статье рассмотрен пример с учетом использования сразу
двух каналов для распределения траффика и по отдельности.
1. Для написания скрипта автоматического переключения использовался так
называемый shell scripting в Linux. В данном примере используется 2
скрипта - первый проверяет почти все, а второй включается если в один
момент упали оба канала и начинает проверять до тех пор пока не
поднимутся оба или хотя бы один. Когда это происходит он передает
управление 1-ому скрипту, а сам завершается.
2. Условные обозначения:
1) rc.prov1 - это Ваш скрипт, в котором описаны сброс таблиц iptables,
iproute2 (в данном случае у меня так) и задание новых правил с учетом
того, что весь траффик пойдет через prov1.
2) rc.prov2 - это Ваш скрипт, в котором описаны сброс таблиц iptables,
iproute2 (в данном случае у меня так) и задание новых правил с учетом
того, что весь траффик пойдет через prov2.
3) rc.routing - это Ваш скрипт, в котором описаны сброс таблиц iptables,
iproute2 (в данном случае у меня так) и задание новых правил с учетом
того, что весь траффик пойдет через prov1 и prov2.
В одной из следующих статей я опишу подробную настройку iptables и
iproute2 для распределения траффика, основываясь на source ip/net
adresses, destination ip/net adresses, destination ports.
4) Команды ping -I eth0 или ping -I eth1 - используются для того, чтобы
в случае падения одного канала (проверка идет посредством пинга шлюза
провайдера, а можно пинговать и следующий hop) система не могла
пингануть по другому интерфейсу если из вне этот шлюз доступен.
5) Скрипт работает посредством простого алгоритма if .... then.... fi и
multilevel if .... then .... elif .... then .... else .... fi и
проверяет есть ли определенные флажки (в данном случае обычные пустые
файлы идентификаторы, которые создаются в директории /var/lock)
6) Файлы идентификаторы: prov1_up.id, prov2_up.id, prov1_down.id,
prov2_down.id, prov1_nowup.id, prov2_nowup.id, prov1_checking.id,
prov2_checking.id - они создаются и удаляются скриптом.
7) Механизм захвата информации - упал шлюз или поднялся очень простой :