Mikrotik 2wan и Заметки компьютерщика

Mikrotik 2wan и Заметки компьютерщика Хостинг

Работу нескольких провайдеров на MikroTik можно организовать несколькими способами, но я предпочитаю их комбинировать от ситуации для разных типов каналов.

Легенда

  • Провайдер 1 дает по IPoE статику
  • Провайдер 2 дает по PPPoE статику (динамический шлюз)
  • Провайдер 3 дает по 4G (динамика)

Нужно сделать автоматическое переключение с провайдера 1 на провайдера 2 и в крайнем случае на провайдера 3, назовем это все MultiWAN, для двух операторов DualWAN.

Настройка шлюза

IP адрес 1.1.1.2/30 c шлюзом 1.1.1.2

Провайдер 2

IP адрес 2.2.2.2/32 но с рандомным шлюзом, который можно «прибить» на постоянный обратившись к статье:

Тем самым у провайдера 2 получаем шлюз 127.0.1.1

Провайдер 3

IP адрес динамический, но если используется USB модем с прошивкой HiLink, то он выполняет роль NAT и IP адрес с шлюзом используется от модема и известен заранее.Но это не профессиональный подход 🙂

USB модем с безлимитной SIM картой и белым IP можно купить у моего товарища https://4g-inter.net

Для подключения к LTE оператору будет использована антенна MikroTik в режиме проброса IP адреса.

Получаем шлюз 10.177.0.3

Адреса шлюзов известны, этого уже достаточно для первоначальной настройки маршрутов.

Интерфейс-листы WAN

Чтобы было проще настраивать NAT, Firewall и Mangle и был один стиль названий WAN интерфейсов:

  • ether1-WAN1 будет WAN1
  • PPPoE_WAN2 будет WAN2
  • vlan101-LTE-Internet будет WAN3

/interface list
add name=WAN1
add name=WAN2
add name=WAN3
add include=WAN1,WAN2,WAN3 name=WAN-ALL
/interface list member
add interface=ether1-WAN1 list=WAN1
add interface=PPPoE_WAN2 list=WAN2
add interface=vlan101-LTE-Internet list=WAN3

Маркировка входящего трафика

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

/ip firewall mangle
add action=mark-connection chain=prerouting comment=»Mark Connection WAN1″ connection-mark=no-mark in-interface-list=WAN1 new-connection-mark=con-WAN1 passthrough=yes
add action=mark-connection chain=prerouting comment=»Mark Connection WAN2″ connection-mark=no-mark in-interface-list=WAN2 new-connection-mark=con-WAN2 passthrough=yes
add action=mark-connection chain=prerouting comment=»Mark Connection WAN3″ connection-mark=no-mark in-interface-list=WAN3 new-connection-mark=con-WAN3 passthrough=yes
add action=mark-routing chain=prerouting comment=»Mark Routing !WAN» connection-mark=con-WAN1 in-interface-list=!WAN-ALL new-routing-mark=WAN1 passthrough=yes
add action=mark-routing chain=prerouting comment=»Mark Routing !WAN» connection-mark=con-WAN2 in-interface-list=!WAN-ALL new-routing-mark=WAN2 passthrough=yes
add action=mark-routing chain=prerouting comment=»Mark Routing !WAN» connection-mark=con-WAN3 in-interface-list=!WAN-ALL new-routing-mark=WAN3 passthrough=yes
add action=mark-routing chain=output comment=»Mark Roution Out WAN1″ connection-mark=con-WAN1 new-routing-mark=WAN1 passthrough=yes
add action=mark-routing chain=output comment=»Mark Roution Out WAN2″ connection-mark=con-WAN2 new-routing-mark=WAN2 passthrough=yes
add action=mark-routing chain=output comment=»Mark Roution Out WAN3″ connection-mark=con-WAN3 new-routing-mark=WAN3 passthrough=yes

Настройка рекурсивных маршрутов

Рекурсивная маршрутизация позволяет проверить наличие интернета за шлюзом через Check Gateway, но включаться он будет через NetwatchПроверять будет за счет серверов Яндекс.DNS:

  • 77.88.8.1 для WAN1
  • 77.88.8.2 для WAN2
  • 77.88.8.3 для WAN3

/ip route
add comment=WAN1_!_Recursive distance=1 gateway=77.88.8.1 routing-mark=WAN1
add comment=WAN2_!_Recursive distance=1 gateway=77.88.8.2 routing-mark=WAN2
add comment=WAN3_!_Recursive distance=1 gateway=77.88.8.3 routing-mark=WAN3
add comment=WAN1_Recursive distance=10 gateway=77.88.8.1
add comment=WAN2_Recursive distance=20 gateway=77.88.8.2
add comment=WAN3_Recursive distance=30 gateway=77.88.8.3
add comment=WAN1 distance=1 dst-address=77.88.8.1/32 gateway=1.1.1.1 scope=10
add comment=WAN2 distance=1 dst-address=77.88.8.2/32 gateway=127.0.1.1 scope=10
add comment=WAN3 distance=1 dst-address=77.88.8.3/32 gateway=10.177.0.3 scope=10

Добавим правила маршрутизации:

  • 8.8.8.8 для WAN1
  • 8.8.4.4 для WAN2
  • 4.2.2.1 для WAN3

/ip route rule
add comment=Route_Only_WAN1 src-address=1.1.1.2/32 table=WAN1
add dst-address=8.8.8.8/32 table=WAN1
add routing-mark=WAN1 table=WAN1
add comment=Route_Only_WAN2 src-address=2.2.2.2/32 table=WAN2
add dst-address=8.8.4.4/32 table=WAN2
add routing-mark=WAN2 table=WAN2
add comment=Route_Only_WAN3 dst-address=4.2.2.1/32 table=WAN3
add routing-mark=WAN3 table=WAN3

