Балансировка и резервирование трафика во FreeBSD

Автор Itworkroom

Внедрение системы резервирования и балансировки нагрузки канала интернет предназначено для:

— резервирование канала интернет
— расширения пропускной способности канала интернет
— балансировка нагрузки между каналами интернет

Установить систему FreeBsd и обновить порты, произвести первоначальную настройку системы.

Создать две отдельные таблицы маршрутизации для каждого провайдера (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

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

Логика работы:

1. Отправляем icmp пакеты на шлюзы провайдеров.

2. Анализируем ответ и делаем вывод о доступности сети.

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

4. Выполняем установку маршрута по умолчанию

Листинг конфигурационного файла: /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
***************************************************************************************

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *