Настройка двух провайдеров на mikrotik

Обновлено: 15.06.2024

В статье будет рассмотрен способ подключения двух провайдеров к маршрутизатору микротик, использование 2-х провайдеров может быть двумя способами резервирование и балансировка. Резервирования каналов интернета, то есть в постоянной активности будет основной канал, а другой (резервный) будет запускаться в том случае, когда первый будет не активен, используется, если допустим 2-й оператор предоставляет интернет с ограниченным трафиком или через GSM модем. Балансировка, когда одновременно работает 2 провайдера.

Нужно разобраться с MikroTik, но не определились с чего начать? В курсе «Настройка оборудования MikroTik» все по порядку. Подойдет и для начала работы с этим оборудованием, и для того, чтобы систематизировать знания. Это видеокурс из 162 уроков и 45 лабораторных работ, построен на официальной программе MTCNA. Проходить можно, когда удобно и пересматривать по необходимости – материалы курса выдаются бессрочно. Также есть 30 дней на личные консультации с автором. На пробу выдают 25 уроков бесплатно, заказать их можно на странице курса.

Резервирование

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

Быстрый способ

Допустим, шлюзом первого провайдера ISP1 является ip 1.1.1.1 он же наш основной канал шлюз второго ISP2 ip 2.2.2.2 резервный провайдер.

Заходим В меню IP-Routes, и добавляем новое правило. Заполняем поля как на рисунке.


Dst.Address – адрес назначения, 0.0.0.0/0 значит любой адрес

Gateway – шлюз провайдера

Check Gateway –Способ проверки доступности шлюза провайдера, будем проверять пингами.

Distance – метрика шлюза, т.е приоритет чем значение меньше тем приоритет выше.т.к ISP1 у нас основной провайдер, то метрику ставим самую высокую 0 или 1

Аналогично настраиваем второго провайдера ISP2? Только метрику Distance ставим больше 1, например 10


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

Комплексный способ

Данный способ основывается на систематической проверке (раз в 1 минуту) доступности какого либо ресурса в интернете, например DNS гугла 8.8.8.8.. Схема такова: если пинг проходит, значит ISP1 канал активен и ISP2 может быть отключен, в противном случае включается второй, а 1-й должен быть выключен.

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


Следующим создаем статический маршрут до 8.8.8.8 через основной канал. Метрика по умолчанию равна 0, поэтому ее можем не указывать. Этот маршрут нужен для проверки доступности интернета через основной канал, если он пропадает то происходит переключение

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


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

Идем в меню Tools-Netwatch и добавляем правило.


Host – ресурс который будем проверять на доступность

Interval – c какой периодичностью проверять, оставим 1 раз в минуту. Далее переходим на вкладку «UP». Здесь нам нужно прописать действие которое будет выполняться при доступности хоста. Если хост доступен, то нам нужно включить маршрут через 1-го провайдера и отключить через второго. Код будет следующим


На вкладке «Down». Прописываем правила что если хост не доступен, то отключаем ISP1 и включаем ISP2.


Нажимаем «OK». Теперь при недоступности ip адреса 8.8.8.8, произойдет отключение маршрута 1.1.1.1 и включение маршрута 2.2.2.2. А когда хост 8.8.8.8 снова станет доступен, резервный канал выключится и включится основной.

Балансировка каналов

Настроим одновременную работу двух провайдеров, переходим снова в меню IP-routes и добавляем следующий маршрут по умолчанию.


В этом примере нагрузка на каналы будет распределяться 50/50, если же нам нужно сделать неравномерное распределение нагрузки, допустим в 1-го отправлять 75 % трафика, а на второго 25%, то это выглядит так.


Т.е три соединения будут идти через шлюз 1.1.1.1 и одно соединение через шлюз 2.2.2.2

Обучающий курс по настройке MikroTik

Нужно разобраться с MikroTik, но не определились с чего начать? В курсе «Настройка оборудования MikroTik» все по порядку. Подойдет и для начала работы с этим оборудованием, и для того, чтобы систематизировать знания. Это видеокурс из 162 уроков и 45 лабораторных работ, построен на официальной программе MTCNA. Проходить можно, когда удобно и пересматривать по необходимости – материалы курса выдаются бессрочно. Также есть 30 дней на личные консультации с автором. На пробу выдают 25 уроков бесплатно, заказать их можно на странице курса.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Подключение двух провайдеров на MikroTik

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