Чтобы трафик до «проверочных» узлов не убегал через другого провайдера, в Firewall добавим адрес листы:

/ip firewall address-list
add address=8.8.8.8 list=Only_WAN1
add address=8.8.4.4 list=Only_WAN2
add address=4.2.2.1 list=Only_WAN3

И настроим запрет пересылки, кроме разрешенного интерфейса:

/ip firewall filter
add action=drop chain=output comment=»Only WAN1″ dst-address-list=Only_WAN1 out-interface-list=!WAN1
add action=drop chain=output comment=»Only WAN2″ dst-address-list=Only_WAN2 out-interface-list=!WAN2
add action=drop chain=output comment=»Only WAN3″ dst-address-list=Only_WAN3 out-interface-list=!WAN3

Я использую данный способ как счетчик и защита от зависших соединений. В отличии от жесткой привязки к маршруту через lookup only table, этот способ никогда не «залипал».

Проверка наличия Интернета

Каждые 60 секунд отрабатывает Netwatch, который проверяет отклик серверов проверки. Если нет отклика, скрипт находит маршрут по комментарию и включает опцию Check Gateway, которая через 2 проверки с интервалом 10 секунд считает канал «упавшим» и отключает маршрут.

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

Используется в большинстве корпоративных установок.

Способ 2 — Умный анализ

В связке с 1 способом будем проверять доступность нескольких популярных сервисов с каждого провайдера и сравнивать результат.

1 и 2 способ в связке потому, что скрипт умного анализа читает IP адрес с интерфейса, а если он еще не поднялся или еще не имеет IP, то скрипт не отрабатывает. На этот случай страхует 1 способ проверки.

Нужно добавить дополнительные скрипты «ручного» переключения WAN:

В скрипте задаются названия интерфейсов, с которых берется IP адрес и с которых производится проверка. Параметр Interval в ms используется для оценки качества канала. Если за 100ms канал WAN1 не получил более 1 отклика, то он считается «битым» и сравнивается количество откликов у канала WAN2.WAN3 всегда читается рабочим, если его не забракует 1 способ проверки.

Не нужно бездумно копировать скрипт умного анализа.

Для его использования необходимо оценить работу всех каналов, скорости отклика и частоты падения. Только после этого «умный» скрипт подгоняется под конкретную установку.

Балансировка нагрузки на WAN-линках встает довольно часто и у многих, и в отличие от других вещей, которые можно настроить на оборудовании MikroTik быстро и безболезненно – в случае настройки Load Balancing придется постараться. Тема относительно сложная, наличие нескольких WAN-линков и задача по настройке балансировки нагрузки включает в себя настройку нескольких шлюзов и маршрутов по умолчанию, множество правил трансляции NAT и так далее.

Mikrotik 2wan и Заметки компьютерщика

НАСТРОЙКА МАРШРУТИЗАТОРА

Итак, в наличие у нас имеется один маршрутизатор MikroTik 951Ui-2HnD, который подключен к двум провайдерам через антенны, на портах ether1 и ether2 соответственно, и локальной сетью. Трафик из локальной сети будет NATиться из обоих WAN портов и будет сбалансирован по нагрузке.

/ip address
add address=192.0.2.2/

Настраиваем шлюзы по умолчанию:

/ip route
add dst-address=0.0.0.0/

Настраиваем NAT на WAN портах для исходящего направления:

ip firewall nat
add action

Если оставить только этот пример настройки, то если один из линков “отвалится”, то вместо него будет использоваться второй. Однако, никакой балансировки нагрузки здесь нет.

ИСХОДЯЩАЯ И ВХОДЯЩАЯ MANGLE МАРКИРОВКА

Одной из типичных проблем при использовании более одного WAN-соединения является то, что пакеты принятые на одном WAN интерфейсе, могут тут же быть отправлены через другой WAN-интерфейс, что может, к примеру, сломать VPN-based сеть. Нам нужно чтобы пакеты “принадлежащие” одному и тому же соединению принимались и отправлялись через один и тот же WAN порт. В случае аварии у одного из провайдеров, все подключения на порту “умрут” и затем будут переподключены на другом WAN порту. Для этого необходимо промаркировать соединения:

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

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

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

МАРКИРОВКА LAN МАРШРУТА

Понадобится также настроить несколько Mangle правил – они необходимы, чтобы сообщить роутеру о необходимости балансировки пакетов, которые отправляются из локальной сети. Сам механизм балансировки в этой статье не описывается, можно только сказать что происходить много операций хеширования – если же интересно копнуть глубже, то вы можете обратиться к официальной документации MikroTik. В соответствии с этими правилами маршрутизатор будет балансировать трафик приходящий на bridge-local, который направлен на любой нелокальный адрес в Интернете. Мы захватываем трафик в цепочке предварительной маршрутизации для перенаправления его на необходимый нам WAN-порт в соответствии с меткой маршрутизации.

Следующие команды балансируют трафик на LAN-интерфейсе через две группы:

dst both dst both

Настройка меток маршрутизации выше была выполнена точно такие же как и в предыдущем шаге и соответствуют тем маршрутам, которые будут созданы в следующем шаге.

ОСОБЫЕ МАРШРУТЫ ПО УМОЛЧАНИЮ.

