Mikrotik 951G-2HnD. Балансировка нагрузки.

Сегодня мы с вами попробуем поговорить о настройке Load Balancing (балансировки нагрузки) в Mikrotik. Как вы уже знаете по предыдущим постам у меня есть "подопытный" Mikrotik 951G-2HnD, который я и "кручу" в разных конфигурациях. Сегодня мне привалило счастье в виде второго канала в 100 Mbit от Билайн за 1 руб. в месяц (для тех кто не в курсе новая линейка мобильных тарифов "Всё" в некоторых регионах подразумевает подключение домашнего интернета и ТВ за 1 руб., т.е. к примеру, если вы или кто-либо из ваших родственников, как было в моем случае, пользуется тарифом "Всё за 800", то доплатив всего-лишь 1 руб. к "телефонному тарифу" вы получаете "бесплатный интернет" и ТВ) ... глупо было не воспользоваться подобным предложением - т.к. второй высокоскоростной канал в интернет за 1 руб. вещь достаточно полезная. Ну например, можно легко настроить failover, т.е. вариант, когда основной канал в интернет по каким-либо причинам недоступен, а весь траффик идет по второму каналу, или же, load balancing (балансировку нагрузки), когда вы сами выбираете что и через какой канал у вас идет. Таким образом мы имеем двух провайдеров - Ростелеком, который предоставляет доступ в интернет через PPPoE и Билайн, который использует L2TP соответственно.

Прежде чем я буду рассказывать о том что у меня получилось и как - приведу несколько полезных ссылок, которые помогли мне в процессе экпериментов:

Для меня был интересен вариант настройки Load Balancing, в котором пропускная способность обоих каналов суммировалась бы при использовании торрент-клиента. Т.е. говоря проще, я решил сделать "торрентокачалку" на 200 Mbit ;) Зачем? Это скорее риторический вопрос, раз есть резервный канал в интернет на 100 Mbit - неплохо было бы использовать его мощность на 100%. Получилось у меня примерно следующее:



Как видно из скриншотов - суммарная скорость при скачивании популярных раздач на торренте оказалась около 14.2 Mb/sec, т.е. 137,8 Mbit (показаны мгновенные значения скоростей). При этом весь входящий трафик автоматически "поделился" между Билайн (bee-internet) и Ростелеком (dml-internet) в соотношении ~70.5 Mbps и 67.3 Mbps. При этом загрузка CPU у Mikrotik'а составила ~100% :( Именно по этой причине не удалось выжать из приведенной конфигурации больше 140 Mbit. Здесь также следует учитывать и множество других факторов, например, то что оба провайдера предоставляют подключение на скорости до 100 Mbit, т.е. никто не гарантирует "честную сотню", исходящую скорость источников трафика и т.п. 

Как оказалось впоследствии, причиной такой нагрузки на CPU были вовсе не правила PCC, а нагрузка из-за L2TP туннеля. Т.е. если оставить одно подключение к Билайну через L2TP и загрузить канал на 100% - то загрузка CPU также возрастает до 100%. Буквально перед тем как написать эти строки я наткнулся на информацию об обновлении Mikrotik 6.35 (2016-Apr-14 12:55), в котором одним из нововведений отмечался fastpath для l2tp туннелей: "implemented l2tp and lns fastpath/fasttrack support", однако, протестировать эту возможность я пока не успел. Итак, получившаяся у меня конфигурация (здесь я буду рассматривать только те правила, которые касаются непосредственно PCC, рассматривать как поднимать соединение с L2TP и PPPoE мы не будем):

# настройка правил PCC в Firewall'е /ip firewall mangle # помечаем пришедшие соединения согласно интерфейсу add action=mark-connection chain=prerouting connection-mark=no-mark in-interface=dml-internet new-connection-mark=conn_Rostelecom add action=mark-connection chain=prerouting connection-mark=no-mark in-interface=bee-internet new-connection-mark=conn_Beeline # помечаем соедиенния на 80,443,110,25 TCP порты, как относящиеся к Билайну (т.е. веб-серфинг и почта только через Билайн) add action=mark-connection chain=prerouting connection-mark=no-mark dst-address-type=!local dst-port=80,443,110,25 in-interface=bridge new-connection-mark=conn_Beeline protocol=tcp # непосредственно PCC add action=mark-connection chain=prerouting connection-mark=no-mark dst-address-type=!local in-interface=bridge new-connection-mark=conn_Rostelecom per-connection-classifier=both-addresses:2/0 add action=mark-connection chain=prerouting connection-mark=no-mark dst-address-type=!local in-interface=bridge new-connection-mark=conn_Beeline per-connection-classifier=both-addresses:2/1 # назначаем routing mark согласно меткам соединений add action=mark-routing chain=prerouting connection-mark=conn_Rostelecom in-interface=bridge new-routing-mark=rout_Rostelecom add action=mark-routing chain=prerouting connection-mark=conn_Beeline in-interface=bridge new-routing-mark=rout_Beeline # таблица маршрутизации /ip route add distance=1 gateway=bee-internet routing-mark=rout_Beeline add distance=1 gateway=dml-internet routing-mark=rout_Rostelecom add distance=1 gateway=dml-internet,bee-internet routing-mark=rout_Mixed # обязательно должен быть маршрут по-умолчанию без меток, в данном случае ECMP add distance=1 gateway=dml-internet,bee-internet

При этом оба соединения и L2TP (bee-internet), и PPPoE (dml-internet) у меня созданы с галкой Add default route и Default Route Distance 3, т.е. в итоге таблица маршрутизации у меня выглядит следующим образом при двух поднятых соединениях:


Flags: X - disabled, A - active, D - dynamic, C - connect, S - static, r - rip, b - bgp, o - ospf, m - mme, B - blackhole, U - unreachable, P - prohibit

Т.е. автоматически добавленные маршруты по-умолчанию и для того, и для другого соединения у нас имеют Distance - 3, и за счет того что мы прописали свой маршрут по-умолчанию на для немаркированных пакетов на основе ECMP с Distance - 1 - они неактивны. Как видно, в таблице маршрутов напротив автоматически созданных маршрутов стоят флаги DS и не стоит A.

Таким образом мы получаем следующее, соединения которые у нас промаркированы как conn_Rostelecom получают метку маршрута rout_Rostelecom и уходят через соединение dml-internet, а соединения промаркированные как conn_Beeline получают метку маршрута rout_Beeline и уходят через интерфейс bee-internet. Соединения не имеющие метки не получают никакую метку маршрута и уходят согласно активному маршруту по-умолчанию без меток.

Продолжение следует ... 
Share This :



sentiment_satisfied Emoticon