Балансировка нагрузки на основе групп пользователей

Балансировка каналов в интернет можно осуществлять несколькими способами: на уровне ресурсов (dst-address) и на уровне пользователей (src-address). Так же бывают статичные и динамические способы балансировки.

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

 

 

 

 

Код

 

/ip firewall mangle add chain=prerouting in-interface=ISP1 src-address-list=!exclude action=add-src-to-address-list address-list="ISP1" address-list-timeout=2m comment="Add_SRC_to_ISP1" disabled=no
/ip firewall mangle add chain=prerouting in-interface=ISP2 src-address-list=!exclude action=add-src-to-address-list address-list="ISP2" address-list-timeout=2m comment="Add_SRC_to_ISP2" disabled=no
/ip firewall mangle add chain=input in-interface=ISP1 src-address-list=!exclude action=add-src-to-address-list address-list="ISP1" address-list-timeout=2m comment="Add_SRC_to_ISP1_PING" disabled=no
/ip firewall mangle add chain=input in-interface=ISP2 src-address-list=!exclude action=add-src-to-address-list address-list="ISP2" address-list-timeout=2m comment="Add_SRC_to_ISP2_PING" disabled=no
/ip firewall mangle add chain=prerouting src-address-list=!exclude dst-address-list=ISP1 action=mark-routing new-routing-mark=route_ISP1 passthrough=no comment="Mark_to_ISP1" disabled=no
/ip firewall mangle add chain=prerouting src-address-list=!exclude dst-address-list=ISP2 action=mark-routing new-routing-mark=route_ISP2 passthrough=no comment="Mark_to_ISP2" disabled=no
/ip firewall mangle add chain=output dst-address-list=ISP1 action=mark-routing new-routing-mark=route_ISP1 passthrough=no comment="Mark_to_ISP1_PING" disabled=no
/ip firewall mangle add chain=output dst-address-list=ISP2 action=mark-routing new-routing-mark=route_ISP2 passthrough=no comment="Mark_to_ISP2_PING" disabled=no

/ip firewall mangle add chain=prerouting src-address-list=MyLAN1 dst-address-list=!exclude action=mark-routing new-routing-mark=route_ISP1 passthrough=no comment="Route_to_ISP1" disabled=no
/ip firewall mangle add chain=prerouting src-address-list=MyLAN2 dst-address-list=!exclude action=mark-routing new-routing-mark=route_ISP2 passthrough=no comment="Route_to_ISP2" disabled=no

/ip route add dst-address=0.0.0.0/0 gateway=GATEWAY1 scope=255 target-scope=10 routing-mark=route_ISP1 comment="Route_to_ISP1" disabled=no
/ip route add dst-address=0.0.0.0/0 gateway=GATEWAY2 scope=255 target-scope=10 routing-mark=route_ISP2 comment="Route_to_ISP2" disabled=no
/ip route add dst-address=0.0.0.0/0 gateway=GATEWAY1 scope=255 target-scope=10 comment="Default_Gateway" disabled=no

 

Разбор кода

 

/ip firewall mangle add chain=prerouting in-interface=ISP1 src-address-list=!exclude action=add-src-to-address-list address-list="ISP1" address-list-timeout=2m comment="Add_SRC_to_ISP1" disabled=no
/ip firewall mangle add chain=prerouting in-interface=ISP2 src-address-list=!exclude action=add-src-to-address-list address-list="ISP2" address-list-timeout=2m comment="Add_SRC_to_ISP2" disabled=no

Этими двумя правилами мы берем из всех входящих в сеть пакетов на интерфейсы ISP1, ISP2 адрес источника и помещаем их в соответствующие списки.

 

/ip firewall mangle add chain=input in-interface=ISP1 src-address-list=!exclude action=add-src-to-address-list address-list="ISP1" address-list-timeout=2m comment="Add_SRC_to_ISP1_PING" disabled=no
/ip firewall mangle add chain=input in-interface=ISP2 src-address-list=!exclude action=add-src-to-address-list address-list="ISP2" address-list-timeout=2m comment="Add_SRC_to_ISP2_PING" disabled=no

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

 