В данный момент у нас должны быть помечены соединения поступающие на WAN-порты и эти метки были использованы для создания меток маршрутизации. Балансировка нагрузки в LAN, описанная в предыдущем шаге, также создает метки маршрутизации в соответствии со следующим шагом, в котором будут созданы маршруты по умолчанию, которые будут захватывать трафик с данными метками маршрутизации.

ip route
add distance

Данные маршруты используются только при наличии необходимой метки маршрутизации. Непомеченные пакеты используют обычный маршрут по умолчанию.

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

Читайте также:  ЦОД (Центр обработки данных) Беларуси | Дата центр | Республиканская облачная платформа РЦОД в Минске | Облачный центр хранения данных - beCloud

Итого, теперь у нас настроена балансировка трафика для двух WAN-соединений.

Mikrotik 2wan и Заметки компьютерщика

Как мы уже говорили, сегодня очень многие рабочие процессы прямо зависят от наличия доступа в интернет, поэтому несколько каналов доступа — это не прихоть и не роскошь, а насущная необходимость. Одной из первых задач, которые решаются несколькими каналами, является отказоустойчивость, но потом возникают иные вопросы, а именно полноценное использование двух каналов, ведь это совсем не дело если оплаченный резервный канал простаивает. Поэтому в данной статье мы разберем методы балансировки каналов на оборудовании Mikrotik и рассмотрим связанные с этим проблемы и способы их решения.

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.

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

Тема балансировки тесно связана с маршрутизацией и маркировкой трафика, достаточно сложными для начинающих, поэтому мы советуем внимательно читать и пытаться понять прочитанное, бездумно повторить инструкции в данном случае скорее всего не получится. Также из-за сложности информации часть настроек мы будем давать исключительно в виде консольных команд, особенно выполняющих повторяющиеся и второстепенные задачи. Будем считать, что вы знаете, как выполнить аналогичные действия в WinBox.

Данная статья предназначена для RouterOS 6.x

Во всех примерах ниже будет рассматриваться следующая схема, ее же мы использовали в предыдущей статье цикла. Но здесь во внутренней сети у нас появился дополнительный узел — условный веб-сервер, который должен быть доступен сразу на обоих внешних адресах.

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

Общие вопросы, проблемы и решения

Начнем с соединений, все пакеты установленного соединения должны проходить через один и тот же канал. Это аксиома. Поэтому балансировка должна выполняться не на уровне пакетов, а на уровне соединений. А так как соединения бывают разные и трафик по ним передается разный, то даже равномерно сбалансировав каналы по соединениям вы не получите равномерной балансировки по нагрузке. Это сразу следует понимать.

Для того, чтобы этого избежать следует привязать балансировку к еще одному параметру — адресу источника и направлять все соединения одного узла в текущий промежуток времени через один и тот-же канал.

Следующая сложность — проброс портов. Мы всегда должны отправлять ответ на тот интерфейс, с которого пришел запрос, а, следовательно должны исключить такие соединения из балансировки. Это решается дополнительной маркировкой и всегда должно делаться в первую очередь.

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

Предварительная настройка роутера

Прежде всего вам потребуется отключить динамическое добавление маршрутов, которое используется при создании коммутируемых подключений, например, PPPoE или DHCP:

Mikrotik 2wan и Заметки компьютерщика

Важно! Во время выполнения операций с настройкой маршрутов у вас кратковременно пропадет доступ в интернет. Поэтому все указанные действия следует выполнять имея физический доступ к устройству.

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

Затем создайте второе правило маскарадинга или SNAT в разделе IP — Firewall — NAT для выхода в интернет через второй интерфейс, а также продублируйте для него все правила проброса портов.

Примерно это будет выглядеть так для маскарадинга, где 192.168.111.0/24 — диапазон внутренней сети:

/ip firewall natadd action=masquerade chain=srcnat out-interface=ether1 src-address=192.168.111.0/24add action=masquerade chain=srcnat out-interface=ether3 src-address=192.168.111.0/24

И так для проброса портов, в данном случае 192.168.111.152 внутренний адрес условного веб-сервера:

/ip firewall natadd action=dst-nat chain=dstnat dst-address=192.168.3.107 dst-port=80 in-interface=ether1 protocol=tcp to-addresses=192.168.111.152 to-ports=80add action=dst-nat chain=dstnat dst-address=192.168.233.182 dst-port=80 in-interface=ether3 protocol=tcp to-addresses=192.168.111.152 to-ports=80

Отличия в правилах мы выделили, как видно правила маскарадинга отличаются только интерфейсом выхода, а правила проброса портов — адресом назначения пакетов, в качестве которых используются внешние адреса роутера. В Winbox можете просто скопировать текущее правила и изменить в них указанные критерии.

Таблицы маршрутизации

Все указанные ниже действия мы будем делать в IP — Routes, перейдем туда и сначала заполним основную (main) таблицу маршрутизации, которая будет использоваться по умолчанию, если никакая иная таблица не указана. Добавим маршрут к первому провайдеру: Dst. Address — оставляем по умолчанию — 0.0.0.0/0, Gateway — указываем шлюз первого провайдера, в нашем случае 192.168.3.1 и устанавливаем административную дистанцию маршрута — Distance — 1.

В терминале это сделать еще проще:

/ip routeadd distance=1 gateway=192.168.3.1

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

Затем создадим таблицы маршрутизации для каждого из провайдеров. Это делается точно также, как и для основной, но с обязательным указанием имени таблицы в поле Routing Mark, мы не будем придумывать ничего сложного и просто назовем наши таблицы ISP1 и ISP2. В качестве шлюзов — Gateway — указываем шлюзы соответствующих провайдеров.

Либо выполните в терминале:

