Комментарии

Галерея

Опрос

Из каких стран идет больше всего спама, попыток взлома на ваши серверы?:

Mikrotik и два провайдера

Аватар пользователя isn

Понадобилось организовать работу с двумя подключениями к интернету одновременно. Один провайдер Эр-Телеком, второй – Ростелеком. Оба подключаются по 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

Неплохо, подмечено много актуальных тонкостей в посте. Актуально написано!

Аватар пользователя Zero
Спасибо! Толково.

Задача почти один в один.. делают все как тут написанно.. и ничего не выходит.. не работает роутинг одновременно на дувух провайдеров по виртуальным именам.. если ставишь галочку add default route (в ppoe) то работает по тому прову который первый успел подрубится( если руками вместо имен в pppoe-out1 и pppoe-out2 вписываешь то что дает в автомате при автоматическом создании маршрута то кое как что то начинает работать но до первой перезагрузки или дисконекта провайдера. Плиз хелп

Аватар пользователя isn

А по одному работает?

Да при отключении одного из ppoe другой нормально работает

Аватар пользователя isn

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

Цитата:
Да при отключении одного из ppoe другой нормально работает

Явно где-то не маркируется и пакеты идут не туда. Conntrack работает?
Как выглядит цепочка forward?

Можно попросить Вас платно настроить это дело? У самого не получилось.
Скайп Gamai.Ru, drdeft@gmail.com

Аватар пользователя isn

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

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

Аватар пользователя isn
turiste:
Подскажите есть ли возможность в этой схеме организовать автоматическое переключение каналов при его падении?

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

Совершенно верно! А я так надеялся(, может попробуете написать скрип именно под Вашу схему за разумное вознаграждение)?

Доходчивая статья, автору респект и главное уважуха ))

Добрый день! Очень полезная для меня статья! Подскажите, пожалуйста, по какому принципу будут использоваться провайдеры? Одна сессия в один, другая в другой? Или на уровне пакетов??
Спасибо.

Аватар пользователя isn
Anonymous:
Подскажите, пожалуйста, по какому принципу будут использоваться провайдеры? Одна сессия в один, другая в другой? Или на уровне пакетов??

На уровне соединений.

Добры день, две локальной сетки ,(одна локальная компы другая wifi сеть ) у меня пакеты маркируются но не уходят по второму каналу , хочу wifi пустить по второму каналу не идет или ЕСЛИ ИСПОЛЬзовать ip routes rules ping идет на внешние ip по второму каналу через трасроут видно но когда адрес вбиваешь ни пинг не идет не трасроут, днс на микротике прописан можете посоветовать чтонибудь заранее бладгодарен)

Аватар пользователя isn

Вопрос плохо понял, если честно. Интернет-канала два и/или локальных подсетей тоже две?

канала два надо опредереленные ip роутить через второй канал локальной сети

Настроил согласно инструкции.
Делаю:
/ip firewall connection print where connection-mark=to-sib-c
/ip firewall connection print where connection-mark=to-mega-c

На первом стопка соединений, на втром пусто.

Виноват.

Добавил src-address в /ip firewall nat и /ip firewall mangle. Теперь соединений поровну.

Теперь появилась другая проблема. Маршрутизатор не резолвит DNS для клиентов. Когда отключаешь один из pppoe интерфейсов, то всё нормально. Когда оба работают - нет. Хотя пинг по IP-адресу проходит нормально.

Хотелось бы узнать, решили проблему или нет, а то у нас тоже самое

а почему не прописать статику гугловскую?

вот спасибо!!! работает! осталось разобраться в ньюансах.

Отправить комментарий