вторник, 19 апреля 2016 г.

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. Соединения не имеющие метки не получают никакую метку маршрута и уходят согласно активному маршруту по-умолчанию без меток.

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

2 комментария :

  1. Да, интересный обзор, стоит его держать в архиве, когда нибудь точно пригодится, в офисах часто хотят дублирование, но главный вопрос постален в начале, зачем все это нужно...? В смысле дома... Запасной канал, конечно, имеет определенную практическую ценность (иногшда падает пров, иногда тупо нужен другой "нормальный" IP) и за рубль и я бы себе купил.
    Но скорости в 70МБит имхо сегодня хватает за глаза.
    У меня стоит 50. Можно доплатить, по-моему, 100р и будет 100, но мне даже это не нужно, а на 100р я куплю лишнюю шаурму или костей собаке. :) Можно платить на 100р меньше и будет 30, чего тоде точно зватит, но там "благоразумно" заблокирована локалка, в которой прост таки нет повсеместной ныне ц-ры (так что, дело не в том, что из локалки, де, быстрее). А вот роутер Билайн мучать будет и не просто мучать, а прямо таки, истязать, так что стоит поклеить радиаторы если их еще нет (на микротике должны быть).

    Но, повторюсь, сама идея, чисто технически, весьма интересная и не тривиальная в реализации.

    L2TP это бич московских (и не только) юзеров. Под него нужно покупать самые мощные бытовые роутеры, иначе дело кончится не только падением скорости ниже заявленной (20МБит вместо 100, например), а куда хуже. постоянные зависания роутера, отвал канала, самые разнообразные глюки. Да, криптостойкое шифрование в наши дни, казалось бы, никак не помешает, но вот только в плане врезки в чужие сети мало что поменялось с дедовских времен. Службам это не нужно - они зад о стула лишний раз не оторвут, а тут куда проще - могут, и снимают весь трафик уже после его расшифровки у опсоса, зачем ходить кабели резать? А "частные детективы" - шанс с ними пересечься сегодня врядли выше чем 20 лет назадю. Если их поймают - "посОдЮт", все это знают, соотв без крайней нужды резать ваш кабель никто не станет (разве что тупые дети), а если есть крайняя нужда - легче договориться с ментами. Кроме того, врезка в кабель не поможет расшифровать SSL и иной шифрованный IP трафик, коего ныне в России по статистике ок 81%, а посему PPPoE, не создающий никаких технических проблем и работающий как часы в 99% случаев, куда предпочтительнее PPTP/L2TP, особенно последнего, способного "занять полезной работой" неслабый, хоть и одноядерный AR9344-600MHz установленный в этом, уже несколько устаревшем Микротике. Что уж говорить про "более скромные" процы в бюджетных роутерах стоимость в 5 раз меньше. Кстати, параметры проца (как и размеры RAM/ROM), внезапно, не являются "существенной" характеристикой роутеров, наверное, еще с момента появления первых таких устройств на рынке, а посему, производители скромно о них умалчивают (ВСЕГДА, а Микротик, официально, НЕ бытовой роутер :)), чем вводят "рядового потребителя" в "легкий ступор", когда одинаковые, казалось бы по характиристикам роутеры, имеют разницу в цене в 2-3 раза.

    Но, в Билайне-то, как всегда, лучше знают как надо обезопасить своих дорогих клиентов от злобных хацкеров (сдав их, правда, с потрохами службам в "автоматическом режиме" :)). "Многотысячные стоны" на форумах и разрывающиеся линии телефонной поддержки не в силах остановить внедрение научно-технического прогресса в квартиры рядовых граждан. Хоть бы написали большими буквами, что без мощного роутера (перечисление моделей...) наш чудный иинтернет работать у вас не будет, просим, как говорится, извинения за доставленные неудобства... (На Микротике то будет работать и неплохо, пока кондеры в БП не высохнут от "вечной жары" :))

    Что касается самого Микротика. Чудные они делают девайсы, глаз радуется... И мощность можно внезапно установить не то что в пределах Reg Domain, а даже "несколько выше"...

    ОтветитьУдалить
  2. (Даже мощность по Reg Domain ныне недоступна пользователям копроизделий, иначе девайсы "помощнее" до 17dBm и, тем более, "мощные" девайсы с "колоссальными" 19dBm, при разрешенных 20 :), никто не купит. И "метровые" антенны ставить бесполезно, 802.11d позаботится о "ваших соседях" и приведет все старому "знаменателю".)

    Но вот незадача, данная организация напрочь игнорирует требования Open Source лицензий, невозбранно используя "тонны" бесплатного кода "в своих корыстных целях" и нагло игнорируя все установленные разумные правила поведения в сообществе. Наглость их просто таки не имеет границ. На разумное требование выложить таки исходники, и не те, "какие хочется" а ВСЕ, так чтобы можно было бы получить полный набор и скомпилировать бинарную прошивку (как это подразумевает лицензия, поск Линукс явно является основной частью данного продукта, не говоря уж о куче иных "довесков"), переделать все так, как хочется мне или еще кому-то в полном соотвествии с лицензией, данная организация предпочла не публиковать ВООБЩЕ НИЧЕГО.

    В какой-то из лицензий нашлась чудесная отговорка о том, что исходники можно высылать обычной почтой, например, на CD, и брать за это reasonable fee для покрытия почтовых расходов. Расходы на почту в прибалтике, воистину, всех впечатлили... За 50 долл, думается, можно послать письмо в Антарктиду, на станцию Восток, с доставкой в период следующей навигации. но даже такие, прямо скажем, нескромные почтовые издержки не смутили некоторых "поборников" соблюдения Open Source лицензий, и они, таки, перевели означенную сумму в Микротик, в надежде заполучить, наконец, заветные "секретные коды". Но не тут то было. В Микротике "специалисты" не лыком шиты, поэтому прислали людям какой-то несвязный набор исходников, которые можно скачать, условно говоря, на любом Linux Mirror. Я, конечно, понимаю, что есть непреодолимое желание не делиться с китайкими конкурентами результатами своего непосильного труда, но это желание, внезапно, противоречит моему _законному_ праву залить "этот самый" Линукс а довеском-примочкой, гордо называемым RouterOS, в свой старенький DIR-825, шмеющий почти точ такой же хардвер (речь о соседней модели микротика на AR7161) вместо того, чтобы платить за такую же железку еще 200долл. Ну, прям таки, не дают мне "сэкономить деньги своим собственным умом" (кто не понял это ироничная апелляция к "Что? Гдк когда?").

    Ну ладно я, может быть "халявщик", как некоторые подумают, но кроме меня есть тысячи других программистов, отдавших сотни и тысячи часов своего времени на написание Линукса и кучи библиотек, невозранно использованных Микротиком в качестве основы для чуть более чем 95% кода RouterOS...?
    Как быть с их разумным правом (оговоренным в лицензии) и желанием получить братское подспорье в своей работе от своих прибалтийских братьев, ныне живущих в "свободной стране" по всем правилам "чести и совести"?

    Для справки, даже такие "монстры", как D-Link или Asus были вынуждены опубликовать все исходники прошивок своих роутеров, и давно уже нет с этим никаких проблем. Публикуют они неохотно и, обычно, с некоторым опозданием (т.е. лежат неск устаревшие версии), но это никому особо не мешает и, соотв, всегда полно прошщивок на базе DD-Wrt/OpenWRT/etc.

    Хотите держать исходники закрытыми и "обезопасить" себя от китайских конкурентов, пишите "Линукс" с нуля и торгуйте сколько влезет.

    Декер вот кабы ты RouterOS выломал из Микторика - то польза была бы и справедливость восторжествовала. :)
    Шутка, конечно...

    ОтветитьУдалить