/ip firewall mangle add chain=prerouting src-address-list=!exclude dst-address-list=ISP1 action=mark-routing new-routing-mark=route_ISP1 passthrough=no comment="Mark_to_ISP1" disabled=no
/ip firewall mangle add chain=prerouting src-address-list=!exclude dst-address-list=ISP2 action=mark-routing new-routing-mark=route_ISP2 passthrough=no comment="Mark_to_ISP2" disabled=no
/ip firewall mangle add chain=output dst-address-list=ISP1 action=mark-routing new-routing-mark=route_ISP1 passthrough=no comment="Mark_to_ISP1_PING" disabled=no
/ip firewall mangle add chain=output dst-address-list=ISP2 action=mark-routing new-routing-mark=route_ISP2 passthrough=no comment="Mark_to_ISP2_PING" disabled=no

Данные четыре правила, помечают роутинг, пакеты к адресам из списка ISP1 будут отправлены в интерфейс ISP1, пакеты к адресам из списка ISP2 будут отправлены в интерфейс ISP2

/ip firewall mangle add chain=prerouting src-address-list=MyLAN1 dst-address-list=!exclude action=mark-routing new-routing-mark=route_ISP1 passthrough=no comment="Route_to_ISP1" disabled=no
/ip firewall mangle add chain=prerouting src-address-list=MyLAN2 dst-address-list=!exclude action=mark-routing new-routing-mark=route_ISP2 passthrough=no comment="Route_to_ISP2" disabled=no

Эти два правила будут отправлять запросы во внешнюю сеть согласно спискам, все пользователи из списка MyLAN1 будут работать через интерфейс ISP1, пользователи из списка MyLAN2 будут работать через интерфейс ISP2

 

/ip route add dst-address=0.0.0.0/0 gateway=GATEWAY1 scope=255 target-scope=10 routing-mark=route_ISP1 comment="Route_to_ISP1" disabled=no
/ip route add dst-address=0.0.0.0/0 gateway=GATEWAY2 scope=255 target-scope=10 routing-mark=route_ISP2 comment="Route_to_ISP2" disabled=no
/ip route add dst-address=0.0.0.0/0 gateway=GATEWAY1 scope=255 target-scope=10 comment="Default_Gateway" disabled=no

Последние три правила это маршруты, Gateway1 и Gateway2 следует заменить на свои.

 

Заключение

Далее добавляете списки:
/ip firewall address-list add list="exclude" address=0.0.0.0 #список исключений. Адреса включенные в этот список игнорируются балансировщиком.
/ip firewall address-list add list="MyLAN1" address=0.0.0.0 # Список ip адреса или диапазон пользователей привязанных к ISP1
/ip firewall address-list add list="MyLAN2" address=0.0.0.0 # Список ip адреса или диапазон пользователей привязанных к ISP2

Если рухнет второй фейс, трафик пойдет через первый, а если не рухнет, а просто пропадет инет на нем - все пользователи второй группы останутся без интернета.
Если рухнет первый фейс, то все будут без инета, т.к. без дефолтного маршрута все в жизни плохо.

 

Данный метод безусловно надежен в плане того, что он не рвет трафик, и не влияет на работу сайтов с привязкой по ip. Но статическая балансировка подходит лишь на начальном уровне, для профессионального использования целесообразно применять модуль комплекса Evolution BalancerEvx либо комплекс целиком..

 

При использовании материалов ссылка на автора и источник ОБЯЗАТЕЛЬНЫ!

Автор: Григорьев Дмитрий (Inlarion) (C) 27.06.2013

Теги: Mikrotik, Микротик, балансировка нагрузки, два канала, микротик два провайдера, mikrotik два провайдера, mikrotik балансировка, микротик балансировка




Рейтинг@Mail.ru
Яндекс цитирования

Григорьев Дмитрий Владимирович (Inlarion) 2010-2016 (C) Все права защищены. При копировании материалов с сайта, ссылка на автора и источник обязательны!!!