+7(495) 669-33-08

Пн.-Пт. 10:00-17:00

Skype Me™!

e-mail: info@sipring.ru



    Тест VOIP

(concurrent calls)

>>>
>>
30
10
5
3
1

 

 Введите код

 


Подробнее >>>

   Поделись ссылкой

Балансировка и резервирование каналов Печать

При желании можно решить почти любую задачу, в том числе резервирование каналов в интернет. Сложнее сделать выбор применяемой технологии. Реализация IP в любой операционной системе не идет ни в какое сравнение с реализацией этого протокола в Linux. Рассмотрим  пакет iproute2, используемый в Linux, обеспечивающий возможность указывать несколько шлюзов по умолчанию с разными метриками, и решающий многие проблемы эффективного использования нескольких внешних каналов гораздо элегантнее.

Справедливости ради надо отметить, что данное решение можно реализовать и другими средствами( ipfw на FreeBSD,и sla и др. в cisco) , но вот так - одной командой, только на Linux. К стати, просто "гордость берет" за державу и нашего соотечественника Алексея Кузнецова - создавшего данный пакет. Но буду краток, схема:

 

Создаем две отдельные таблицы маршрутизации для каждого провайдера (isp1,isp2 названия таблиц маршрутизации - произвольно но лучше должны нести смысловую нагрузку - например название провайдера).

  • echo 200 isp1 >> /etc/iproute2/rt_tables
  • echo 201 isp2 >> /etc/iproute2/rt_tables

Определим политику маршрутизации (RPDB - Routing Policy DataBase, база данных политик маршрутизации, управляющая алгоритмом выбора маршрута) для пакетов пришедших с данного интерфейса( $ip1,$ip2  соответственно ip адреса интерфейсов каждого провайдера):

  • ip ru add from $ip1 table isp1
  • ip ru add from $ip2 table isp2

И настроим маршрутизацию по умолчанию( $ip1-gw,$ip2-gw  соответственно ip адреса шлюзов каждого провайдера):

  • ip route add default via $ip1-gw table isp1
  • ip route add default via $ip2-gw table isp2
С этого момента мы получаем возможность распределять пакеты по любому признаку (http, www,ftp или промаркировав по своему усмотрению с помощью iptables), и по любому направлению.Но в данной статье, главная цель - балансировка нагрузки! Легким движением руки "брюки превращаются в шорты":
  • ip route add default scope global equalize nexthop via $ip1-gw dev eth-isp1 weight 3 nexthop via $ip2-gw dev eth-isp2 weight 2
При этом загрузка каналов соответственно составит 3:2. Меняем параметр - weight так, как требуется( или по пропускной способности, или по стоимости...). И наконец немного творческой работы - организация резервирования.Создадим исполняемый файл /home/balanc. И задачу на выполнение с интервалом 5 минут.
  • crontab -e
  • 0-59/5 * * * *  /home/balanc 2 > /dev/null

Для того что бы отслеживать состояние каналов, будем производить определение доступности шлюзов провайдеров (поскольку самым узким местом, все же является "последняя миля", хотя можно отслеживать состояние и по хостам находящимся в сети). Логика работы заключается в следующем:

  • отправляем icmp пакеты на шлюзы провайдеров
  • анализируем ответ и делаем вывод о доступности сети
  • сравниваем предыдущее состояние каналов записанное в файл  /home/balconf ( для того, что бы лишний раз не "дергать" маршрутизацию)
  • выполняем установку маршрута по умолчанию

cat  /home/balanc

***************************************************************************************************************

#!/bin/sh

let  "isp1 =`/bin/ping $ip1-gw -c 1 | /bin/grep received | /bin/awk {' print $4'}`" 2 > /dev/null

let  "isp2 =`/bin/ping $ip2-gw -c 1 | /bin/grep received | /bin/awk {' print $4'}`" 2 > /dev/null

let "bal = $isp1 + $isp2"

if [ $bal -eq 2 ]

then

let "balold =`cat /home/balconf`"

if [ $bal -ne $balold ]

then

/sbin/route delete default

/sbin/ip route add default scope global equalize nexthop via $ip1-gw dev eth-isp1 weight 3 nexthop via $ip2-gw dev eth-isp2 weight 2

fi

else

if [ $isp1 -eq 1 ]

then

/sbin/route delete default

/sbin/route add default gw $ip1-gw

else

/sbin/route delete default

/sbin/route add default gw $ip2-gw

fi

fi

echo $bal > /home/balconf

*******************************************************************************************************************