/ip routeadd check-gateway=ping distance=1 gateway=192.168.3.1 routing-mark=ISP1add check-gateway=ping distance=1 gateway=192.168.233.2 routing-mark=ISP2

В результате мы имеем теперь три таблицы маршрутизации: основную — через нее будут работать все соединения по умолчанию, и две дополнительных, куда мы будем направлять маркированный трафик.

А как с отказоустойчивостью? А ее настраиваем любым желательным способом отдельно для каждой таблицы маршрутизации. Для этого можете воспользоваться нашей статьей:

Mikrotik и несколько провайдеров. Резервирование каналов

Например, самый простейший способ на основе дистанции маршрутов будет выглядеть так:

/ip routeadd check-gateway=ping distance=1 gateway=192.168.3.1add check-gateway=ping distance=2 gateway=192.168.233.2add check-gateway=ping distance=1 gateway=192.168.3.1 routing-mark=ISP1add check-gateway=ping distance=2 gateway=192.168.233.2 routing-mark=ISP1add check-gateway=ping distance=1 gateway=192.168.233.2 routing-mark=ISP2add check-gateway=ping distance=2 gateway=192.168.3.1 routing-mark=ISP2

Как видим таблицы main и ISP1 полностью повторяют друг друга и основным шлюзом (с меньшей дистанцией) в них первый провайдер, таблица ISP2, наоборот, использует основным шлюзом второго провайдера. Таким образом каждая из дополнительных таблиц при нормальной работе сети будет отправлять трафик через свой канал, а при аварии — через оставшийся рабочий.

Маркировка трафика для проброшенных портов

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

Какой именно трафик, на какие именно порты и по какому протоколу приходит нам известно, поэтому будем выборочно маркировать только его. Все действия по маркировке мы будем выполнять в цепочке PREROUTING таблицы mangle, при этом помним, что правила обрабатываются в порядке очереди до первого терминирующего правила.

Переходим в IP — Firewall — Mangle и создаем следующее правило: Chain — prerouting, Dst Address — 192.168.3.107 — внешний адрес на канале первого провайдера, Protocol — tcp, Dst. Port — 80. Если проброшено несколько портов, то просто перечисляем их через запятую. В результате у вас должно получиться два правила, одно для протокола TCP, второе для UDP.

Mikrotik 2wan и Заметки компьютерщика

Mikrotik 2wan и Заметки компьютерщика

Быстрее выполнить действия в терминале:

/ip firewall mangleadd action=mark-connection chain=prerouting dst-address=192.168.3.107 dst-port=80 new-connection-mark=ISP1-IN passthrough=yes protocol=tcp

Затем создаем аналогичное правило для входящих соединений второго провайдера, только указываем второй внешний IP адрес и ставим марку ISP2-IN.

Соединения мы промаркировали, теперь нужно направить трафик в нужные таблицы маршрутизации, поэтому ниже создадим следующее правило: Chain — prerouting, Src/ Address — 192.168.111.0/24, Connection Mark — ISP1-IN.

Mikrotik 2wan и Заметки компьютерщика

На закладке Action выбираем mark routing и в поле New Routing Mark указываем таблицу маршрутизации, в которую мы направляем трафик, в нашем случае ISP1, флаг Passthrough не ставим, данное правило будет для пакета терминирующим.

/ip firewall mangleadd action=mark-routing chain=prerouting connection-mark=ISP1-IN new-routing-mark=ISP1 passthrough=no src-address=192.168.111.0/24

Затем создаем такое же правило для второго провайдера, которое будет направлять пакеты соединения с маркой ISP2-IN в таблицу маршрутизации ISP2. Данный набор правил всегда должен стоять раньше всех других правил по балансировке в таблице Mangle.

Ручная балансировка каналов

/ip firewall address-listadd address=192.168.111.254 list=ISP1add address=192.168.111.155 list=ISP2

Читайте также:  Повысьте свою производительность с помощью окна терминала Windows 7: подробное руководство

Теперь выполним маркировку попадающих под правило соединений:

/ip firewall mangleadd action=mark-connection chain=prerouting connection-mark=no-mark new-connection-mark=ISP1 passthrough=yes src-address-list=ISP1

Данное правило промаркирует все соединения, адрес источник которых входит в лист ISP1 и не имеет других марок — критерий Connection Mark — no mark — маркой ISP1. Немного о последнем критерии, с его помощью мы маркируем только те соединения, которые не имеют уже установленной марки. Это сделано для того, чтобы избежать возможной перемаркировки пакетов. И хотя в нашей конфигурации в данном месте таких быть не должно лучше все же подстраховаться на будущее.

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

Затем перейдем к маршрутизации, создадим правило, которое будет направлять трафик, промаркированный как ISP1 в первую таблицу маршрутизации:

/ip firewall mangleadd action=mark-routing chain=prerouting connection-mark=ISP1 new-routing-mark=ISP1 passthrough=no src-address=192.168.111.0/24

Здесь же создадим правило для второй таблицы маршрутизации.

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

/ip firewall mangleadd action=mark-connection chain=prerouting connection-mark=no-mark new-connection-mark=ISP1 passthrough=yes src-address-list=ISP1add action=mark-connection chain=prerouting connection-mark=no-mark new-connection-mark=ISP2 passthrough=yes src-address-list=ISP2add action=mark-routing chain=prerouting connection-mark=ISP1 new-routing-mark=ISP1 passthrough=no src-address=192.168.111.0/24add action=mark-routing chain=prerouting connection-mark=ISP2 new-routing-mark=ISP2 passthrough=no src-address=192.168.111.0/24

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

Балансировка NTH (по соединениям)

