Поставить закладку   сделать стартовой   Написать нам

	Скрипт автоматического переключения интернет каналов
на 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) Механизм захвата информации - упал шлюз или поднялся очень простой : 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 , хотя Вы можете поменять путь в скриптах. Вообщем-то все просто - далее ссылка на сам скрипт ;) http://scripts.o5o5.ru/hotchannel.tar




HitUA.net
© Copyright 2005 SysAdmin