sasha2002 Blog's

Just another blog from admin's

Скрипт автоматического переключения интернет каналов на Linux сервере (linux interface) —

Автоматическое переключение интернет каналов на 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) Механизм захвата информации – упал шлюз или поднялся очень простой :

ping -I eth0 -c5 -W2 $GW1 | grep "100% packet loss", где GW1="1.1.1.1"
ping -I eth0 -c5 -W2 $GW1 | grep "64 bytes from", где GW1="1.1.1.1"
ping -I eth1 -c5 -W2 $GW2 | grep "100% packet loss", где GW2="2.2.2.2"
ping -I eth1 -c5 -W2 $GW2 | grep "64 bytes from", где GW2="2.2.2.2"

Внимание: Не используйте grep "0% packet loss" – так как grep схватит
это и при 100% packet loss.

8) Все скрипты по умолчанию должны лежать в /etc/rc.d , хотя Вы можете
поменять путь в скриптах.

Вообщем-то все просто – далее ссылка на сам скрипт ;)
hotchannel


Categorised as: Linux

Comments are disabled on this post


Comments are closed.