Довольно простой метод балансировки, когда мы оперируем соединениями и полностью соответствует принципу «на первый-второй рассчитайсь». Т.е. первое соединение направляем в первый канал, следующее во второй, затем снова в первый и т.д. Но если реализовать этот способ без дополнительных настроек, то мы получим ситуацию, когда трафик от одного узла к другому внешнему узлу может идти сразу через оба канала, что является нежелательным. Поэтому мы будем действовать по следующему алгоритму:

  • Маркировать новые соединения по принципу NTH
  • Добавлять адрес источник промаркированного соединения в список
  • В начале таблицы Mangle перехватываем трафик и принудительно маркируем на основании списков

Ниже будем рассматривать сразу готовое решение, начнем с перехвата трафика, для этого добавим уже известное нам по прошлому методу правило:

/ip firewall mangleadd action=mark-connection chain=prerouting connection-mark=no-mark new-connection-mark=ISP1 passthrough=yes src-address-list=ISP1

Затем продублируем его для списка второго провайдера и направим маркированный трафик в нужные таблицы маршрутизации:

/ip firewall mangleadd action=mark-routing chain=prerouting connection-mark=ISP1 new-routing-mark=ISP1 passthrough=no src-address=192.168.111.0/24

По сути, мы продублировали набор правил для ручной балансировки, но есть одно существенное отличие, если тогда мы формировали списки вручную, то теперь будем делать это динамически. Еще ниже добавляем следующее правило для маркировки соединений: Chain — prerouting, Src. Address — 192.168.111.0/24, Connection Mark — no mark, Сonnection state — new:

Mikrotik 2wan и Заметки компьютерщика

Еще раз обращаем внимание, что мы маркируем только новые соединения, адрес источника которых — адреса локальной сети и которые не имеют других марок.

Затем переходим на закладку Extra и в разделе Nth ставим Every 2, Packet 1 — это означает что под условия будет попадать каждый первый пакет из двух.

На закладке Action выбираем mark connection, New Connection Mark — ISP1 и ставим флаг Passthrough.

/ip firewall mangleadd action=mark-connection chain=prerouting connection-mark=no-mark connection-state=new new-connection-mark=ISP1 nth=2,1 passthrough=yes src-address=192.168.111.0/24

Затем аналогичное правило для второго провайдера, только в Nth ставим Every 2, Packet 2 или nth=2,2 для терминала.

Так как флаг Passthrough установлен — пакет идет дальше, следующим шагом будет добавление адреса источника в соответствующий список. Для этого добавим следующее правило: Chain — prerouting, Src/ Address — 192.168.111.0/24, Сonnection Mark — ISP1:

Mikrotik 2wan и Заметки компьютерщика

Переходим в Actions и указываем действие add src to address list, в поле Address List указываем список первого провайдера ISP1, ниже указываем срок действия записи, а нашем случае 8 часов. Теперь после выполнения балансировки все соединения этого узла будут закреплены за выбранным каналом на 8 часов, срок действия записи можете указать по собственному усмотрению.

/ip firewall mangleadd action=add-src-to-address-list address-list=ISP1 address-list-timeout=8h chain=prerouting connection-mark=ISP1 src-address=192.168.111.0/24

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

Повторяем указанный набор правил для второго провайдера.

В результате у нас получится:

/ip firewall mangleadd action=mark-connection chain=prerouting connection-mark=no-mark new-connection-mark=ISP1 passthrough=yes src-address-list=ISP1add action=mark-connection chain=prerouting connection-mark=no-mark new-connection-mark=ISP2 passthrough=yes src-address-list=ISP2add action=mark-routing chain=prerouting connection-mark=ISP1 new-routing-mark=ISP1 passthrough=no src-address=192.168.111.0/24add action=mark-routing chain=prerouting connection-mark=ISP2 new-routing-mark=ISP2 passthrough=no src-address=192.168.111.0/24add action=mark-connection chain=prerouting connection-mark=no-mark connection-state=new new-connection-mark=ISP1 nth=2,1 passthrough=yes src-address=192.168.111.0/24add action=mark-connection chain=prerouting connection-mark=no-mark connection-state=new new-connection-mark=ISP2 nth=2,2 passthrough=yes src-address=192.168.111.0/24add action=add-src-to-address-list address-list=ISP1 address-list-timeout=8h chain=prerouting connection-mark=ISP1 src-address=192.168.111.0/24add action=add-src-to-address-list address-list=ISP2 address-list-timeout=8h chain=prerouting connection-mark=ISP2 src-address=192.168.111.0/24add action=mark-routing chain=prerouting connection-mark=ISP1 new-routing-mark=ISP1 passthrough=no src-address=192.168.111.0/24add action=mark-routing chain=prerouting connection-mark=ISP2 new-routing-mark=ISP2 passthrough=no src-address=192.168.111.0/24

Внимательный читатель заметит, что у нас появилось два одинаковых блока с действием mark routing и сразу возникает резонный вопрос: а нельзя ли обойтись одним. Можно, оставив нижний, но при этом нужно учитывать, что большая часть трафика будет промаркирована именно первыми правилами, основываясь на нахождении адреса источника в списке и поэтому дальнейшее прохождение пакетов по цепочке является нежелательным с точки зрения производительности. Поэтому первый блок сразу отправляет пакеты в нужную таблицу маршрутизации прерывая их дальнейшее прохождение вниз по правилам.

Теперь некоторое время поработаем и заглянем в списки, как видим узлы равномерно распределены по каналам и добавлялись туда строго по очереди (обратите внимание на колонку с временем добавления):

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

