Для решения задачи будем использовать маршрутизатор, настроенный на базе RouterOS. В данном примере MikroTik rb951ui (5-портовый). В порт №1 соответственно будет подключен провайдер «1» (ISP1) по L2TP. Во второй порт провайдер «2» (ISP2) со StaticIP. Порты №3, №4, №5 будут служить для подключения клиентов сети. IP-адреса в локальной сети будут раздаваться по DHCP. О работоспособности первого или второго канала будем судить по доступности IP-адреса. К примеру, возьмем DNS google.com, вероятность отказа которого очень мала.
Последовательность действий. Подключаем маршрутизатор к порту №3 и соответственно LAN интерфейсу ПК. Для конфигурации RouterOS будет использоваться утилита winbox. Заходим по MAC-адресу и авторизуемся. Видим интерфейс конфигурации маршрутизатора. (Рис. 1)
Рис. 1. Интерфейс конфигурации RouterOS
Первое, что мы делаем – настраиваем интерфейсы провайдера «1» и провайдера «2» Рис.2, а так же настраиваем LAN для портов 3, 4 и 5.
Рис. 2. Настройка провайдера «1» и провайдера «2»
В данном случае Интерфейс-1 принадлежит провайдеру «1» (ISP1 – имя для удобства) Интерфейс-2 принадлежит провайдеру «2» (ISP2). Для организации LAN переходим в пункт меню «Bridge» и добавляем интерфейс c именем LAN. (Рис.3).
Рис. 3. Организация LAN
Указывает порты, которые будут относиться к внутренней сети (Рис. 4)
Рис. 4. Добавление портов в LAN
Теперь необходимо добавить IP-адреса провайдеров, а так же указать IP-адрес шлюза нашей локальной сети (Рис. 5).
Описание: Первое, что мы делаем, добавляем шлюз локальной сети (цифры 4, 5). Интерфейс указываем LAN. Второе – добавляем статический адрес второго провайдера (цифры 6, 7)
Рис. 5. Добавление адресов для интерфейсов
Так как организация подключения с первым провайдером осуществляется по L2TP необходимо добавить L2TP-клиента (Рис. 6)
Замечание: Добавляем L2TP-client (Цифра 2). Указываем соответствующие параметры во вкладке Dial-out, а именно адрес сервера, логин и пароль которые выданы первым провайдером (цифры 4, 5 и 6).
Рис. 6. Добавление L2TP-клиента
После добавления клиента во вкладке status получим соединение. (Рис. 7)
Рис. 7. Статус L2TP-соединения
Теперь займемся организацией DHCP-сервера для раздачи адресов нашим клиентам внутренней сети. Первое что сделаем, создадим pool выдаваемых адресов (Рис. 8), а затем настроим сам DHCP-сервер. (Рис 9).
Рис. 8. Создание pool’а выдаваемых адресов
Рис. 9. Добавление и настройка DHCP-сервера
Описание DHCP-сервера: Добавляем сервер с именем (server1) к интерфейсу внутренней сети LAN c пулом адресов который создавали ранее. В network указываем, какие параметры передавать серверу клиентам.
Теперь нам необходимо добавить статические маршруты, так как всё взаимодействие между сетями осуществляется в соответствии с таблицей маршрутизации. Ее управление в RouterOS осуществляется в меню «Routes». Адресация с локальной сетью и с внутренними сетями провайдеров была добавлена динамически. Осталось добавить маршруты в интернет (на адрес 0.0.0.0/0) через шлюзы провайдеров. (Рис. 10).
Рис. 10. Добавление статических маршрутов
Далее, необходимо организовать переключение каналов в случае недоступности 1 канала. В ОС роутера есть встроенная утилита «Netwatch», которая позволяет отслеживать состояние хостов в сети посредством отправки ICMP-запросов (ping) и выполнять какие-либо действия на основе их доступности. Мы будем отслеживать IP-адрес 8.8.4.4 через первый канал, и в случае его недоступности переключать маршруты на работу по второму.
Создаем новый «Netwatch host», в графе «Host» указываем отслеживаемый IP-адрес, а в «Interval» — частоту осуществляемых проверок. (Рис. 11).
Рис. 11. Настройка переключения каналов
И в заключение, в закладке Up (цифра 5) необходимо прописать следующее правило:
#включаем маршрут с комментарием «ISP1» (основной канал)
/ip route set [find comment=«ISP1»] disabled=no
#отключаем маршрут с комментарием «ISP2»(резервный канал)
/ip route set [find comment=«ISP2»] disabled=yes
Во вкладке Down прописываем следующее правило:
#отключаем маршрут с комментарием «ISP1» (резервный канал)
/ip route set [find comment=«ISP1»] disabled=yes
#включаем маршрут с комментарием «ISP2» (основной канал)
/ip route set [find comment=«ISP2»] disabled=no
Настройка правил для проходящего трафика
Используя встроенный файервол можно управлять абсолютно всем трафиком, нам необходимо запретить пинг на ISP2. Для это в окне терминала пропишем следующее:
#одобряем использование протокола icmp
ip firewall filter add chain=input comment=«Permit icmp»
#ограничиваем ping 8.8.4.4 через ISP2
ip firewall filter add action=drop chain=output comment=«Deny 8.8.4.4 to reserved internet-channel» dst-address=8.8.4.4 out-interface=«ether2 — internet II (reserve)» protocol=«icmp»
Материал является вводным и предназначен для знакомства с вопросом управления сетью с двумя провайдерами.
Комментарии (58)
AcidVenom
21.08.2015 15:19Такое ощущение, что не хватает целого куска статьи.
CANMOS
21.08.2015 16:47Да, вы правы, мы добавили недостающую часть. Большое спасибо за внимательность.
viqking
22.08.2015 04:54+6Позор за эту статью! Эта статья не подходит по хабрахабр, потому что показана обычная дефолтная настройка, плюс на хабре уже по 10 раз описывалось, в деталях. И настройка резервного канала делается через distance плюс скрипт.
kin63camapa
23.08.2015 18:36Через дистанс уже хлебнул проблем, провайдера прекосило шлюз пингуется а за ним мира нет, здрасте приехали. А благодаря статье я открыл для себя новый инструмент. И вообще если для Вас подобная настройка это тривиал, то для человека впервые взявшего микротик могут быть некоторые вещи не очевидны, наличие подобной статьи порой заменяет огромную вики да ещё и время экономит.
grossws
23.08.2015 23:40Для этого случая на сайте микротика есть подробные руководства по разным вариантам настройки.
viqking
24.08.2015 19:38+11. Статьи про настройку микротика уже были на хабрахабр.
2. Гугл никто не отменял.
CANMOS
26.08.2015 12:02Верно, но мы хотим подчеркнуть особый момент настройки МикроТик — работу с двумя провайдерами. Будем публиковать развитие этой темы — следите за публикациями.
POPSuL
27.08.2015 16:23А напишите пожалуйста о том, как сделать правильно раскидывание трафика по двум аплинкам, а именно:
* простая round-robin балансировка;
* балансировка с возможностью установки некого трешхолда (чтобы весь трафик бегал через основной интерфейс, но когда поток достигает битрейта в 70% пропускной способности аплинка — задействовать второй);
* как сделать балансировку с использованием mark-connection и QoS (queue) одновременно;
Ну и естественно, хочется увидеть реализацию этого с возможностью завернуть принудительно определенный трафик в нужный аплинк, и в случае пропадания алпинка сделать так, чтобы все продолжило работать (хоть и с потерей имеющихся коннектов) :)
Ramzeska
22.08.2015 05:54Я делал то же самое, только настраивал еще распаралеливание коннектов — через ip firewall => mangle помечал роутинги и распределял по двум провайдерам. В итоге у меня в торрентах удваивалась скорость закачки. Ну и так же через netwatch скрипт прозрачно переключал провайдеры и высылал смс-уведомление если кто-то упал. Более того, у меня два провайдера из одной двойной розетки в коридоре объединялись в одну витуху и разъединялись около микротика :) Могу подробно расписать как это делается, если интересно )
rtzra
22.08.2015 07:32Если дествительно «подробно» — то очень интересно. А то в последнее время народ откуда-то копипастит кусками простейшие вещи.
alexkuzko
22.08.2015 08:44Распаривать кабель и обратно — про это можно не писать ;)
А вот про распределение через маркроуты — напишите, т.к. если это не классический микротиковский PCC, и на самом деле скорость удваивается — то будет интересно. В итоге у вас получается что вы (для торрентов) держите два соединения с одним и тем же пиром, но через разных провайдеров? Или все-таки на одного пира одно соединение?
P.S. Вот этим и прекрасен микротик — его операционка многогранна (порезанный, но линукс) — никогда не знаешь что еще оказывается можно реализовать из хотелок!
l0ser140
21.08.2015 15:22А как в таком случае будет происходить автоматическое переключение обратно, при восстановлении связи у первого провайдера?
По-моему никак.
Я для этой цели использую этот скрипт:
failover#Main interface name
:global MainIf ether1_onlime
#Reserve interface name
:global RsrvIf ether2_qwerty
:local PingCount 3
#Ping Google DNS
:local PingTarget1 8.8.8.8
#Ping Yandex DNS
:local PingTarget2 77.88.8.8
#Check main internet connection
:local MainIfInetOk false;
:local PingResult1 [/ping $PingTarget1 count=$PingCount interface=$MainIf]
:local PingResult2 [/ping $PingTarget2 count=$PingCount interface=$MainIf]
:set MainIfInetOk (($PingResult1 + $PingResult2) >= ($PingCount))
#Check reserved internet connection
:local RsrvIfInetOk false;
:local PingResult1 [/ping $PingTarget1 count=$PingCount interface=$RsrvIf]
:local PingResult2 [/ping $PingTarget2 count=$PingCount interface=$RsrvIf]
:set RsrvIfInetOk (($PingResult1 + $PingResult2) >= ($PingCount))
:put «MainIfInetOk=$MainIfInetOk»
:put «RsrvIfInetOk=$RsrvIfInetOk»
if (!$MainIfInetOk) do={
/log error «Main internet connection error»
}
if (!$RsrvIfInetOk) do={
/log error «Reserve internet connection error»
}
:local MainGWDistance [/ip route get [find comment=«Main»] distance]
:local RsrvGWDistance [/ip route get [find comment=«Reserve»] distance]
:put «MainGWDistance=$MainGWDistance»
:put «RsrvGWDistance=$RsrvGWDistance»
#SetUp gateways
if ($MainIfInetOk && ($MainGWDistance >= $RsrvGWDistance)) do={
/ip route set [find comment=«Main»] distance=2
/ip route set [find comment=«Reserve»] distance=3
}
if (!$MainIfInetOk && $RsrvIfInetOk && ($MainGWDistance <= $RsrvGWDistance)) do={
/ip route set [find comment=«Main»] distance=3
/ip route set [find comment=«Reserve»] distance=2
}AcidVenom
21.08.2015 15:28В такой конфигурации соединения будут «мигать».
8.8.4.4 отвалился на ISP1, переключение на ISP2
8.8.4.4 доступен на ISP2, значит снова переключение на ISP1
И так до бесконечности.l0ser140
21.08.2015 15:29Да, как раз только что подумал, что решение из статьи вообще не будет работать.
TimsTims
21.08.2015 16:14+3А не проще завести два route до адреса 0.0.0.0/0, с разными distance? Там же есть опция check-gateway.
Единственное когда не поможет — когда поломка Где-то на магистрали провайдера…
CANMOS
21.08.2015 16:36Да ребят, согласен, добавлю правило в управление трафиком чтобы запретить ping 8.8.4.4 через isp_2. Спасибо за комментарии. Посмотрел в готовой конфигурации есть.
AcidVenom
21.08.2015 16:59+2Даже с такой конфой скрипт сработает 1 раз — при отвале ISP1, следующей проверки уже не произойдет.
Предлагаю вам вернуть статью в черновики и переработать.CANMOS
21.08.2015 17:49Да, сделали update — в конце статьи появилась информация под заголовком «Настройка правил для проходящего трафика».
l0ser140
21.08.2015 20:32У вас один раз переключится роутинг на резервный интерфейс с запрещенным пингом и больше никогда не переключится назад.
1) вы весь траффик завернули через интерфейс с запрещенным пингом
2) вы никак не проверяете доступность хоста через первый интерфейс
alexkuzko
21.08.2015 21:25На самом деле бросайте дурное! Netwatch крайне нестабильная вещь для переключения между провайдерами. Race condition словить на раз-два! Я делал немного иначе (задача была похожая), когда шлюзом у меня был первый внешний (!) IP адрес, а маршрут на него был через первого же провайдера, и когда доступность нарушалась, то переключалось на второго — сразу же, встроенными средствами. А второй провайдер был с меньшей дистанцией и тут же подхватывал трафик. Как только первый провайдер оживал, переключалось назад. Это схема резервирования в одну сторону, хорошо подходит для ассиметричных каналов (резерв это что-то вроде ADSL), неидеальна, зато весьма стабильна.
Пример такого маршрута (только то, про что я написал, у меня много еще разных маршрутов, включая маркированные для корректного распознавания входящих соединений):
Кусок конфига, двойные кавычки должны быть обычными, не фигурными!add check-gateway=ping comment=«mts remote route via ether01-gateway, used the second address» distance=1 dst-address=87.252.243.193/32 gateway=192.168.0.10 scope=10 target-scope=30
add comment=«mts dns» distance=2 dst-address=87.252.243.193/32 type=unreachable
add check-gateway=ping comment=«mts ip gateway» distance=3 gateway=87.252.243.193 scope=10 target-scope=30
add check-gateway=arp comment=«byfly pppoe gateway» distance=4 gateway=pppoe-byflymax_rip
21.08.2015 17:50+3+ заменить jpg на png.
Лучше использовать routing-mark geektimes.ru/post/186284
Таким образом вы получите постоянно работающие WAN и можете настраивать логику деления их между собой, оба интерфейса будут доступны из мира одновременно. В вашем же варианте, если работает первый канал, то на второй канал не пробиться.
achekalin
21.08.2015 18:21+3В вашем случае Вам не надо 3 порта включать в бридж LAN — этим Вы только ограничиваете скорость передачи, поскольку коммутация будет идти через CPU.
Уберите их из бриджа, для eth4 и eth5 укажите мастер-портом порт eth3, и его уже включайте в бридж LAN. В этот же бридж включайте и wifi, если Вы его на бордере используете.
Если бы не wifi (который иначе никак с eth-портом в единую группу не объединить), то можно было бы IP вешать на eth3, и вообще не городить бридж, а wifi, конечно, выключить. Если же wifi нужен, то вешаем IP на бридж.
Да, не забываем отключить лишние пакеты (в System -> Pakages) — почти наверняка MPLS Вам не нужно, и Routing также не нужен (IP -> Routes от него не зависит). Заодно не забываем нажать кнопку Check for Updates в этом же окне с пакетами. Нажали, далее жмем Update and Reboot, дожидаемся перезагрузки, заходим еще раз, затем идем в System -> Routerboard, и там, если текущая и доступная версии firmware отличаются, также жмем Upgrade, а потом выбираем руками System -> Reboot.
Как-то так, для начала.
AbyssMoon
21.08.2015 19:08-4Основная проблема микротика это невозможность его использовать в более менее нормальном энтерпрайзе с двумя провайдерами с белыми ип, ибо он не умеет натить сразу с двух внешних интерфейсов внутрь сети.
Или я не прав? Всем нагом бились и официальным форумом, сделать никто у себя не смог…l0ser140
21.08.2015 20:24+2Умеет.
Использую микротик как раз в такой конфигурации.
В интернерах, кстати, полно статей на этот счет. Вот мой конфиг:
Скрытый текст/ip firewall mangle
#Маркируем входящие соединения в соответствии с интерфейсами
add action=mark-connection chain=input in-interface=ether1_onlime \
new-connection-mark=conn_Main
add action=mark-connection chain=input in-interface=ether2_qwerty \
new-connection-mark=conn_Reserve
add action=mark-connection chain=forward in-interface=ether1_onlime \
new-connection-mark=conn_MainFW
add action=mark-connection chain=forward in-interface=ether2_qwerty \
new-connection-mark=conn_ReserveFW
#Маркируем пакеты в соответствии с соединениями
add action=mark-routing chain=output connection-mark=conn_Main \
new-routing-mark=rout_Main passthrough=no
add action=mark-routing chain=output connection-mark=conn_Reserve \
new-routing-mark=rout_Reserve passthrough=no
add action=mark-routing chain=prerouting connection-mark=conn_MainFW \
new-routing-mark=rout_Main passthrough=no src-address=192.168.100.0/24
add action=mark-routing chain=prerouting connection-mark=conn_ReserveFW \
new-routing-mark=rout_Reserve passthrough=no src-address=192.168.100.0/24
#Роутим в соответствии с маркерами
/ip route
add distance=1 gateway=77.37.236.1 routing-mark=rout_Main
add distance=1 gateway=79.165.208.1 routing-mark=rout_ReserveAbyssMoon
22.08.2015 05:38Все в точности как у вас и у меня и проброс портов сразу с двух белых ип не работает, бился пол года, у вас работает одновременно проброс с двух белых ип куда-нибудь внутрь? Так то по белым ип сам микротик доступен и у меня.
l0ser140
22.08.2015 15:39Да, работает.
Может вы всё таки забыли маркировать форвард соединения?
Потому что input-output относится только к траффику до роутера.
k0ldbl00d
21.08.2015 21:00Какой-то у вас неправильный наг. Задача-то элементарная.
AbyssMoon
22.08.2015 05:49nag обсуждение
Задача то элементарная, согласен, но не работает это на микротике не у меня одного, на linux руками это сделать не проблема, а на микротике так и не смог победить…k0ldbl00d
22.08.2015 10:41Значит что-то не так с самим роутером (встречаются такие «странные» экземпляры). У меня несколько таких конфигураций в работе — никогда не сталкивался с описанными проблемами, всё работает как часы.
nehaev
21.08.2015 19:49Было бы весьма полезно увидеть то же самое в виде консольных команд. Не все настраивают MikroTik из винды, и не все любят протыкивать менюшки и диалоговые окна, глядя на скриншоты.
IharBury
21.08.2015 20:34ZyXEL Keenetic Giga II поддерживает такое из коробки.
Revertis
21.08.2015 20:48Плюсую. В статье описаны ужасные сложности, а в Гиге всё просто до удивления.
Сам пару дней назад настроил два соединения с разными настройками в несколько кликов никогда перед этим такого не делав.
Немного оффтопа: недавно был в шоке от того, что у Акадо в Москве на некоторых тарифах с NAT запрещены запросы на сторонние DNS-сервера.alexkuzko
21.08.2015 21:09+4Просто микротик это устройство уровнем выше обычных, пускай даже модных и глянцевых (и местами с интересными аппаратными модулями), но мыльниц. И да, некоторые вещи делаются неочевидно, но это не сложно, как и не сложна таблица умножения для того, кто понимает ее суть.
P.S. Нет, я не гуру микротика и не сетевик, но после того как разобрался в основах, теперь многое видится в ином свете.INSTE
23.08.2015 17:01Как вы отличаете мыльницы от необычных устройств, если они даже на чипах одинаковых сделаны? )
alexkuzko
23.08.2015 17:13+1Софт. Плюс, как вы должны знать, чипсет накладывает ограничения, но не является гарантом результата. От обвязки зависит получится ли приблизиться к границам возможностей или нет.
UP: Если кто не в курсе, Mikrotik начинал с разработки софта (ROS), и только позже начал еще и выпуск железа со встроенной ROS, так что можно (и так много кто делает) его использовать на x86 железках.
max_rip
21.08.2015 21:25+3Да но он не умеет из коробки pptp сервер, eoip туннели ) и всякие другие вкусности, которые очень хорошо используются в малом и среднем бизнесе. Да и работает он стабильно.
На 750G живет: c 7 вланов, 7 бриджей, на него подключаются 5 pptp клиентов с eoip туннелями. При всем этом он натит порядка 270 (выданные ip за сутки) клиентов (корп сеть + вайфай свободный). И при всем этом, жрет 10-12% cpu и то из-за того, что видеокамеры фуллХД потока находятся в другом влане(временное решение пока идет ремонт) и через него постоянно роутится этот трафик.
И все это при том, что стоит оба девайса одинаково, могу сказать, что ваш выигрывает только в простоте настройки простых вещей из веб интерфейса, + антеннами для вайфая. И я не уверен что ZyXEL потянет столько клиентов )INSTE
23.08.2015 17:00PPTP сервер умеет уже несколько лет (NDMS 2, компонент VPN Server), очень скоро подтянется IPsec в разных видах.
EoIP кстати реализовать элементарно — было бы желание, только запросов от клиентов нет.
DarkDemon
23.08.2015 12:33OpenWrt c пакетом Multiwan из Luci интерфейса в несколько кликов или скрипт.
alexkuzko
21.08.2015 21:05+1Автор, а вы не забыли про то что с включенным Connection Tracking текущие установленные соединения так и останутся висеть на первом провайдере (ведь он не упал, это вы маршруты перекинули для новых соединений)? И хорошо было бы еще и перезапустить CT путем отключение, выжидания и включения снова.
Вообще, я такой велосипед не первый раз вижу, сам намучался с различными вариантами, но ожидал от статьи глубокого анализа, а не очередной копипасты очевидных вещей…
yahan
22.08.2015 18:23+1Скучная статья про то как кто-то настраивал роутер. Тут не про конфигурацию проверенную временем. Автору советую прочитать это:
http://wiki.mikrotik.com/wiki/Advanced_Routing_Failover_without_Scripting
Как разберетесь можете написать сюда статью. Читать будет интересней )))CANMOS
24.08.2015 08:48Да все верно пишешь. Тут приведен лишь пример как это можно реализовать, при дальнейшем развитии инфраструктуры сети необходимо править конфиг, а возможно даже переделывать сам алгоритм. К примеру как описано выше можно для всего этого дела использовать скрипт, но тут встаёт вопрос а потянет ли железо микротика, либо придётся ставить что то другое.
l0ser140
24.08.2015 17:09+1Еще раз напишу, а то вы видимо не заметили.
По приведённому в статье примеру микротик переключится на резервный канал и больше никогда самостоятельно не переключится назад.
Решение в корне неверное и не рабочее.
s_shablovsky
23.08.2015 13:48Каждый раз читаю и приходит мысль: а что, Peplink, f5, Juniper WX/WXC уже не торт? Или так хочется в гамаке этим заниматься, вместо чтобы поставить в 30 мин настроить и забыть? И ещё скажите, что у этого «тика» 2 power supply есть… Блин, извините…
kin63camapa
23.08.2015 18:46описанное в статье настраивается за означенные 30 минут. Однако со временем конфигурация может стать сложнее например контора разделилась на 2 подсети, появился третий провайдер, понадобилась балансировка и тд, в случае с с микротиком настройки добавляются легко и непринужденно прям в описанный конфиг в случае с некоторыми нат машинками где все придумано за нас можно наткнуться на полную замену железки по той причине что производитель упростил настройку и не продумал нетривиальные конфигурации. уже не раз сталкивался с ситуацией когда у клиента дорогущий роутер который может настроить уборщица, но который не умеет элементарных вещей вроде поднять ещё 1 впн кроме как до провайдера или сделать гостевую сетку в другом диапазоне адресов.
kin63camapa
23.08.2015 18:51кстати да этот микротик умеет питаться по пое и от родного блока одновременно, отключение одного из питаний даже не приводит к перезагрузке, и да для того чтобы заменить блок питания если врог он нагнулся ненадо пол города объезжать в стандартный разьем можно воткнуть всечто угодно от 9 до 30 вольт
CANMOS
24.08.2015 08:45Согласен полностью. Про балансировку это уже отдельная история т.к. протоколы которые требуют постоянного подключения будут работать только на одном канале 50 на 50 сделать не получиться.
kin63camapa
26.08.2015 18:14недавно делал, суть примерно следующая: за натом сервак на сервак сыпятся запросы запросы с 2 разных провайдеров, метим сессию, на основе этих меток метим роуты и пакеты, с какого провайдера установили с нами соединение в шлюз того все пакеты с этого соединения и насыпаются, с трафиком инициаторы которого в интарсети, конечно так не получится, для них шлюзы по умолчанию с дистанциями.
alex222222
25.08.2015 14:58Пусть выглядит как самореклама, но
все проблемы тут давно решены, работает пол года идеально.
Единственное, чтобы адаптировать под свой случай — нужно разобраться по-честному.CANMOS
31.08.2015 10:49Мы не говорим, что представляем единственно возможный вариант объединения двух провайдеров в одной сети. Мы показываем, как это можно сделать на оборудовании MikroTik, Безусловно, благодарны за добавление и расширение материала новыми примерами.
atd
Прикольно. А я вместо разламывания дефолтной локалки воткнул usb-сетевуху для второго провайдера.