Содержание:

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

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

  • WAN1 IP Address 10.10.10.2/24 Gateway 10.10.10.1
  • WAN2 IP Address 20.20.20.2/24 Gateway 20.20.20.1
  • LAN IP Address 192.168.10.1

Шаг первый. Подготовка интерфейсов

Главное меню – Interface, выбираем порт, в который будет подключен первый провайдер (в нашем случае это порт ether1). Заходим на порт вкладка «General» и даем имя (в нашем случае WAN1) нажимаем ОК. Те же шаги повторяем для подключения второго провайдера используя порт ether2.

Шаг 1.1 - Подготовка интерфейсов Шаг 1.2 - Подготовка интерфейсов

Шаг второй. Создание бриджа для локальной сети

Главное меню – Bridge, нажимаем «+» создаем bridge с названием LAN и добавляем все оставшиеся порты в этот бридж (в примере это - ether3, ether4 и ether5)

Шаг 2.1 - Создание бриджа для локальной сети Шаг 2.2 - Создание бриджа для локальной сети

Шаг третий. Назначаем IP адреса сети

Главное меню – IP – Addresses, нажимаем «+» и назначаем IP адреса на интерфейсах (WAN1 - 10.10.10.2/24, WAN2 – 20.20.20.2/24 Для первого и второго провайдера, и LAN - 192.168.10.1/24 для локальной сети).

Назначаем IP адреса сети в Mirotik

Шаг 3 - Назначаем IP адреса сети

Шаг четвертый. Настройка DHCP сервера для сети

Данный этап мы не будем рассматривать подробно и упростим задачу создай DHCP сервер автоматически. Главное меню – IP – DHCP Server, нажимаем кнопку DHCP Setup и указываем интерфейс LAN, нажимаем кнопку Next до появления надписи о удачном завершении настройки.

Настройка DHCP сервера для сети в Mirotik

Шаг 4 - Настройка DHCP сервера для сети

Шаг пятый. Создаем правила для маршрутизации трафика

Главное меню – IP – Firewall, вкладка Mangle нажимаем «+» и создаем две цепочки правил, для первого и для второго провайдера:

  1. Вкладка General: Chain - prerouting, Destination Address - 10.10.10.0/24, Incoming interface – LAN. Вкладка Action: Action – accept и нажимаем кнопку «ОК»
  2. Вкладка General: Chain - prerouting, Destination Address – 20.20.0/24, Incoming interface – LAN. Вкладка Action: Action – accept и нажимаем кнопку «ОК»

Шаг шестой. Помечаем входящий и исходящий трафик