Следующий вопрос: как быть при разной пропускной способности каналов. Допустим ISP1 предоставляет канал в 100 Мбит/с, а ISP2 только 50 Мб/с. В таком случае нам нужно изменить условия балансировки, как показывают несложные математические вычисления, вместо балансировки 1/2 нам нужно балансировать 1/3. Т.е. в условиях Nth ставим Every 3, а затем два пакета маркируем для первого провайдера, а третий для второго.

add action=mark-connection chain=prerouting connection-mark=no-mark connection-state=new new-connection-mark=ISP1 nth=3,1 passthrough=yes src-address=192.168.111.0/24add action=mark-connection chain=prerouting connection-mark=no-mark connection-state=new new-connection-mark=ISP1 nth=3,2 passthrough=yes src-address=192.168.111.0/24add action=mark-connection chain=prerouting connection-mark=no-mark connection-state=new new-connection-mark=ISP2 nth=3,3 passthrough=yes src-address=192.168.111.0/24

Никакие другие правила данное изменение не затрагивает и больше изменять ничего не нужно.

Балансировка PCC (per connection classifier)

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

Начнем. Прежде всего добавим правило маркировки соединений, маркировать мы все также будем трафик с адресами источника Src. Address — 192.168.111.0/24 и не имеющих других марок Connection Mark — no mark. Только на закладке Advanced добавим критерий Per Connection Classifer — src. address 2/0.

Аналогичное правило создаем и для второго провайдера, только в критерии ставим в знаменатель остаток 2. Если нам нужно балансировать каналы в иной пропорции, то можем использовать иные параметры, так повторяя указанный выше пример с каналами 100 Мбит/с и 50 Мбит/с следует использовать числитель 3 и знаменатели 0,1,2. Правил будет также три, два из них должны ставить метку ISP1, одно — ISP2.

Добавить правило в терминале можно так:

/ip firewall mangleadd action=mark-connection chain=prerouting connection-mark=no-mark new-connection-mark=ISP1 passthrough=yes per-connection-classifier=src-address:2/0 src-address=192.168.111.0/24

Затем ниже добавляем правила направляющие промаркированный трафик в нужную таблицу маршрутизации, пример для первого провайдера:

/ip firewall mangleadd action=mark-connection chain=prerouting connection-mark=no-mark new-connection-mark=ISP1 passthrough=yes per-connection-classifier=src-address:2/0 src-address=192.168.111.0/24add action=mark-connection chain=prerouting connection-mark=no-mark new-connection-mark=ISP2 passthrough=yes per-connection-classifier=src-address:2/1 src-address=192.168.111.0/24add action=mark-routing chain=prerouting connection-mark=ISP1 new-routing-mark=ISP1 passthrough=no src-address=192.168.111.0/24add action=mark-routing chain=prerouting connection-mark=ISP2 new-routing-mark=ISP2 passthrough=no src-address=192.168.111.0/24

Как видим, несмотря на более сложный алгоритм реализация этого способа гораздо проще, так как классификацию соединений берет на себя роутер и нам не нужно создавать дополнительные списки и правила.

Балансировка ECMP (equal cost multipath routing)

Аббревиатура ECMP расшифровывается как маршрутизация через множество путей равной стоимости. А так как все пути равнозначны, то трафик будет равномерно балансироваться между ними. Этот метод широко используется провайдерами, но для конечных сетей это не самый лучший вариант. Почему? Потому что мы не можем повлиять на выбор пути для соединения согласно каким-либо критериям и поэтому несколько соединений от одного внутреннего узла к одному внешнему могут пойти и пойдут разными путями. К чему это может привести мы писали в начале этой статьи. Поэтому подходите к выбору этого способа балансировки взвесив все за и против.

Прежде всего создадим еще одну таблицу маршрутизации и добавим в нее нулевой маршрут с несколькими шлюзами, если нужна балансировка в разных пропорциях, то следует добавить нужный шлюз несколько раз. Ниже показан пример для каналов 100 Мбит/с и 50 Мбит/с у первого и второго провайдера. Указанные шлюзы будут использоваться по кольцу (Round-robin). Обратите внимание, что новый маршрут мы поместили в новую таблицу mixed.

/ip routeadd check-gateway=ping distance=1 gateway= 192.168.3.1,192.168.3.1,192.168.233.2 routing-mark=mixed

Теперь поймаем все исходящие соединения локальной сети без марок и назначим им марку mixed:

/ip firewall mangleadd action=mark-connection chain=prerouting connection-mark=no-mark new-connection-mark=mixed passthrough=yes src-address=192.168.111.0/24

И сразу завернем этот трафик в нужную таблицу маршрутизации:

/ip firewall mangleadd action=mark-routing chain=prerouting connection-mark=mixed new-routing-mark=mixed passthrough=no src-address=192.168.111.0/24

Читайте также:  Отзывы

Полностью конфигурация будет выглядеть так:

/ip routeadd check-gateway=ping distance=1 gateway= 192.168.3.1,192.168.3.1,192.168.233.2 routing-mark=mixed/ip firewall mangleadd action=mark-connection chain=prerouting connection-mark=no-mark new-connection-mark=mixed passthrough=yes src-address=192.168.111.0/24add action=mark-routing chain=prerouting connection-mark=mixed new-routing-mark=mixed passthrough=no src-address=192.168.111.0/24

Как можно заметить, данный способ вообще предельно прост, но имеет ряд особенностей, которые следует учитывать.

Другие сети за роутером

Все это время мы просто маркировали исходящие пакеты из локальной сети, не разбираясь их назначением, молча подразумевая что все они уходят во внешнюю сеть. Но как быть, если за роутером находятся другие внутренние сети, неважно, непосредственно подключенные или через VPN. Очевидно, что нам нужно исключить их из балансировки.

Первое, что приходит на ум — это создать дополнительный список, скажем dont_balance и добавить его дополнительным критерием к правилам маркировки соединения через Dst. Addreess List, но таких правил может быть много и дополнительный критерий увеличит нагрузку на роутер. Поэтому мы пойдем другим путем, а именно вспомним, что во всех правилах маркировки мы использовали критерий Connection Mark — no mark. Следовательно, нам достаточно добавить таким соединениям собственную марку, и они не будут маркироваться правилами балансировки.

Чтобы не делать много записей можно сразу добавить в список диапазоны используемых частных сетей. На безопасность это не влияет, но упрощает администрирование.

В терминале создать и заполнить список можно так:

/ip firewall address-listadd address=192.168.0.0/16 list=dont_balanceadd address=10.0.0.0/8 list=dont_balance

Теперь промаркируем входящие соединения из этих сетей в локальную сеть и исходящие из локальной во внутренние сети:

/ip firewall mangleadd action=mark-connection chain=prerouting dst-address-list=dont_balance new-connection-mark=LOCAL passthrough=yes src-address=192.168.111.0/24add action=mark-connection chain=prerouting dst-address=192.168.111.0/24 new-connection-mark=LOCAL passthrough=yes src-address-list=dont_balance

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

/ip firewall mangleadd action=mark-routing chain=prerouting connection-mark=LOCAL new-routing-mark=main passthrough=no

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

Функция VLAN (Virtual Local Area Network) позволяет создать несколько виртуальных интерфейсов на одном физическом сетевом интерфейсе. С помощью VLAN можно разделять или объединять сегменты локальной сети, независимо от ее физической топологии.

1 Сброс настроек роутера

Настройку роутера MikroTik будем выполнять с чистой конфигурации. Поэтому полностью сбросим конфигурацию роутера через программу Winbox:

  • Откройте в меню New Terminal;
  • Введите команду system reset;
  • Нажмите кнопку y на клавиатуре, чтобы подтвердить сброс настроек.

После перезагрузки роутера откройте Winbox, и в появившемся окне нажмите кнопку Remove Configuration для очистки конфигурации.

2 Настройка WAN порта

Настроим WAN порт роутера, к которому подключен кабель провайдера. Как выполнить статические настройки или PPPoE можете посмотреть в статье настройка роутера MikroTik. В нашем случае маршрутизатор получает настройки от провайдера автоматически по DHCP, поэтому делаем динамическую настройку:

  • Откройте меню IP – DHCP Client;
  • В появившемся окне нажмите красный плюсик;
  • В новом окне в списке Interface: выбираем WAN интерфейс ether1;
  • Нажимаем кнопку OK для сохранения настроек.

После этого в столбце IP Adress появится IP адрес WAN порта, полученный от провайдера.

Проверяем наличие соединения с интернетом:

  • Откройте New Terminal;
  • Введите команду ping ya.ru, чтобы пропинговать сайт ya.ru.

Пошли пинги по 20ms, значит есть соединение с интернетом. Завершаем выполнение ping нажатием клавиш Ctrl+C.

Внимание! На компьютерах, подключенных к роутеру MikroTik, интернет не будет работать, пока не будет выполнена настройка NAT.

3 Объединение LAN портов в Bridge

Чтобы компьютеры офисной сети, подключенные по кабелю к разным LAN портам роутера, могли связываться друг с другом, объединим порты роутера в мост Bridge.

Добавляем интерфейс Bridge:

  • Откройте меню Bridge;
  • Нажмите “красный плюсик”;
  • В поле Name укажите название интерфейса bridge_main;
  • Нажмите кнопку ОК.

Добавляем LAN порты в Bridge:

  • Перейдите на вкладку Ports;
  • Нажмите “красный плюсик”;
  • В списке Interface выберите второй порт роутера ether2;
  • В списке Bridge выберите интерфейс bridge_main;
  • Нажмите кнопку ОК.

Добавьте аналогичным образом в bridge_main порты ether3, ether4 и ether5. В итоге у вас должен появиться список портов, как на рисунке ниже.

4 Добавление VLAN интерфейса

Создадим на интерфейсе bridge_main виртуальный интерфейс с названием vlan2, который позволит изолировать Wi-Fi точку HotSpot от сети предприятия.

  • Откройте меню Interfaces;
  • Перейдите на вкладку VLAN;
  • Нажмите “красный плюсик”;
  • В появившемся окне в поле Name указываем название интерфейса vlan2;
  • В поле VLAN ID указываем идентификатор виртуальной сети, равный 2. Сетевое оборудование с поддержкой VLAN не оперирует именами виртуальных сетей, а использует цифры от 1 до 4094. VLAN ID – это, по сути, имя виртуального интерфейса, которое будет использоваться оборудованием между собой. Единицу в качестве идентификатор использовать не рекомендуется, поскольку некоторые производители используют VLAN ID 1 в качестве значения по умолчанию;
  • В списке Interface выбираем интерфейс bridge_main;
  • Нажимаем кнопку OK для создания VLAN интерфейса.

Назначение IP адресов локальным сетям

Компьютеры сети предприятия и гостевой будут находиться в разных подсетях. Сеть предприятия будет использовать подсеть 192.168.88.1/24, а гостевая сеть 192.168.10.1/24. Настроим IP адреса локальных сетей.

Настройка IP адреса сети предприятия:

  • Откройте меню IP – Addresses;
  • Нажмите “красный плюсик”;
  • В поле Address введите 192.168.88.1/24;
  • В списке Interface выберите интерфейс bridge_main;
  • Нажимаем кнопку OK.

Настройка IP адреса гостевой сети:

  • Откройте меню IP – Addresses;
  • Нажмите “красный плюсик”;
  • В поле Address введите 192.168.10.1/24;
  • В списке Interface выберите виртуальный интерфейс vlan2;
  • Нажимаем кнопку OK.

5 Настройка пула адресов

Компьютерам сети предприятия и гостевой сети будем по DHCP присваивать IP адреса из разных подсетей. Сеть предприятия будет использовать диапазон 192.168.88.2–192.168.88.254, а гостевая сеть 192.168.10.2–192.168.10.254. Зададим с помощью пула диапазоны IP адресов.

Добавляем диапазон IP адресов предприятия:

  • Откройте меню IP – Pool;
  • Нажмите “красный плюсик”;
  • В появившемся окне в поле Name укажите название dhcp_pool_main;
  • В поле Addresses пропишите диапазон 192.168.88.2–192.168.88.254 ;
  • Нажмите кнопку OK для сохранения пула адресов.

Добавляем диапазон IP адресов гостевой сети аналогичным образом:

  • Нажмите “красный плюсик”;
  • В появившемся окне в поле Name указываем название dhcp_pool_vlan2;
  • В поле Addresses прописываем диапазон 192.168.10.2–192.168.10.254 ;
  • Нажимаем кнопку OK для сохранения пула адресов.

6 Настройка DHCP серверов

Чтобы компьютеры получали сетевые настройки автоматически, необходимо настроить DHCP сервера. Поскольку у нас будут две сети, то нужно настроить два DHCP сервера.

Настраиваем DHCP сервер внутренней сети предприятия:

  • Откройте меню IP – DHCP server;
  • Нажмите “красный плюсик”;
  • В появившемся окне в поле Name укажите название dhcp_server_main;
  • В списке Interface выберите интерфейс офисной сети bridge_main;
  • В списке Address Pool выберите пул IP адресов dhcp_pool_main, которые будут присваиваться компьютерам предприятия;
  • Нажмите кнопку OK.

Настраиваем DHCP сервер гостевой сети аналогичным образом:

  • Нажмите “красный плюсик”;
  • В появившемся окне в поле Name укажите название dhcp_server_vlan2;
  • В списке Interface выберите виртуальный интерфейс гостевой сети vlan2;
  • В списке Address Pool выберите пул IP адресов dhcp_pool_vlan2, которые будут присваиваться гостевым ноутбукам;
  • Нажмите кнопку OK.

Теперь переходим на вкладку Networks и добавляем наши сети:

Добавляем сеть предприятия:

  • Нажмите “красный плюсик”;
  • В поле Address укажите сеть предприятия 192.168.88.0/24;
  • В поле Gateway укажите адрес шлюза 192.168.88.1;
  • В поле Netmask укажите маску 24;
  • В поле DNS Servers укажите адрес DNS сервера 192.168.88.1;
  • Нажмите кнопку OK.

Добавляем гостевую сеть:

  • Нажмите “красный плюсик”;
  • В поле Address укажите сеть предприятия 192.168.10.0/24;
  • В поле Gateway укажите адрес шлюза 192.168.10.1;
  • В поле Netmask укажите маску 24;
  • В поле DNS Servers укажите адрес DNS сервера 192.168.10.1;
  • Нажмите кнопку OK.

7 Настройка DNS сервера

  • Откройте меню IP – DNS и нажмите кнопку Settings;
  • Поставьте галочку Allow Remote Request;
  • Нажмите кнопку OK.

8 Включение NAT

Чтобы компьютеры имели выход в интернет, нужно настроить NAT для двух сетей.

Настройка NAT для внутренней сети предприятия:

  • Откройте меню IP – Firewall;
  • Перейдите на вкладку NAT;
  • Нажмите “красный плюсик”;
  • В списке Chain выберите srcnat;
  • В поле Src. Address укажите диапазон IP адресов сети предприятия 192.168.88.0/24;
  • В списке Out Interface выберите WAN порт ether1, на который приходит интернет от провайдера;
  • Перейдите на вкладку Action;
  • В списке Action выберите masquerade;
  • Нажмите кнопку OK.

Настройка NAT для гостевой сети выполняется аналогичным образом, только используется другой диапазон IP адресов и порт vlan2:

9 Изоляция подсетей

Чтобы компьютеры из офисной сети и сети хотспота не видели друг друга, нужно изолировать подсети. Это можно сделать двумя способами: через Firewall или правила маршрутизации Route Rules. Мы опишем, как изолировать подсети в MikroTik с помощью Route Rules.

  • Откройте меню IP – Routes;
  • Перейдите на вкладку Rules;
  • Нажмите “красный плюсик”;
  • В поле Src. Address укажите офисную подсеть 192.168.88.0/24;
  • В поле Dst. Address укажите гостевую подсеть 192.168.10.0/24;
  • В списке Action выберите unreachable;
  • Нажмите кнопку OK.

Добавляем второе правило аналогичным образом, только меняем местами подсети.

  • Нажмите “красный плюсик”;
  • В поле Src. Address укажите офисную подсеть 192.168.10.0/24;
  • В поле Dst. Address укажите гостевую подсеть 192.168.88.0/24;
  • В списке Action выберите unreachable;
  • Нажмите кнопку OK.

Настройка роутера MikroTik для использования VLAN выполнена. Теперь приступим к настройке точки доступа EnGenius EAP150 с поддержкой VLAN.

Оцените статью
Хостинги