Понадобилось организовать работу с двумя подключениями к интернету одновременно. Один провайдер Эр-Телеком, второй – Ростелеком. Оба подключаются по PPPOE. Заявленная скорость подключения примерно одинаковая.
Опишу кратко настройку маршрутизатора Mikrotik для одновременной работы с двумя провайдерами. В Сети можно немало найти руководств о настройке одновременной работы двух подключений. Однако не все они подходили именно под мой случай.
На самом деле не так важно два провайдера или больше, смысл настроек аналогичный.
В моём случае:
Эр-Телеком: pppoe-out1, ip-адрес: 94.144.177.177, routing-mark: to-isp1, connection-mark: to-isp1c
Ростелеком: pppoe-out2, ip-адрес: 85.237.51.51, routing-mark: to-isp2, connection-mark: to-isp2c
Локальная сеть: 192.168.1.0/24
Сервер: 192.168.1.15
Таким образом требовалось:
1) разделить нагрузку по подключениям поровну (!).
2) обеспечить возможность подключения к компьютеру из интернет (DNAT)
С первым всё относительно просто. Предполагается что маскарадинг для локальной сети уже настроен.
/ip firewall nat add chain=srcnat action=masquerade src-address=192.168.1.0/24
Нужно создать статическое правило маршрутизации:
/ip route add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=pppoe-out1,pppoe-out2
В случае статической маршрутизации в качестве gateway указываются IP-адреса шлюза. А вот для туннельных протоколов лучше будет использовать имя интерфейса. Это нужно если шлюз назначается автоматически при установлении сессии.
Если с доступом к интернет-ресурсам все относительно просто, то с подключением из глобальной сети к компьютеру немного сложнее.
Во-первых придется создать правила NAT для второго подключения (читай второго IP-адреса) аналогично первому.
/ip firewall nat add chain=dstnat action=dst-nat to-addresses=192.168.1.15 to-ports=80 protocol=tcp dst-address=94.144.177.177 dst-port=80 add chain=dstnat action=dst-nat to-addresses=192.168.1.15 to-ports=80 protocol=tcp dst-address=85.237.51.51 dst-port=80
Теперь следует добиться того, чтобы ответ на запрос через какого-либо провайдера уходил на его же шлюз. Для этого потребуется маркировка маршрутов и соединений.
Маршруты по-умолчанию для маркированных пакетов (в дополнении к основному правилу см. выше):
/ip route add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=pppoe-out1 routing-mark=to-isp1 add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=pppoe-out2 routing-mark=to-isp2
Эти два правила промаркируют входящие соединения для каждого из провайдеров.
/ip firewall mangle add action=mark-connection chain=forward disabled=no in-interface=pppoe-out1 new-connection-mark=to-isp1c passthrough=yes add action=mark-connection chain=forward disabled=no in-interface=pppoe-out2 new-connection-mark=to-isp2c passthrough=yes
Следующая пара правил нужна если только необходимо ходить на внешние ресурсы строго через определенного провайдера. Например на локальные ресурсы, доступ на которые возможен только из «домашней» сети провайдера. Таким образом, к ресурсам Эр-Телеком подключаемся через Эр-Телеком, к Ростелеком через Ростелеком.
/ip firewall mangle add action=mark-routing chain=prerouting comment="to dom.ru" connection-state=new disabled=no dst-address=!94.144.177.177 dst-address-list=domnet \ new-routing-mark=to-isp1 passthrough=yes src-address=192.168.1.0/24 add action=mark-routing chain=prerouting comment="to rtk" connection-state=new disabled=no dst-address=!85.237.51.51 dst-address-list=rtknet \ new-routing-mark=to-isp2 passthrough=yes src-address=192.168.1.0/24
Для этих правил следует предварительно создать списки ip-адресов domnet и rtknet. Например так:
/ip firewall address-list add list=domnet address=94.181.128.0/18 disabled=no add list=rtknet address=85.237.0.0/16 disabled=no
Последняя пара правил направляет ответы на шлюз того провайдера которому принадлежат соединения:
/ip firewall mangle add action=mark-routing chain=prerouting connection-mark=to-isp1c disabled=no new-routing-mark=to-isp1 passthrough=yes src-address=192.168.1.0/24 add action=mark-routing chain=prerouting connection-mark=to-isp2c disabled=no new-routing-mark=to-isp2 passthrough=yes src-address=192.168.1.0/24
Следует заметить, что вышеприведенная заметка никоим образом не претендует на пошаговую инструкцию по настройке ROS. Здесь описан лишь частный случай применения ее возможностей. Нужно помнить, что большинство правил маршрутизации в данной заметке работают полагаясь на connection tracking т.е. Механизм определения состояний iptables. И от правильной настройки conntrack зависит будет работать описанная выше конфигурация или нет.
Вообще маршрутизаторы Mikrotik не позиционируются производителем как устройства для конечного пользователя. И для настройки маршрутизации необходимы знания сетей вообще и iptables в частности. Поэтому для более полного понимания принципов работы привожу несколько полезных ссылок:
Официальное руководство по RouterOS
Тема по RouterOS на форуме ixbt.com
Руководство по Iptables
Неплохо, подмечено много актуальных тонкостей в посте. Актуально написано!
Задача почти один в один.. делают все как тут написанно.. и ничего не выходит.. не работает роутинг одновременно на дувух провайдеров по виртуальным именам.. если ставишь галочку add default route (в ppoe) то работает по тому прову который первый успел подрубится( если руками вместо имен в pppoe-out1 и pppoe-out2 вписываешь то что дает в автомате при автоматическом создании маршрута то кое как что то начинает работать но до первой перезагрузки или дисконекта провайдера. Плиз хелп
А по одному работает?
Да при отключении одного из ppoe другой нормально работает
Не видя всех настроек, сложно что-то прокомментировать.
Явно где-то не маркируется и пакеты идут не туда. Conntrack работает?
Как выглядит цепочка forward?
Можно попросить Вас платно настроить это дело? У самого не получилось.
Скайп Gamai.Ru, drdeft@gmail.com
Написал бы здесь что именно не получается, попробовали бы вместе разобраться.
Уважаемый isn, воспользовался Вашей инструкцией, все прекрасно работает спасибо Вам большое! Подскажите есть ли возможность в этой схеме организовать автоматическое переключение каналов при его падении? Так как микротик проверяет доступность шлюзов, а не самого интернета и при отсутствии пинга продолжает отправлять запросы на активный интерфейс.
Т.е. соединение активно, а дальше шлюза интернета нет?
Очевидно придется писать скрипты, чтобы динамически менять правила маршрутизации. Сам я такого не делал, поэтому вряд ли подскажу.
Совершенно верно! А я так надеялся(, может попробуете написать скрип именно под Вашу схему за разумное вознаграждение)?
Доходчивая статья, автору респект и главное уважуха ))
Добрый день! Очень полезная для меня статья! Подскажите, пожалуйста, по какому принципу будут использоваться провайдеры? Одна сессия в один, другая в другой? Или на уровне пакетов??
Спасибо.
На уровне соединений.
Добры день, две локальной сетки ,(одна локальная компы другая wifi сеть ) у меня пакеты маркируются но не уходят по второму каналу , хочу wifi пустить по второму каналу не идет или ЕСЛИ ИСПОЛЬзовать ip routes rules ping идет на внешние ip по второму каналу через трасроут видно но когда адрес вбиваешь ни пинг не идет не трасроут, днс на микротике прописан можете посоветовать чтонибудь заранее бладгодарен)
Вопрос плохо понял, если честно. Интернет-канала два и/или локальных подсетей тоже две?
канала два надо опредереленные ip роутить через второй канал локальной сети