После того как мы создали правила маршрутизации, нужно пометить входящий и исходящий трафик, для того что бы запросы уходили и приходили через определенного провайдера. Главное меню – IP – Firewall, вкладка Mangle нажимаем «+» и создаем две цепочки правил для маркировки пакетов для первого и второго провайдера.

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

  1. Вкладка General: Chain - prerouting, Incoming interface – WAN1, Connection Mark – no-mark. Вкладка Action: Action – mark connection, New Connection Mark – ISP1 (имя можно задать любое по не обходимости, в примере будет использоваться ISP1 и ISP2 для первого и второго провайдера соответственно и нажимаем кнопку «ОК»
  2. Вкладка General: Chain - prerouting, Incoming interface – WAN2, Connection Mark – no-mark. Вкладка Action: Action – mark connection, New Connection Mark – ISP2 и нажимаем кнопку «ОК»

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

  1. Вкладка General: Chain - prerouting, Incoming interface – LAN, Connection Mark – ISP1. Вкладка Action: Action – mark routing, New Routing Mark – WAN1_ISP1, нажимаем кнопку «ОК»
  2. Вкладка General: Chain - prerouting, Incoming interface – LAN, Connection Mark – ISP2. Вкладка Action: Action – mark routing, New Routing Mark – WAN2_ISP2, нажимаем кнопку «ОК»
  3. Вкладка General: Chain - output, Connection Mark – ISP1. Вкладка Action: Action – mark routing, New Routing Mark – WAN1_ISP1, нажимаем кнопку «ОК»
  4. Вкладка General: Chain - output, Connection Mark – ISP2. Вкладка Action: Action – mark routing, New Routing Mark – WAN2_ISP2, нажимаем кнопку «ОК»

Шаг седьмой. Создаем правила NAT для каждого из провайдеров

Главное меню – IP – Firewall, вкладка NAT, нажимаем «+» и создаем правило:

Шаг восьмой. Прописываем пути маршрутизации

Последним этапом пропишем пути маршрутизации. Главное меню – IP – Routes, нажимаем «+» и создаем правила:

Маршруты отдельно для каждого из провайдеров

  1. Вкладка General: Destination Address – 0.0.0.0/0, Gateway – 10.10.10.1, Check Gateway – ping (эта опция позволяет отслеживать активность маршрута, в случае падения канала трафик будет перенаправлен через второго провайдера), Distance – 1, и нажимаем кнопку «ОК»
  2. Вкладка General: Destination Address – 0.0.0.0/0, Gateway – 20.20.20.1, Check Gateway – ping (эта опция позволяет отслеживать активность маршрута, в случае падения канала трафик будет перенаправлен через второго провайдера), Distance – 2, и нажимаем кнопку «ОК»

Маршруты для промаркированного трафика:

  1. Вкладка General: Destination Address – 0.0.0.0/0, Gateway – 10.10.10.1, Check Gateway – ping, Distance – 1, Routing Mark – WAN1_ISP1, и нажимаем кнопку «ОК»
  2. Вкладка General: Destination Address – 0.0.0.0/0, Gateway – 20.20.20.1, Check Gateway – ping, Distance – 2, Routing Mark – WAN2_ISP2, и нажимаем кнопку «ОК»

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

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

Настройка нескольких провайдеров в RouterOS.

Если оператор нам выдал ip адрес 1.1.1.2, то мы должны обеспечить выход через этого провайдера именно с таким ip адресом, а не с каким либо другим.

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

Для начала определим вводные данные.

  • Интерфейс ether1
  • IP:88.88.88.2/29 Gateway: 88.88.88.1, а также данный провайдер отдаёт ещё один префикс на том же интерфейсе IP:99.99.99.2/24 Gateway: 99.99.99.1
  • DSN сервера 2.2.2.2 и 3.3.3.2
  • Интерфейс ether2
  • IP:44.44.44.2/29 Gateway: 44.44.44.1
  • DSN сервера 7.7.7.2 и 6.6.6.2
  • Ether3 - IP:172.20.17.1/24 - локальная сеть компьютеров
  • Ether4 - IP:172.20.18.1/24 - локальная сеть для серверов

Настройка IP адресации

Настроим IP адреса, согласно выданным настройкам от провайдеров.

Я думаю бессмысленно как-то дополнять данные настройки.

Маркировка соединений от провайдера

Вы наверное помните, а если и нет, то стоит напомнить, что любой пакет, который приходит на маршрутизатор попадает в цепочку prerouting и не важно куда он дальше попадёт forward или Input.

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

Сначала настроим, а далее разберём что сделали.

Разберём только первое правило, все остальные по аналогии.

Если пакет приходит с интерфейса ether1 и адрес назначения лежит в сети 88.88.88.0/29, и такой пакет создал соединение, то маркируем соединение маркой Next-Hop/88.88.88.1.

88.88.88.0/29 - почему сеть, а не IP? Если вы будете делать правила для каждого IP адреса, количество правил будет расти, а смысл будет тот же самый.

connection-state=new - нет смысла пытаться маркировать соединения, которые уже установлены, как вы помните new - это пакет, который создал соединение, т.е он только один, а в случае со всеми пакетами routeros будет каждый раз пытаться маркировать соединение, которое уже и так может иметь маркировку.

И так это наша заготовка, далее мы начнём работать непосредственно с логикой.

С этого момента весть трафик, который придёт со стороны провайдера, будет промаркирован, а далее бы будем оперировать данной маркировкой.

Доступ к маршрутизатору

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

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

Создадим данные таблицы.

dst-address=0.0.0.0/0 - обычный маршрут по умолчанию, не более чем.

gateway=88.88.88.1 - шлюз, обратите внимание на то, что нам первый провайдер даёт два префикса с разными шлюзами, и поэтому мы создаём три маршрута, для нас по факту не два провайдера, а три.

routing-mark=Next-Hop/88.88.88.1 - это и есть именованная таблица маршрутизации. Она может иметь любое имя, какое вам удобнее, лично моё мнение, такое именование удобно записывать в названии таблицы шлюз, через который будет отправлен пакет в случае если он будет использовать данный маршрут. Имена маркировок соединений и маршрутов просто совпали и могут быть совершенно разные.

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

Дело в том, что routing-mark это маркировка, когда вы своими руками с помощью mangle назначили на пакет маркировку, а routing-table это то, через какую таблицу маршрутизации вышел пакет.

Если маршрутизатор не найдёт подходящего маршрута в именованной таблице маршрутизации, маршрутизатор продолжит поиск подходящего маршрута в таблице по умолчанию main и такой пакет можно будет отфильтровать например так routing-mark=custommark routing-table=main . Нам же такое поведение не нужно, если по какой-то причине маршрут не будет найден, пакет должен умереть на маршрутизаторе, а отправлять через другого провайдера нет никакого смысла.

Нам необходимо переопределить данное поведение.

Т.е марка и таблица по факту это одно и тоже, пакет который имеет определённую routing-mark пытается найти маршрут в таблице с таким же именем.

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

Все интерфейсы имеют способность падать, есть один интерфейс, который всегда находится в состоянии UP, но в RouterOS использовать его в конфигурации не представляется возможным - это Loopback.

В RouterOS данный интерфейс можно заменить пустым bridge.

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

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

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

Напоминаю, что дистанция 255 это административная дистанция, которая явно указывает на то, что данный маршрут мёртв и не участвует в маршрутизации.

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

Выход с маршрутизатора

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

Когда вы пингуете с маршрутизатора, строите PPP* или IP туннели с самого маршрутизатора или dns запросы отправляете с самого маршрутизатора. Разница с прошлым кейсом в том, что мы отправляли пакет по уже установленному соединению, а здесь пакет улетает с маршрутизатора и соединение не имеет маркировки.

Здесь будет значительно проще.

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

Всё, теперь вы можете строить туннели и у вас всё будет работать, но только в том случае если явно указан IP адрес, например в Ipsec или gre, ip туннели и прочее, там где явно можно указать Source адрес. А что делать с сервисами, где нельзя указать явно IP адрес источника? Ответ на этот вопрос кроется в таблице маршрутизации. Параметр pref-src отвечает за то, какой IP адрес будет выбран если он явно не задан.

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

В нашем примере если только для одного IP адреса.

Ещё раз для понимания, у нас есть два варианта развитая сюжета, если IP адрес источника явно указан и тогда нам нечего не грозит и всё замечательно работает. Второй вариант, когда IP адрес явно не задан, например вы подминаете l2tp-client у нас нет возможности указать source адрес, но ведь адрес назначения есть в любом случае. Тогда маршрутизатор поступает следующим образом, он находит маршрут в таблице маршрутизации main, смотрит какой указан pref-src и использует данный ip адрес, как адрес источника.

Вы помните что мы создавали фиктивный маршрут.

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

Выбор IP адреса зависит только от вас, выбирайте тот адрес, который считаете менее загруженным.

На этом этапе всё, теперь вы можете строить различные туннели и устанавливать соединения не только указывая явно source адрес.

Доступ за НАТ

172.20.18.2 - это exchange сервер, мы должны обеспечить доступность 25,80,443 портов через каждого провайдера.

НАТ делаем как обычно, без всяких излишеств.

А теперь давайте вспомним то, что мы делали самым первым правилом в mangle мы промаркировали все соединения, которые приходят через всех провайдеров! Данная маркировка нам опять поможет.

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

  1. Когда пакет придёт на IP адрес 88.88.88.2 мы промаркировали соединение которому принадлежит пакет.
  2. Далее в NAT мы изменили адрес назначения и маршрутизатор отправит его до сервера.
  3. Естественно сервер в ответ отправит пакет, как минимум syn,ack, так как данный пакет принадлежит уже существующему соединению, мы по имени соединению отправим данный пакет в именованную таблицу маршрутизации.

НАТ уже сделали, дело осталось за малым- найти трафик, который приходит от сервера.

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

Наверное многие спросят, а почему указывается не интерфейс ether1, а не взять и указать явно локальный интерфейс, например ether4.

Мы с вами делаем универсальную конфигурацию, если явно указать какой-либо другой интерфейс, значит в случае если у нас будет ещё один NAT, который пойдёт в другой порт, нам необходимо будет добавлять ещё одно аналогичное правило, но уже с другим интерфейсом. А ведь мы можем даже завернуть трафик с помощью NAT вообще на внешние сервера например 1.1.1.1, и что тогда? Единственный интерфейс откуда в цепочке prerouting мы не должны ожидать данный трафик, это трафик с самого провайдера и причём именно с того, с которого он пришёл.

Всё работает, теперь вы можете подключаться в своему серверу по любому IP адресу. Создайте DNS A запись RR и укажите все три внешних IP адреса и всегда ссылайтесь на данную запись.

Ещё каких-то лет 7 назад, DNS RR работал не очень хорошо, в плане того, что приложения зачастую использовали только первый IP адрес, сейчас все изменилось и многие приложения в случае, если не смогут подключиться по одному адресу, будут пытаться подключаться по другому и так далее.

А также source NAT?

Промелькнула такая мысль в голове? Ведь когда пакет от сервера будет уходить через маршрутизатор, нам надо будет подменить его src адрес, на адрес на который он шёл в самом начале. Но мы ничего не сделали для этого.

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

Обратное преобразования NAT произойдёт автоматически, давайте взглянем на запись в conntrack.

Давайте уберём из вывода лишнее, чтобы оно нам не мешало.

И так когда пакет попал на маршрутизатор и соединение было "только только" создано, соединение имело такой вид

После того, как произошла процедура dst NAT, маршрутизатор добавил флаги и самое главное на какой адрес изменяется IP адрес во всех пакетах в данном соединении.

Когда пакет уходил с маршрутизатора в цепочки postrouting работает процедура src NAT, но у нас нет правил src NAT, оставили значение исходное.

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

Теперь, если пакет приходит на маршрутизатор и у него в заголовках src-address=5.19.245.3:57839 dst-address=88.88.88.2:80 dst-address изменится на 172.20.18.2:80.

Если пакет приходит на маршрутизатор с адресами в заголовках src-address=172.20.18.2:80 dst-address=5.19.245.3:57839 src адрес изменится на 88.88.88.2:80.

Тем самым src NAT на данном этапе работает автоматически на основании правил dst-NAT.

Выпустить с правильного адреса

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

Например, VoIP телефония, ваш провайдер телефонии требует, чтобы вы регистрировались только с определённого IP адреса, или банк клиент на компьютере главного бухгалтера должен подключаться с определённого адреса.

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

Название листа явно говорит о том, на какой IP адрес необходимо изменить адрес источника.

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

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

И мы не можем просто взять и завернуть весь трафик от внутренного хоста в определённого провайдера, так как у нас есть ещё и локальная сеть.

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

Создадим адрес лист с BOGON сетями.

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

И последний нюанс- это настроить NAT.

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

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

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

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

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

Давайте сделаем маршрут ECMP с тем учётом, что шлюз 88.88.88.1 это 10Mbps, а 44.44.44.1 5Mbps.

Пакеты будут отправляться поочередно для каждого шлюза, на каждые 3 пакета, 2 пакету будут отправлены в 88.88.88.1 и оставшийся один пакет на шлюз 44.44.44.1.

Хотя это немного и не правильно, дело в том, что у процесса ECMP есть отдельная таблица кеша, и чтобы каждый раз не выбирать маршрут, маршрутизатор для связки src-address:port dst-address:port создаёт хеш и выберет для данного хеша уже шлюз по схеме Round Robin, тем самым для одного соединения будет выбираться один и тот же шлюз.

Но не все так однозначно, каждый раз, когда вы изменили маршрут, например добавили шлюз или шлюз умер то кеш ECMP чистится, а также каждые 10 минут всё также чистится кеш, отсюда появляется проблема, что каждые 10 минут может выбраться другой шлюз. И снова для каждого уникального хеша будет выбираться маршрут.

Проблема в том, что ограничение в 10 минут, это ограничение жёсткое и нам его не убрать и не изменить.

Будем решать штатными средствами RouterOS.

Давайте подумаем вместе, что нам известно о пакете, который попал под ECMP маршрут? Конечно, данный пакет находится в таблице main.

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

chain=postrouting - Работаем в цепочке по факту того, что уже выбрал ECMP, можно использовать и цепочку forward, но тогда не попадёт трафик который был сгенерирован самим маршрутизатором.

routing-table=main - Маршрут ECMP находиться в main таблице.

out-interface=ether1 - ECMP выбрал шлюз, который лежит через первый интерфейс

connection-state=new - Мы маркируем соединение, нет смысла работать со всеми пакетами.

action=mark-connection new-connection-mark=ECMP/ether1 - маркируем соединение.

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

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

Не забудьте, что трафик смотрится со всех сторон, а нам необходимо только трафик из локальной сети, а так как интерфейсов может быть много, лучше всего отфильтровывать по принципу весь трафик КРОМЕ того который пришёл с интерфейса провайдера.

Осталось настроить NAT

За сим всё, спасибо за внимание.

Удалённая настройка маршрутизатора, к дальней дороге.

В этой статье описана самая полная инструкция, как настроить роутер MikroTik на два провайдера.

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

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

Описание подключений

В примере мы будем использовать роутер MikroTik RB951Ui-2HnD.

В 1-ый порт роутера подключен кабель от 1-го провайдера, во 2-ой порт подключен кабель от 2-го провайдера, порты 3-5 и Wi-Fi используются для подключения компьютеров локальной сети.

Настройка MikroTik на два провайдера

1-й порт будет настроен на динамическое получение сетевых настроек от провайдера по DHCP. Провайдер выдает роутеру динамический IP-адрес 10.10.10.10

2-й порт будет настроен вручную на статический IP-адрес 20.20.20.20, шлюз 20.20.20.1 и маску 255.255.255.0

Сброс конфигурации по умолчанию

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

  1. Откройте меню System - ResetConfiguration;
  2. Поставьте галочку No Default Configuration;
  3. Нажмите ResetConfiguration.

Сбросить конфигурацию MikroTik


После перезагрузки в Winbox выберите в списке MAC адрес устройства, и подключитесь с пользователем admin без пароля.


Настройка 1-го WAN порта

Настраиваем 1-й порт на динамическое получение сетевых настроек от провайдера по DHCP.

Настройка DHCP Client в MikroTik

Теперь мы получили IP адрес от провайдера, который отображается в столбце IP Address.

Получение сетевых настроек DHCP клиента в MikroTik

Проверка подключения к интернету в MikroTik

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

2-й порт настраиваем на статический IP-адрес 20.20.20.20, шлюз 20.20.20.1 и маску 255.255.255.0

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

Настоим IP-адрес интернет шлюза:

Настройка Gateway в MikroTik

Добавим IP-адрес DNS сервера:

Настройка DNS в MikroTik

Проверка настроек пингованием

Пинги идут, значит все настроено правильно. Можно подключить кабель первого провайдера обратно.

Настройка LAN портов 3-5 и Wi-Fi

LAN порты 3-5 будут объединены с Wi-Fi интерфейсом в единую локальную сеть, к которой будут подключаться компьютеры.

Объединяем LAN порты 3-5 в свитч

Повторите тоже самое для интерфейса ether5.

Объединение портов MikroTik в свитч

Напротив портов ether4 и ether5 появится буква S (Slave - ведомый).

Статус свитч портов MikroTik

Создаем интерфейс Bridge-local и объединяем в нем LAN порты и Wi-Fi

Чтобы LAN порты 3-5 объединить с Wi-Fi в одну сеть, нужно создать bridge интерфейс, и добавить в него мастер порт свитча ether3 и Wi-Fi интерфейс wlan1.

Создаем интерфейс bridge-local:

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

Добавляем главный порт свитча ether3 в bridge-local:

Добавляем мастер порт свитча в бридж MikroTik

Добавляем Wi-Fi интерфейс в bridge-local:

Добавляем беспроводной интерфейс с бридж MikroTik

Назначаем IP-адрес интерфейсу bridge-local:

Настройка IP адреса бридж интерфейса в MikroTik

Настраиваем DHCP сервер локальной сети.

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

Настройка dhcp сервера MikroTik

Настройка дшсп микротик

Настройка dhcp микротик

Настройка адреса шлюза в dhcp сервере микротик

Настройка диапазона ip адресов dhcp сервера микротик

Настройка dns серверов в dhcp сервере микротик

Время резервирования dhcp настроек в микротик

Настройка dhcp сервера микротик завершена

Настройка Wi-Fi

Сначала включим Wi-Fi:

  1. Откройте меню Wireless;
  2. Нажмите левой кнопкой мыши на интерфейсе wlan1 и нажмите кнопку Enable (синяя галочка).

Включить Wi-Fi интерфейс микротик

Создаем пароль для подключения к точке доступа MikroTik:

Настройка пароля Wi-Fi в Микротик

Настраиваем параметры Wi-Fi точки MikroTik:

Настройка wifi в микротик

Настройка NAT

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

Добавляем правило NAT для первого провайдера:

Настройка NAT первого провайдера

Настройка маскарадинга первого провайдера на Микротик

Добавляем правило NAT для второго провайдера:

  1. На вкладке NAT нажмите кнопку Add (синий крестик);
  2. В появившемся окне на вкладке General в списке Chain должно быть выбрано srcnat;
  3. В списке Out. Interface выберите интерфейс второго провайдера ether2;
  4. Перейдите на вкладку Action;

Настройка NAT второго провайдера

Настройка маскарадинга второго провайдера на Mikrotik

Теперь на подключенных к роутеру компьютерах должен появиться интернет. Проверьте это.

Настройка переключения интернет каналов между двумя провайдерами

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

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

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

Как только восстановится связь через 1-го провайдера, мы деактивируем 2-ой маршрут, и весь трафик пойдет через 1-го провайдера.

Утилита Netwatch поможет пинговать ip-адрес в интернете и выполнять скрипты, если ip-адрес перестал пинговаться или снова начал. Она будет выполнять активацию и деактивацию маршрута.

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

Удаляем маршрут по умолчанию в роутере Микротик

Теперь изменим параметры маршрута второго провайдера:

Настройка маршрута второго провайдера

Настройка комментария маршрута второго провайдера

Деактивация маршрута второго провайдера

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

  1. Откройте меню IP - DHCP Client;
  2. Сделайте двойной щелчок левой кнопкой мыши на интерфейсе ether1;
  3. Перейдите на вкладку Status;
  4. Выпишите IP-адрес шлюза из поля Gateway. Он будет нужен при создании маршрута через первого провайдера.

Шлюз провайдера

Теперь добавляем маршрут через первого провайдера:

Добавляем маршрут через первого провайдера в Микротик

Добавляем комментарий к маршруту первого провайдера

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

Добавляем маршрут к серверу Google через первого провайдера

Добавляем комментарий к маршруту первого провайдера

Также добавим в Firewall правило, которое запретит пинговать ip-адрес 8.8.4.4 через 2-го провайдера. Иначе утилита Netwatch подумает, что связь с 1-ым провайдером восстановилась, и будет постоянно переключать маршруты по кругу.

Настройка фаервола для запрета пингования сервера Google через второго провайдера

Настройка фаервола для запрета пингования сервера Google через второго провайдера

Netwatch будет проверять связь с интернетом путем пингования сервера Google с IP-адресом 8.8.4.4. Как только сервер перестанет пинговаться, выполнится скрипт, который активирует 2-й маршрут и трафик пойдет через 2-го провайдера. Как только связь через 1-го провайдера восстановится, то выполнится другой скрипт, который деактивирует 2-й маршрут и трафик пойдет через 1-го провайдера.

Настройка Netwatch в MikroTik

Настройка Netwatch Down в MikroTik

Настройка Netwatch Up в MikroTik

Проверка переключения интернета между двумя провайдерами

Проверим, как работает переключение между двумя провайдерами.

    Откройте меню IP - Routes. Маршрут второго провайдера должен быть серого цвета, т.е. не активен;

Проверка настройки MikroTik на два провайдера

Переключение на второго провайдера в роутере Микротик

Проверка настройки MikroTik на два провайдера

Настройка роутера MikroTik на два провайдера работает правильно. Теперь можно увеличить интервал пингования сервера Google.

Читайте также: