Всем привет! Статическая маршрутизация – это по сути специальный выделенный путь, по которому должен пройти пакет информации из пункта А в пункт Б. Напомню, что у нас в сети чаще всего встречаются два устройства: маршрутизаторы и коммутаторы. Напомню, что коммутаторы работают на канальном уровне, а маршрутизаторе на сетевом. Далее я коротко расскажу, про Static Route и как это настроить на домашнем устройстве.
Содержание
- Коротко про маршрутизацию
- ШАГ 1: Заходим в настройки роутера
- ШАГ 2: Настройка
- TP-Link
- D-Link
- ASUS
- ZyXEL Keenetic
- Netis
- Tenda
- Задать вопрос автору статьи
Коротко про маршрутизацию
Маршрутизатор, исходя из названия, имеет у себя таблицу маршрутизации, а коммутатор коммутации. Все логично, не правда ли. Но есть небольшая проблема коммутации. Представим, что у нас есть две сети по 250 машин и между ними стоят 2 свича.
Если вы помните в таблице коммутации содержатся MAC-адреса. Да они уникальны, поэтому для работы сети нужно, чтобы каждый свич знал, как минимум 500 таких адресов, что не так мало. И тут встает проблема масштабируемости сети, при добавлении новых машин.
А что если установить вместо коммутаторов маршрутизаторы. В итоге у нас есть две сети:
- 192.168.1.0/24
- 192.168.2.0./24
И чтобы пакету добраться из одной сети в другую, нужна одна запись в таблице маршрутизации, а именно о соседнем роутере, который уже в свою очередь знает компьютеры «из своего района». Это и удобно, и экономично в плане хранения нужной информации, так как не нужно хранить таблицу из MAC-адресов всех участников сети.
СОВЕТ! Для большей картины понимания самой темы, советую почитать дополнительные материалы про то, что такое маршрутизатор, коммутатор и про модель OSI.
И тут у нас появляются два понятия:
- Динамическая маршрутизация – когда при отправке информации через маршрутизатор он в свою очередь сообщает доступность других соседних маршрутизаторов или сетей, и куда можно отправить пакет. Если говорить грубо, то информация идет тем путем, как ему показывают роутеры.
- Статическая маршрутизация – пакет информации идет определенным путем. Данный маршрут можно прописать вручную.
Далее я расскажу, как вводить эти статические маршруты для использования их в домашних роутерах.
Смотрим на картинку выше. У нас есть второй роутер (router 2), который имеет доступ к интернету (он же является основным шлюзом). У нас есть компьютер (PC), который подключен сначала к коммутатору. Коммутатор подключен к двум роутерам.
Проблема в том, что ПК должен иметь доступ к серверу (172.30.30.1), но при запросе на router 2, у него в таблице маршрутизации нет данных об этих серверах. Теперь давайте попробуем вписать эти настройки в маршрутизатор.
ШАГ 1: Заходим в настройки роутера
Вот мы и перешли непосредственно к настройке статической маршрутизации. Подключаемся к сети интернет-центра через кабель или по Wi-Fi. Далее нужно ввести DNS или IP-адрес роутера в адресную строку любого браузера. Настройку мы будем делать через Web-интерфейс. Подсказка: адрес можно подсмотреть на этикетке под корпусом аппарата. Чаще всего используют адреса:
- 192.168.1.1
- 192.168.0.1
Если вы ранее его настраивали, вводим логин и пароль – их также можно подсмотреть на той же самой бумажке. Чаще всего используют комбинации:
- admin – admin
- admin – *Пустая строка*
Если есть проблемы со входом в роутер, то смотрим инструкцию тут.
ШАГ 2: Настройка
Напомню, что далее я буду рассматривать конкретный пример, который мы разобрали выше. И на основе этого примера буду вводить свои данные. У вас статические маршруты могут быть другие. Вот какие данные нужно будет ввести (смотрим на схему подключения, чтобы вам было понятно):
- IP адрес назначения – у нас это IP нашего конкретного сервера, к которому мы хотим пробиться через наш 1-ый роутер (172.30.30.1).
- Маска подсети – указываем 255.255.255.0.
- Шлюз – это IP того роутера, который имеет доступ к серверу. В примере это 192.168.0.2 (Второй маршрутизатор).
- Интерфейс – в некоторых настройках нужно будет указывать еще и его. Если доступ к шлюзу идет через интернет, то указываем WAN. Если же вы подключены к нему через LAN порт (как в нашем примере), то указываем его.
Надеюсь я примерно объяснил, как именно статический маршрут нужно заполнять. Теперь приступим непосредственно к практике. Смотрите главу по своей модели.
TP-Link
Старая прошивка
Слева находим раздел «Дополнительные настройки маршрутизации», и в открывшемся списке нажимаем по пункту «Список статических маршрутов». Нажимаем по кнопке «Добавить».
Вписываем данные.
Новая прошивка
«Дополнительные настройки» – «Сеть» – «Расширенные настройки маршрутизации». Нажимаем по плюсику и вписываем нужную информацию.
D-Link
В классическом светлом интерфейсе нужно перейти в «Дополнительно» и нажать по «Маршрутизации».
В темной прошивке все делается также, только сначала нужно перейти в «Расширенные настройки».
Добавляем правило.
ASUS
Переходим в раздел «Локальная сеть», открываем вкладку «Маршруты» и вписываем наши данные. В конце не забудьте нажать на плюсик, правее таблички и нажать на кнопку «Применить».
ZyXEL Keenetic
Новая прошивка
Переходим на страницу «Маршрутизации» и нажимаем по кнопке добавления правила.
Теперь вводим данные:
- Тип маршрута – тут нужно указывать тот тип, который вам нужен. Если исходить из задачи, которую указал я, то мы указываем «Маршрут узла».
- Адрес сети назначения – указываем адрес сервера. В нашем случае это 30.30.1.
- Маска подсети – 255.255.255.0.
- Адрес шлюза – адрес роутера, который подключен к нашему серверу. 192.168.0.2.
- Интерфейс – указываем тот интерфейс, который мы будем использовать для связи. В нашем примере пакеты пойдут локально через LAN порт, поэтому указываем LAN.
Старая прошивка
Нажимаем по значку плакетки в самом низу и переходим на вкладку «Маршруты». Нажимаем по кнопке добавления и вводим нужные вам данные.
Добавление целого списка маршрутов
Кстати тут вы можете загрузить сразу целую таблицу маршрутизации. Для этого выбираем в том же разделе другую кнопку.
Файлик должен иметь расширение типа BAT. И иметь вид как на скрине ниже. Его спокойно можно создать в блокноте.
Вид достаточно простой:
route ADD IP-адрес назначения MASK указываем маску указываем адрес шлюза
Пример:
route ADD 172.30.30.1 MASK 255.255.255.0 192.168.0.2
ПРИМЕЧАНИЕ! Каждый новый адрес должен начинаться с новой строки, а после последнего указанного IP не должен стоять пробел.
Netis
Переходим в раздел «Advanced» (кнопкам в правом верхнем углу) – «Расширенные» – «Статический маршрут.» – вводим каждый пункт и нажимаем по кнопке «Добавить».
Tenda
Нужный нам пункт находится в разделе «Расширенные настройки».
Маршрутизация — процесс поиска оптимального пути для передачи пакетов в сетях TCP/IP. Любой устройство подключенное к сети IPv4 содержит процесс и таблицы маршрутизации.
Данная статья не является HOWTO, она описывает на примерах статическую маршрутизацию в RouterOS, я намеренно опускал остальные настройки (например srcnat для доступа в сеть интернет), поэтому для понимания материала требуется определенный уровень знания по сетям и RouterOS.
Коммутация и маршрутизация
Коммутация — процесс обмена пакетами в пределах одного Layer2 сегмента (Ethernet, ppp, …). Если устройство видит, что получатель пакета находится с ним в одной Ethernet подсети, оно узнает mac адрес по протоколу arp и передает пакет напрямую, минуя маршрутизатор. У ppp (point-to-point) соединения может быть только два участника и пакет всегда отправляется на один адрес 0xff.
Маршрутизация — процесс передачи пакетов между Layer2 сегментами. Если устройство хочет отправить пакет, получатель которого находится за пределами Ethernet сегмента, оно смотрит в свою таблицу маршрутизации и передает пакет шлюзу, который знает куда отправить пакет дальше (а может и не знает, изначальный отправитель пакета про это не осведомлен).
Проще всего рассматривать маршрутизатор, как устройство подключенное к двум или более Layer2 сегментам и способное передавать пакеты между ними определяя оптимальный маршрут по таблице маршрутизации.
Если вам все понятно или вы и так это знали, то читайте дальше. Остальным настоятельно рекомендую ознакомиться с маленькой, но очень емкой статьей.
Маршрутизация в RouterOS и PacketFlow
Практически весь функционал относящийся к статической маршрутизации находится в пакете system. Пакет routing добавляет поддержку алгоритмов динамической маршрутизации (RIP, OSPF, BGP, MME), Routing Filters и BFD.
Основное меню для настройки маршрутизации: [IP]->[Route]
. Сложные схемы могут потребовать предварительную маркировку пакетов маршрутной меткой в: [IP]->[Firewall]->[Mangle]
(цепочки PREROUTING
и OUTPUT
).
На PacketFlow можно выделить три места, где принимаются решения о маршрутизации IP пакетов:
- Маршрутизация пакетов поступивших на роутер. На данном этапе решается уйдет пакет локальному процессу или будет отправлен дальше в сеть. Транзитные пакеты получают Output Interface
- Маршрутизация локальных исходящих пакетов. Исходящие пакеты получают Output Interface
- Дополнительный этап маршрутизации для исходящих пакетов, позволяет изменить решение о маршрутизации в
[Output|Mangle]
- Путь пакета в блоках 1, 2 зависит от правил в
[IP]->[Route]
- Путь пакета в пунктах 1, 2 и 3 зависит от правил в
[IP]->[Route]->[Rules]
- На путь пакета в блоках 1, 3 можно повлиять используя
[IP]->[Firewall]->[Mangle]
RIB, FIB, Routing Cache
Routing Information Base
База в которой собираются маршруты от протоколов динамической маршрутизации, маршруты от ppp и dhcp, статические и подключенные (connected) маршруты. Данная база содержит все маршруты, за исключением отфильтрованных администратором.
Условно, можно считать что [IP]->[Route]
отображает RIB.
Forwarding Information Base
База в которой собираются наилучшие маршруты из RIB. Все маршруты в FIB являются активными и используются для пересылки пакетов. Если маршрут становится неактивным (отключен администратором (системой), или интерфейс через который должен отправляться пакет не активен) маршрут удаляется из FIB.
Для принятия решения о маршрутизации в таблице FIB используются следующие данные о IP пакете:
- Source Address
- Destination Address
- Source Interface
- Routing mark
- ToS (DSCP)
Попадая в FIB пакет проходит следующие стадии:
- Пакет предназначен локальному процессу роутера?
- Пакет попадает под системные или пользовательские правила PBR?
- Если да, то пакет отправляется в указанную таблицу маршрутизации
- Пакет отправляется в таблицу main
Условно, можно считать что [IP]->[Route Active=yes]
отображает FIB.
Routing Cache
Механизм кэширования маршрутов. Маршрутизатор запоминает куда были отправлены пакеты и если встречаются похожие (предположительно из одного соединения) пускает их по тому-же маршруту, без проверки в FIB. Кэш маршрутов периодически очищается.
Для администраторов RouterOS не сделали средств просмотра и управления Routing Cache, но при его можно отключить в [IP]->[Settings]
.
Данный механизм был удален из ядра linux 3.6, но в RouterOS до сих пор используется kernel 3.3.5, возможно Routing cahce — одна из причин.
Диалог добавления маршрута
[IP]->[Route]->[+]
- Подсеть для которой необходимо создать маршрут (по умолчанию: 0.0.0.0/0)
- IP шлюза или интерфейс на который будет отправлен пакет (может быть несколько, см. ниже ECMP)
- Проверка доступности шлюза
- Тип записи
- Дистанция (метрика) для маршрута
- Таблица маршрутизации
- IP для локальных исходящих пакетов через данный маршрут
- Про назначение Scope и Target Scope написано в конце статьи
Флаги маршрутов
- X — Маршрут отключен администратором (
disabled=yes
) - A — Маршрут используется для передачи пакетов
- D — Маршрут добавлен динамически (BGP, OSPF, RIP, MME, PPP, DHCP, Connected)
- C — Подсеть подключена непосредственно к маршрутизатору
- S — Статический маршрут
- r,b,o,m — Маршрут добавлен одним из протоколов динамической маршрутизации
- B,U,P — Фильтрующий маршрут (отбрасывает пакеты вместо передачи)
Что указывать в gateway: ip-адрес или интерфейс?
Система позволяет указывать и то, и другое, при этом не ругается и не дает подсказок, если вы что-то сделали неправильно.
IP адрес
Адрес шлюза должен быть доступен по Layer2. Для Ethernet это означает, что роутер должен иметь на одном из активных интерфейсов ip адрес из той же подсети, для ppp — что адрес gateway указан на одном из активных интерфейсов в качестве адреса подсети.
Если условие доступности по Layer2 не выполняется — маршрут считается неактивным и не попадает в FIB.
Интерфейс
Все сложнее и поведение маршрутизатора зависит от типа интерфейса:
- PPP (Async, PPTP, L2TP, SSTP, PPPoE, OpenVPN*) соединение предполагает наличие только двух участников и пакет всегда будет направлен шлюзу для передачи, если шлюз обнаружит, что получателем является он сам, то передаст пакет своему локальному процессу.
- Ethernet предполагает наличие множества участников и будет отправлять на интерфейс arp запросы с адресом получателя пакета, это ожидаемое и вполне нормальное поведение для connected маршрутов.
Но при попытке использовать интерфейс в качестве маршрута для удаленной подсети вы получите следующую ситуацию: маршрут активен, ping до шлюза проходит, но не доходят до получателя из указанной подсети. Если посмотрите на интерфейс через сниффер, то увидите arp запросы с адресами из удаленной подсети.Старайтесь указывать ip адрес в качестве gateway всегда когда это возможно. Исключение — connected маршруты (создаются автоматически) и PPP (Async, PPTP, L2TP, SSTP, PPPoE, OpenVPN*) интерфейсы.OpenVPN не содержит PPP заголовка, но можно использовать имя OpenVPN интерфейса для создания маршрута.
More Specific Route
Основное правило маршрутизации. Маршрут описывающий более маленькую подсеть (с наибольшей маской подсети) имеет больший приоритет при принятии решения о маршрутизации пакета. Положение записей в таблице маршрутизации не имеет отношения к выбору — основное правило More Specific.
Все маршруты из указанной схемы активны (находятся в FIB), т.к. указывают на различные подсети и не конфликтуют между собой.
Если один из шлюзов станет недоступным, связанный маршрут будет считаться неактивным (удален из FIB) и для пакетов будет производиться поиск из оставшихся маршрутов.
Маршруту с подсетью 0.0.0.0/0 иногда придают особое значение и называют «Маршрут по умолчанию» (Default Route) или «Шлюз последней надежды» (gateway of last resort). На самом деле в нем нет ничего магического и он просто включает все возможные адреса IPv4, но данные названия хорошо описывают его задачу — он указывает на шлюз, куда пересылать пакеты для которых нет других, более точных, маршрутов.
Максимально возможная маска подсети для IPv4 — /32, такой маршрут указывает на конкретный хост и может использоваться в таблице маршрутизации.
Понимание More Specific Route является фундаментальным для любых устройств работающих с TCP/IP.
Distance
Дистанции (или Метрики) необходимы для административной фильтрации маршрутов до одной подсети доступной через несколько шлюзов. Маршрут с меньшей метрикой считается приоритетным и попадет в FIB. Если маршрут с меньшей метрикой перестанет быть активным, то в FIB он будет заменен на маршрут с большей метрикой.
Если присутствует несколько маршрутов до одной подсети с одинаковой метрикой, маршрутизатор добавить в таблицу FIB только один из них, руководствуясь своей внутренней логикой.
Метрика может принимать значение от 0 до 255:
- 0 — Метрика для подключенных (connected) маршрутов. Дистанция 0 не может быть выставлена администратором
- 1-254 — Метрики доступные администратору для установки маршрутам. Метрики с меньшим значением имеют больший приоритет
- 255 — Метрика доступная администратору для установки маршрутам. В отличии от 1-254, маршрут с метрикой 255 всегда остается неактивным и не попадает в FIB
- Особые метрики. У маршрутов полученных от протоколов динамической маршрутизации, есть стандартные значения метрик
Check gateway
Check gateway — расширение MikroTik RoutesOS для проверки доступности шлюза по icmp или arp. Раз в 10 секунд (изменить нельзя) на шлюз отправляется запрос, если дважды не приходит ответ маршрут считается недоступным и удаляется из FIB. Если check gateway отключил маршрут проверки продолжается и маршрут снова станет активным после одной успешной проверки.
Check gateway отключает запись, в которой он настроен и все остальные записи (во всех таблицах маршрутизации и ecmp маршрутах) с указанным шлюзом.
В целом check gateway работает нормально, если не возникает проблем с потерей пакетов до шлюза. Check gateway не знает, что происходит со связью за пределами проверяемого шлюза, для этого необходимы дополнительные инструменты: скрипты, рекурсивная маршрутизация, протоколы динамической маршрутизации.
Большинство VPN и туннельных протоколов содержат встроенные средства для проверки активности соединения, включать для них check gateway — это дополнительная (но очень маленькая) нагрузка на сеть и производительность устройства.
ECMP маршруты
Equal-Cost Multi-Path — отправка пакетов до получателя используя одновременно несколько шлюзом с перебором по алгоритму Round Robin.
ECMP маршрут создается администратором, путем указания нескольких gateway для одной подсети (либо автоматический, при наличии двух равноценных маршрутов OSPF).
ECMP используется для балансировки нагрузки между двумя каналами, в теории, если в ecmp маршруте два канала, то для каждого пакета исходящий канал должен отличаться. Но механизм Routing cache отправляет пакеты из соединения по маршруту, которым пошел первый пакет, в итоге получаем подобие балансировки на базе соединений (per-connection loading balancing).
Если отключить Routing Cache, то пакеты в ECMP маршруте будут делиться правильно, но возникает проблема с NAT. Правило NAT обрабатывает только первый пакет из соединения (остальные обрабатываются автоматически) и получается ситуация, что с различных интерфейсов уходят пакеты с одним адресом источника.
В ECMP маршрутах не работает check gateway (баг RouterOS). Но можно обойти это ограничение, если создать дополнительные маршруты для проверки, которые будут отключать записи в ECMP.
Фильтрация средствами Routing
Опция Type определяет, что сделать с пакетом:
- unicast — отправить на указанный шлюз (интерфейс)
- blackhole — отбросить пакет
- prohibit, unreachable — отбросить пакет и отправить icmp сообщение отправителю
Фильтрацию обычно используют, когда нужно обезопасить отправку пакетов не по тому пути, конечно можно фильтровать подобное через firewall.
Пара примеров
Для закрепления базовых вещей о маршрутизации.
Типичный домашний роутер
/ip route
add dst-address=0.0.0.0/0 gateway=10.10.10.1
- Статический маршрут до 0.0.0.0/0 (default route)
- Connected маршрут на интерфейсе с провайдером
- Connected маршрут на интерфейсе с локальной сетью
Типичный домашний роутер с PPPoE
- Статический маршрут до default route, добавлен автоматически т.к. это указано в свойствах подключения
- Connected маршрут для PPP соединения
- Connected маршрут на интерфейсе с локальной сетью
Типичный домашний роутер с двумя провайдерами и резервированием
/ip route
add dst-address=0.0.0.0/0 gateway=10.10.10.1 distance=1 check-gateway=ping
add dst-address=0.0.0.0/0 gateway=10.20.20.1 distance=2
- Статический маршрут до default route через первого провайдера с метрикой 1 и проверкой доступности шлюза
- Статический маршрут до default route через второго провайдера с метрикой 2
- Connected маршруты
Трафик до 0.0.0.0/0 идет через 10.10.10.1, пока данный шлюз доступен, иначе переключается на 10.20.20.1
Такую схему можно считать резервированием канала, но она не лишена недостатков. Если произойдет обрыв за пределами шлюза провайдера (например внутри операторской сети), ваш роутер об этом не узнает и продолжит считать маршрут активным.
Типичный домашний роутер с двумя провайдерами, резервированием и ECMP
/ip route
add dst-address=0.0.0.0/0 gateway=10.10.10.1 check-gateway=ping
add dst-address=0.0.0.0/0 gateway=10.20.20.1 check-gateway=ping
add dst-address=0.0.0.0/0 gateway=10.10.10.1,10.20.20.1 distance=1
- Статические маршруты для проверки chack gateway
- Маршрут ECMP
- Connected маршруты
Маршруты для проверки синего цвета (цвет неактивных маршрутов), но это не мешает работе check gateway. В текущей версии (6.44) RoS автоматический приоритет отдается ECMP маршруту, но лучше добавить проверочные маршруты в другие таблицы маршрутизации (опция routing-mark
)
На Speedtest и прочих подобных сайтах прироста скорости не будет (ECMP делит трафик по соединениям, а не по пакетам), но p2p приложения должны загружать быстрее.
Фильтрация через Routing
/ip route
add dst-address=0.0.0.0/0 gateway=10.10.10.1
add dst-address=192.168.200.0/24 gateway=10.30.30.1 distance=1
add dst-address=192.168.200.0/24 gateway=10.10.10.1 distance=2 type=blackhole
- Статический маршрут до default route
- Статический маршрут до 192.168.200.0/24 через ipip туннель
- Запрещающий статический маршрут до 192.168.200.0/24 через маршрутизатор провайдера
Вариант фильтрации при которой туннельный трафик не уйдет на маршрутизатор провайдера при отключении ipip интерфейса. Подобные схемы требуются редко, т.к. можно реализовать блокировку через firewall.
Routing Loop
Петля маршрутизации — ситуация когда пакет бегает между маршрутизаторами до истечения ttl. Обычно является следствием ошибки конфигурации, в больших сетях лечится внедрением протоколов динамической маршрутизации, в маленьких — внимательностью.
Выглядит это примерно так:
Пример (наипростейший) как получить подобный результат:
Пример с Routing loop не имеет практического применения, но он показывает что маршрутизаторы понятия не имеют о таблице маршрутизации своих соседей.
Policy Base Routing и дополнительные таблицы маршрутизации
При выборе маршрута, роутер использует только одно поле из заголовка пакета (Dst. Address) — это базовая маршрутизация. Маршрутизация на базе других условий, например адреса источника, типа трафика (ToS), балансировка без ECMP, относится к Policy Base Routing (PBR) и использует дополнительные таблицы маршрутизации.
More Specific Route является основным правилом выбора маршрута, в пределах таблицы маршрутизации.
По умолчанию все правила маршрутизации добавляются в таблицу main. Администратор может создать произвольное количество дополнительных таблиц маршрутизации и направлять пакеты в них. Правила в разных таблицах не конфликтуют между собой. Если пакет не нашел подходящего правила в указанной таблице, он уйдет в таблицу main.
Пример с распределением через Firewall:
- 192.168.100.10 -> 8.8.8.8
- Трафик от 192.168.100.10 получает метку via-isp1 в
[Prerouting|Mangle]
- На этапе Routing в таблице via-isp1 производится поиск маршрута до 8.8.8.8
- Маршрут найден, трафик отправляется на шлюз 10.10.10.1
- Трафик от 192.168.100.10 получает метку via-isp1 в
- 192.168.200.20 -> 8.8.8.8
- Трафик от 192.168.200.20 получает метку via-isp2 в
[Prerouting|Mangle]
- На этапе Routing в таблице via-isp2 производится поиск маршрута до 8.8.8.8
- Маршрут найден, трафик отправляется на шлюз 10.20.20.1
- Трафик от 192.168.200.20 получает метку via-isp2 в
- Если один из шлюзов (10.10.10.1 или 10.20.20.1) станет недоступным, то пакет уйдет в таблицу main и будет искать подходящий маршрут там
Проблемы терминологии
В RouterOS есть определенные проблемы с терминологией.
При работе с правилами в [IP]->[Routes]
указывается таблица маршрутизации, хотя и написано что метка:
В [IP]->[Routes]->[Rule]
все правильно, в условии метки в действии таблицы:
Как отправить пакет в определенную таблицу маршрутизации
RouterOS дает несколько инструментов:
- Правила в
[IP]->[Routes]->[Rules]
- Маршрутные метки (
action=mark-routing
) в[IP]->[Firewall]->[Mangle]
- VRF
Правила [IP]->[Route]->[Rules]
Правила обрабатываются последовательно, если пакет совпал с условиями правила он не проходит дальше.
Routing Rules позволяют расширить возможности маршрутизации, опираясь не только на адрес получателя, но и адрес источника и интерфейс на который был получен пакет.
Правила состоят из условий и действия:
- Условия. Практически повторяют список признаков по которым пакет проверяется в FIB, отсутствует только ToS.
- Действия
- lookup — отправить пакет в таблицу
- lookup only in table — запереть пакет в таблице, если маршрут не будет найден пакет не уйдет в таблицу main
- drop — отбросить пакет
- unreacheable — отбросить пакет с уведомлением отправителя
В FIB трафик до локальных процессов обрабатывается в обход правил [IP]->[Route]->[Rules]
:
Маркировка [IP]->[Firewall]->[Mangle]
Маршрутные метки позволяют устанавливать шлюз для пакета используя практически любые условия Firewall:
Практически, потому что не все из них имеет смысл, а некоторые могут работать нестабильно.
Маркировать пакет можно двумя способами:
- Сразу ставить routing-mark
- Сначала ставить connection-mark, потом на основе connection-mark ставить routing-mark
В статье про firewall я писал, что второй вариант предпочтительнее т.к. снижает нагрузку на cpu, в случае с маркировкой маршрутов — это не совсем так. Указанные способы маркировки не всегда являются равноценными и обычно используются для решения различных задач.
Примеры использования
Переходим к примерам использования Policy Base Routing, на них гораздо проще показать зачем все это нужно.
MultiWAN и ответный исходящий (Output) трафик
Распространенная проблема, при MultiWAN конфигурации: Mikrotik доступен из сети интернет только по «активному» провайдеру.
Роутеру не важно на какой ip пришел запрос, при генерации ответа он будет искать маршрут в таблице маршрутизации, где активен маршрут через isp1. Дальше такой пакет скорее всего будет отфильтрован по пути до получателя.
Еще один интересный момент. Если на интерфейсе ether1 настроен «простой» source nat: /ip fi nat add out-interface=ether1 action=masquerade
пакет уйдет в сеть с src. address=10.10.10.100, что еще больше усугубит ситуацию.
Исправить проблему можно нескольким способами, но для любого из них потребуются дополнительные таблицы маршрутизации:
/ip route
add dst-address=0.0.0.0/0 gateway=10.10.10.1 check-gateway=ping distance=1
add dst-address=0.0.0.0/0 gateway=10.20.20.1 check-gateway=ping distance=2
add dst-address=0.0.0.0/0 gateway=10.10.10.1 routing-mark=over-isp1
add dst-address=0.0.0.0/0 gateway=10.20.20.1 routing-mark=over-isp2
Использование [IP]->[Route]->[Rules]
Указываем таблицу маршрутизации которая будет использована для пакетов с указанными Source IP.
/ip route rule
add src-address=10.10.10.100/32 action=lookup-only-in-table table=over-isp1
add src-address=10.20.20.200/32 action=lookup-only-in-table table=over-isp2
Можно использовать action=lookup
, но для локального исходящего трафика указанный вариант полностью исключает соединения с неправильного интерфейса.
- Система генерирует ответный пакет с Src. Address: 10.20.20.200
- На этапе Routing Decision(2) происходит проверка
[IP]->[Routes]->[Rules]
и пакет отправляется в таблицу маршрутизации over-isp2 - В соответствии с таблицей маршрутизации пакет должен быть отправлен на шлюз 10.20.20.1 через интерфейс ether2
Данный способ не требует рабочий Connection Tracker, в отличии от использования таблицы Mangle.
Использование [IP]->[Firewall]->[Mangle]
Соединение начинается со входящего пакета, поэтому маркируем его (action=mark-connection
), для исходящих пакетов от маркированного соединения устанавливаем маршрутную метку (action=mark-routing
).
/ip firewall mangle
#Маркировка входящих соединений
add chain=input in-interface=ether1 connection-state=new action=mark-connection new-connection-mark=from-isp1
add chain=input in-interface=ether2 connection-state=new action=mark-connection new-connection-mark=from-isp2
#Маркировка исходящих пакетов на основе соединений
add chain=output connection-mark=from-isp1 action=mark-routing new-routing-mark=over-isp1 passthrough=no
add chain=output connection-mark=from-isp2 action=mark-routing new-routing-mark=over-isp2 passthrough=no
Если на одном интерфейсе настроено несколько ip, можно добавить в условие dst-address
для уточнения.
- На интерфейс ether2 поступает пакет открывающий соединение. Пакет попадает в
[INPUT|Mangle]
где говорится маркировать все пакеты из соединения как from-isp2 - Система генерирует ответный пакет с Src. Address: 10.20.20.200
- На этапе Routing Decision(2) пакет в соответствии с таблицей маршрутизации отправляется на шлюз 10.20.20.1 через интерфейс ether1. Можете убедиться в этом залогировав пакеты в
[OUTPUT|Filter]
- На этапе
[OUTPUT|Mangle]
происходит проверка на наличие метки соединения from-isp2 и пакет получает маршруткую метку over-isp2 - На этапе Routing Adjusment(3) происходит проверка на наличие маршрутной метки и отправка в соответствующую таблицу маршрутизации
- В соответствии с таблицей маршрутизации пакет должен быть отправлен на шлюз 10.20.20.1 через интерфейс ether2
MultiWAN и ответный dst-nat трафик
Пример посложнее, что делать если за роутером находится сервер (например web) в частной подсети и необходимо обеспечить доступ к нему по любому из провайдеров.
/ip firewall nat
add chain=dstnat proto=tcp dst-port=80,443 in-interface=ether1 action=dst-nat to-address=192.168.100.100
add chain=dstnat proto=tcp dst-port=80,443 in-interface=ether2 action=dst-nat to-address=192.168.100.100
Суть проблемы будет та же, решение похоже на вариант с Firewall Mangle, только будут использоваться другие цепочки:
/ip firewall mangle
add chain=prerouting connection-state=new in-interface=ether1 protocol=tcp dst-port=80,443 action=mark-connection new-connection-mark=web-input-isp1
add chain=prerouting connection-state=new in-interface=ether2 protocol=tcp dst-port=80,443 action=mark-connection new-connection-mark=web-input-isp2
add chain=prerouting connection-mark=web-input-isp1 in-interface=ether3 action=mark-routing new-routing-mark=over-isp1 passthrough=no
add chain=prerouting connection-mark=web-input-isp2 in-interface=ether3 action=mark-routing new-routing-mark=over-isp2 passthrough=no
На схеме не отображен NAT, но думаю и так все понятно.
MultiWAN и исходящие соединения
Можно использовать возможности PBR для создания нескольких vpn (в примере SSTP) соединений с разных интерфейсов роутера.
Дополнительные таблицы маршрутизации:
/ip route
add dst-address=0.0.0.0/0 gateway=192.168.100.1 routing-mark=over-isp1
add dst-address=0.0.0.0/0 gateway=192.168.200.1 routing-mark=over-isp2
add dst-address=0.0.0.0/0 gateway=192.168.0.1 routing-mark=over-isp3
add dst-address=0.0.0.0/0 gateway=192.168.100.1 distance=1
add dst-address=0.0.0.0/0 gateway=192.168.200.1 distance=2
add dst-address=0.0.0.0/0 gateway=192.168.0.1 distance=3
Маркировка пакетов:
/ip firewall mangle
add chain=output dst-address=10.10.10.100 proto=tcp dst-port=443 action=mark-routing new-routing-mark=over-isp1 passtrough=no
add chain=output dst-address=10.10.10.101 proto=tcp dst-port=443 action=mark-routing new-routing-mark=over-isp2 passtrough=no
add chain=output dst-address=10.10.10.102 proto=tcp dst-port=443 action=mark-routing new-routing-mark=over-isp3 passtrough=no
Простые правила NAT, иначе пакет уйдет с интерфейса с неправильным Src. Address:
/ip firewall nat
add chain=srcnat out-interface=ether1 action=masquerade
add chain=srcnat out-interface=ether2 action=masquerade
add chain=srcnat out-interface=ether3 action=masquerade
Разбор:
- Роутер создает три процесса SSTP
- На этапе Routing Decision (2) для данных процессов выбирается маршрут, исходя из таблицы маршрутизации main. От этого же маршрута пакет получает Src. Address привязанный к интерфейсу ether1
- В
[Output|Mangle]
пакеты от разных соединений получают разные метки - Пакеты попадают в соответствующие меткам таблицы на этапе Routing Adjusment и получает новый маршрут для отправки пакетов
- Но у пакетов все еще остается Src. Address от ether1, на этапе
[Nat|Srcnat]
адрес подменяется в соответствии с интерфейсом
Интересно, что на роутере вы увидите следующую таблицу соединений:
Connection Tracker отрабатывает раньше [Mangle]
и [Srcnat]
, поэтому все соединения идут от одного адреса, если посмотреть подробнее то в Replay Dst. Address
будут адреса после NAT:
На VPN сервере (на тестовом стенде он у меня один) можно увидеть что все соединения происходят с правильных адресов:
Постой способ
Есть способ проще, можно просто указать определенный шлюз для каждого из адресов:
/ip route
add dst-address=10.10.10.100 gateway=192.168.100.1
add dst-address=10.10.10.101 gateway=192.168.200.1
add dst-address=10.10.10.102 gateway=192.168.0.1
Но такие маршруты будут влиять не только на исходящий но и на транзитный трафик. Плюс, если вам не нужно чтобы трафик на vpn сервера уходил через неподходящие каналы связи, то придется добавить еще 6 правил в [IP]->[Routes]
с type=blackhole
. В предыдущем варианте — 3 правила в [IP]->[Route]->[Rules]
.
Распределение соединений пользователей по каналам связи
Простые, повседневные задачи. Опять же понадобятся дополнительные таблицы маршрутизации:
/ip route
add dst-address=0.0.0.0/0 gateway=10.10.10.1 dist=1 check-gateway=ping
add dst-address=0.0.0.0/0 gateway=10.20.20.1 dist=2 check-gateway=ping
add dst-address=0.0.0.0/0 gateway=10.10.10.1 dist=1 routing-mark=over-isp1
add dst-address=0.0.0.0/0 gateway=10.20.20.1 dist=1 routing-mark=over-isp2
Используя [IP]->[Route]->[Rules]
/ip route rules
add src-address=192.168.100.0/25 action=lookup-only-in-table table=over-isp1
add src-address=192.168.100.128/25 action=lookup-only-in-table table=over-isp2
Если использовать
action=lookup
, то при отключении одного из каналов трафик уйдет в таблицу main и пойдет по рабочему каналу. Нужно это или нет — зависит от задачи.
Используя маркировки в
[IP]->[Firewall]->[Mangle]
Простой пример со списками ip адресов. В принципе можно использовать практически любые условия. Единственное предостережение layer7, даже в паре с метками соединений, может показаться что всё работает правильно, но часть трафика всеравно уйдет не туда.
/ip firewall mangle
add chain=prerouting src-address-list=users-over-isp1 dst-address-type=!local action=mark-routing new-routing-mark=over-isp1
add chain=prerouting src-address-list=users-over-isp2 dst-address-type=!local action=mark-routing new-routing-mark=over-isp2
«Запереть» пользователей в одной таблице маршрутизации можно через [IP]->[Route]->[Rules]
:
/ip route rules
add routing-mark=over-isp1 action=lookup-only-in-table table=over-isp1
add routing-mark=over-isp2 action=lookup-only-in-table table=over-isp2
Либо через [IP]->[Firewall]->[Filter]
:
/ip firewall filter
add chain=forward routing-mark=over-isp1 out-interface=!ether1 action=reject
add chain=forward routing-mark=over-isp2 out-interface=!ether2 action=reject
Отступление про dst-address-type=!local
Дополнительное условие dst-address-type=!local
необходимо чтобы трафик от пользователей доходил до локальных процессов роутера (dns, winbox, ssh, …). Если к роутеру подключено несколько локальных подсетей, необходимо предусмотреть чтобы трафик между ними не уходил в интернет, например используя dst-address-table
.
В примере с использованием [IP]->[Route]->[Rules]
подобных исключений нет, но трафик до локальных процессов доходит. Дело в том, что попадая в FIB пакет промаркированный в [PREROUTING|Mangle]
имеет маршрутную метку и уходит в таблицу маршрутизации отличную от main, где нет локального интерфейса. В случае с Routing Rules, сначала проверяется предназначен ли пакет локальному процессу и только на этапе User PBR он уходит в заданную таблицу маршрутизации.
Используя [IP]->[Firewall]->[Mangle action=route]
Данное действие работает только в [Prerouting|Mangle]
и позволяет направлять трафик на указанный шлюз без использования дополнительных таблиц маршрутизации, указывая адрес шлюза напрямую:
/ip firewall mangle
add chain=prerouting src-address=192.168.100.0/25 action=route gateway=10.10.10.1
add chain=prerouting src-address=192.168.128.0/25 action=route gateway=10.20.20.1
Действие route
имеет более низкий приоритет чем правила маршрутизации ([IP]->[Route]->[Rules]
). В случае с маршрутными метками все зависит от положения правил, если правило с action=route
стоит выше чем action=mark-route
, то будет использовано оно (вне зависимости от флага passtrough
), иначе маркировка маршрута.
На wiki очень мало информации про данное действие и все выводы получены эксперементальным путем, в любом случае я не нашел варианты когда применение данного варианта дает приимущества перед другими.
Динамическая балансировка на основе PPC
Per Connection Classificator — является более гибким аналогом ECMP. В отличии от ECMP делит трафик по соединениям более строго (ECMP ничего про соединения не знает, но в паре с Routing Cache получается нечто похожее).
PCC берет указанные поля из ip заголовка, преобразует их в 32-битное значение и делит на знаменатель. Остаток от деления сравнивается с указанным остатком и если они совпадают, то применяется указанное действие. Подробнее. Звучит дико, но работает.
Пример с тремя адресами:
192.168.100.10: 192+168+100+10 = 470 % 3 = 2
192.168.100.11: 192+168+100+11 = 471 % 3 = 0
192.168.100.12: 192+168+100+12 = 472 % 3 = 1
Пример динамического распределения трафика по src.address между тремя каналами:
#Таблица маршрутизации
/ip route
add dst-address=0.0.0.0/0 gateway=10.10.10.1 dist=1 check-gateway=ping
add dst-address=0.0.0.0/0 gateway=10.20.20.1 dist=2 check-gateway=ping
add dst-address=0.0.0.0/0 gateway=10.30.30.1 dist=3 check-gateway=ping
add dst-address=0.0.0.0/0 gateway=10.10.10.1 dist=1 routing-mark=over-isp1
add dst-address=0.0.0.0/0 gateway=10.20.20.1 dist=1 routing-mark=over-isp2
add dst-address=0.0.0.0/0 gateway=10.30.30.1 dist=1 routing-mark=over-isp3
#Маркировка соединений и маршрутов
/ip firewall mangle
add chain=prerouting in-interface=br-lan dst-address-type=!local connection-state=new per-connection-classifier=src-address:3/0 action=mark-connection new-connection-mark=conn-over-isp1
add chain=prerouting in-interface=br-lan dst-address-type=!local connection-state=new per-connection-classifier=src-address:3/1 action=mark-connection new-connection-mark=conn-over-isp2
add chain=prerouting in-interface=br-lan dst-address-type=!local connection-state=new per-connection-classifier=src-address:3/2 action=mark-connection new-connection-mark=conn-over-isp3
add chain=prerouting in-interface=br-lan connection-mark=conn-over-isp1 action=mark-routing new-routing-mark=over-isp1
add chain=prerouting in-interface=br-lan connection-mark=conn-over-isp2 action=mark-routing new-routing-mark=over-isp2
add chain=prerouting in-interface=br-lan connection-mark=conn-over-isp3 action=mark-routing new-routing-mark=over-isp3
При маркировке маршрутов есть дополнительное условие: in-interface=br-lan
, без него под action=mark-routing
попадет ответный трафик из интернета и в соответствии с таблицами маршрутизации уйдет обратно к провайдеру.
Переключение каналов связи
Check ping — хороший инструмент, но он проверяет связь только с ближайшим IP пиром, сети провайдеров обычно состоят из большого числа маршрутизаторов и обрыв связи может произойти за пределами ближайшего пира, а дальше идут магистральные операторы связи у которых тоже могут случаться проблемы, в общем check ping не всегда показывает актуальную информацию о доступе в глобальную сеть.
Если у провайдеров и крупных корпораций есть протокол динамической маршрутизации BGP, то домашним и офисным пользователем приходится самостоятельно придумывать как проверять доступ в интернет через определенный канал связи.
Обычно используются скрипты, которые через определенный канал связи проверяют доступность ip адреса в сети интернет, при этом выбирается что то надежное, например google dns: 8.8.8.8. 8.8.4.4. Но в сообществе Mikrotik для этого приспособили более интересный инструмент.
Пара слов про рекурсивную маршрутизацию
Рекурсивная маршрутизация необходима при построении Multihop BGP пиринга и в статью про основы статической маршрутизации попала только за счет ушлых пользователей MikroTik, которые придумали как использовать рекурсивный маршруты в паре с check gateway для переключение каналов связи без дополнительных скриптов.
Пришло время в общих чертах разобраться с опциями scope/target scope и каким образом маршрут привязывается к интерфейсу:
- Маршрут ищет интерфейс для отправки пакета исходя из своего значения scope и всех записей в таблице main с меньшими или равными значениями target scope
- Из найденных интерфейсов выбирается тот, через который можно отправить пакет указанному шлюзу
- Интерфейс найденной connected записи выбирается для отправки пакета на шлюз
При наличии рекурсивного маршрута происходит все тоже самое, но в два этапа:
- 1-3 К connected маршрутам добавляется еще один, через который можно достичь указанного шлюза
- 4-6 Поиск маршрута connected маршрута для «промежуточного» шлюза
Все манипуляции с рекурсивным поиском происходят в RIB, а в FIB передается только итоговый результат: 0.0.0.0/0 via 10.10.10.1 on ether1
.
Пример использования рекурсивной маршрутизации для переключения маршрутов
Конфигурация:
/ip route
add dst-address=0.0.0.0/0 gateway=8.8.8.8 check-gateway=ping distance=1 target-scope=10
add dst-address=8.8.8.8 gateway=10.10.10.1 scope=10
add dst-address=0.0.0.0/0 gateway=10.20.20.1 distance=2
Можно проверить, что пакеты будут отправляться на 10.10.10.1:
Check gateway ничего не знает про рекурсивную маршрутизацию и просто отправляет ping’и на адрес 8.8.8.8, который (исходя из таблицы main) доступен через шлюз 10.10.10.1.
Если происходит потеря связи между 10.10.10.1 и 8.8.8.8, то происходит отключение маршрута, но пакеты (включая проверочные ping) до 8.8.8.8 продолжают идти через 10.10.10.1:
Если происходит потеря линка на ether1, то получается неприятная ситуация, когда пакеты до 8.8.8.8 пойдут через второго провайдера:
Это проблема, если вы используете NetWatch для запуска скриптов при недоступности 8.8.8.8. При обрыве линка NetWatch просто отработает по резервному каналу связи и будет считать что все нормально. Решается добавлением дополнительного фильтрующего маршрута:
/ip route
add dst-address=8.8.8.8 gateway=10.20.20.1 distance=100 type=blackhole
На хабре есть статья, где ситуация с NetWatch рассмотрена более детально.
И да, при использовании подобного резервирования адрес 8.8.8.8 будет жестко привязан к одному из провайдеров, соответственно выбирать его в качестве источника dns не самая хорошая идея.
Пара слов про Virtual Routing and Forwarding (VRF)
Технология VRF предназначена для создания нескольких виртуальных маршрутизаторов внутри одного физического, данная технология широко применяется у операторов связи (обычно в связке с MPLS) для предоставления услуги L3VPN клиентам с пересекающимися адресами подсетей:
Но VRF в Mikrotik организован на базе таблиц маршрутизации и имеет ряд недостатков, например локальные ip адреса роутера доступны из всех VRF, подробнее можно почитать по ссылке.
Пример конфигурации vrf:
/ip route vrf
add interfaces=ether1 routing-mark=vrf1
add interfaces=ether2 routing-mark=vrf2
/ip address
add address=192.168.100.1/24 interface=ether1 network=192.168.100.0
add address=192.168.200.1/24 interface=ether2 network=192.168.200.0
С устройства подключенного к ether2 видим, что проходит ping до адреса роутера из другого vrf (и это проблема), при этом ping в интернет не уходит:
Для доступа в интернет необходимо прописать дополнительный маршрут обращающийся к таблице main (в терминологии vrf это называется route leaking):
/ip route
add distance=1 gateway=172.17.0.1@main routing-mark=vrf1
add distance=1 gateway=172.17.0.1%wlan1 routing-mark=vrf2
Тут показано два способа route leaking: используюя таблицу маршрутизации: 172.17.0.1@main
и используя имя интерфейса: 172.17.0.1%wlan1
.
И настроить маркировку для ответного трафика в [PREROUTING|Mangle]
:
/ip firewall mangle
add chain=prerouting in-interface=ether1 action=mark-connection new-connection-mark=from-vrf1 passthrough=no
add chain=prerouting connection-mark=from-vrf1 routing-mark=!vrf1 action=mark-routing new-routing-mark=vrf1 passthrough=no
add chain=prerouting in-interface=ether2 action=mark-connection new-connection-mark=from-vrf2 passthrough=no
add chain=prerouting connection-mark=from-vrf2 routing-mark=!vrf1 action=mark-routing new-routing-mark=vrf2 passthrough=no
Подсети с одинаковой адресацией
Организация доступа до подсетей с одинаковой адресацией на одном роутере используя VRF и netmap:
Базовая конфигурация:
/ip route vrf
add interfaces=ether1 routing-mark=vrf1
add interfaces=ether2 routing-mark=vrf2
/ip address
add address=192.168.100.1/24 interface=ether1 network=192.168.100.0
add address=192.168.100.1/24 interface=ether2 network=192.168.100.0
add address=192.168.0.1/24 interface=ether3 network=192.168.0.0
Правила firewall:
#Маркируем пакеты для отправки в правильную таблицу маршрутизации
/ip firewall mangle
add chain=prerouting dst-address=192.168.101.0/24 in-interface=ether3 action=mark-routing new-routing-mark=vrf1 passthrough=no
add chain=prerouting dst-address=192.168.102.0/24 in-interface=ether3 action=mark-routing new-routing-mark=vrf2 passthrough=no
#Средствами netmap заменяем адреса "эфимерных" подсетей на реальные подсети
/ip firewall nat
add chain=dstnat dst-address=192.168.101.0/24 in-interface=ether3 action=netmap to-addresses=192.168.100.0/24
add chain=dstnat dst-address=192.168.102.0/24 in-interface=ether3 action=netmap to-addresses=192.168.100.0/24
Правила маршрутизации для возвратного трафика:
#Указание имени интерфейса тоже может считаться route leaking, но по сути тут создается аналог connected маршрута
/ip route
add distance=1 dst-address=192.168.0.0/24 gateway=ether3 routing-mark=vrf1
add distance=1 dst-address=192.168.0.0/24 gateway=ether3 routing-mark=vrf2
Добавление маршрутов полученных по dhcp в заданную таблицу маршрутизации
VRF может быть интересен, если необходимо автоматически добавить динамический маршрут (например от dhcp client) в определенную таблицу маршрутизации.
Добавление интерфейса в vrf:
/ip route vrf
add interface=ether1 routing-mark=over-isp1
Правила для отправки трафика (исходящего и транзитного) через таблицу over-isp1:
/ip firewall mangle
add chain=output out-interface=!br-lan action=mark-routing new-routing-mark=over-isp1 passthrough=no
add chain=prerouting in-interface=br-lan dst-address-type=!local action=mark-routing new-routing-mark=over-isp1 passthrough=no
Дополнительный, фейковый маршрут для работы исходящей маршрутизции:
/interface bridge
add name=bare
/ip route
add dst-address=0.0.0.0/0 gateway=bare
Этот маршрут необходим только чтобы локальные исходящие пакеты могли пройти через Routing decision (2) до [OUTPUT|Mangle]
и получить маршрутную метку, если на маршрутизаторе есть другие активные маршруты до 0.0.0.0/0 в таблице main оно не требуется.
Цепочки connected-in
и dynamic-in
в [Routing] -> [Filters]
Фильтрация маршрутов (входящий и исходящих) — это инструмент который обычно используется вместе с протоколами динамической маршрутизации (поэтому доступен только после установки пакета routing), но во входящих фильтрах есть две интересные цепочки:
- connected-in — фильтрация connected маршрутов
- dynamic-in — фильтрация динамических маршрутов полученных PPP и DCHP
Фильтрация позволяет не только отбрасывать маршруты, но и изменять ряд опций: distance, routing-mark, comment, scope, target scope, …
Это очень точечный инструмент и если можете сделать что-то без Routing Filters (но не скриптами), то не используйте Routing Filters, не путайте себя и тех кто будет конфигурировать роутер после вас. В контексте динамической маршрутизации Routing Filters будут использоваться значительно чаще и продуктивнее.
Установка Routing Mark для динамических маршрутов
Пример с домашнего маршрутизатора. У меня настроено два VPN соединения и трафик в них должен заворачиваться в соответствием с таблицами маршрутизации. При этом я хочу что-бы маршруты создавались автоматически при активации интерфейса:
#При создании vpn подключений указываем создание default route и задаем дистанцию
/interface pptp-client
add connect-to=X.X.X.X add-default-route=yes default-route-distance=101 ...
add connect-to=Y.Y.Y.Y add-default-route=yes default-route-distance=100 ...
#Фильтрами отправляем маршруты в определенные таблицы маршрутизации на основе подсети назначения и дистанции
/routing filter
add chain=dynamic-in distance=100 prefix=0.0.0.0/0 action=passthrough set-routing-mark=over-vpn1
add chain=dynamic-in distance=101 prefix=0.0.0.0/0 action=passthrough set-routing-mark=over-vpn2
Не знаю почему, наверное баг, но если создать vrf для ppp интерфейса, то маршрут до 0.0.0.0/0 всеравно попадет в таблицу main. Иначе всё было бы еще проще.
Отключение Connected маршрутов
Иногда требуется и такое:
/route filter
add chain=connected-in prefix=192.168.100.0/24 action=reject
Инструменты отладки
RouterOS предоставляет ряд средств для отладки маршрутизации:
[Tool]->[Tourch]
— позволяет посмотреть пакеты на интерфейсах/ip route check
— позволяет посмотреть на какой шлюз будет отправлен пакет, не работает с таблицами маршрутизации/ping routing-table=<name>
и/tool traceroute routing-table=<name>
— ping и трассировка используя указанную таблицу маршрутизацииaction=log
в[IP]->[Firewall]
— отличный инструмент, который позволяет проследить путь пакета по packet flow, данное действие доступно во всех цепочках и таблицах
Как настроить статическую маршрутизацию на беспроводном роутере?
Требования к использованию
Дата последнего обновления: 05-28-2019 08:15:03 AM
555492
Эта статья подходит для:
TL-WR841ND , TL-WR842ND , TL-WR843ND , Archer C5( V1.20 ) , Archer C2( V1 ) , Archer C50( V1 ) , TL-WDR3500 , TL-WR720N , TL-WR841N , TL-WDR3600 , TL-WR710N , TL-WR740N , Archer C20i , TL-WR741ND , TL-WR940N , TL-WR743ND , TL-WR1043ND , Archer C7( V1 V2 V3 ) , TL-WR1042ND , TL-WR542G , TL-WR702N , TL-WR700N , TL-WR843N , TL-WR340G , TL-WDR4300 , TL-WR340GD , Archer C20( V1 ) , TL-MR3220 , TL-WR842N , TL-WR2543ND , TL-MR3020 , TL-WR840N , TL-MR3040 , TL-WR841HP , TL-WDR4900 , TL-WR941ND , TL-WR543G , TL-WR541G , TL-WR810N , TL-MR3420
Статический маршрут — это заранее определенный путь, по которому должна следовать информация в сети, чтобы достичь определенного хоста или сети.
Вот два типичных сценария, в качестве примеров, когда требуется статический маршрут, рассмотрим их.
Сценарий 1:
Проблема:
Шлюзом ПК-является роутер 2, который предоставляет доступ в интернет.
Когда ПК хочет подключиться к серверам сервер 1 и сервер 2, сначала запрос будет отправлен на роутер 2. Поскольку к сервер 1 и сервер 2 нет маршрута в таблице маршрутов роутера 2, запрос будет отклонен.
Решение: Добавление статического маршрута на роутере 2
Сетевые параметры: Серверы в сетевом сегменте: 172.30.30.0. Маска подсети IP для этого сегмента: 255.255.255.0
Сценарий 2:
Проблема: Шлюзом сети LAN является роутер 1, роутер 2 подключен по WDS к роутеру 1. В таблице маршрутизации роутера 2 нет записи маршрута от роутера 2 к NTP-серверу, поэтому роутер 2 не может синхронизировать время с NTP сервером.
Разрешение: Добавление статического маршрута на роутере 2
Сетевые параметры: IP-адрес сервера в Интернете — 132.163.4.101. Маска подсети IP для этого адреса 255.255.255.255
Шаги настройки:
Шаг 1.
Зайдите на web – страницу настройки роутера.
Для этого в адресной строке браузера наберите 192.168.0.1
Шаг 2. Введите имя пользователя и пароль на странице входа. Имя пользователя и пароль по умолчанию — admin.
Шаг 3. В меню с левой стороны выберите раздел Настройки маршрутизации – Список статических маршрутов.
Шаг 4.
Нажмите Добавить ….
В первом поле введите IP-адрес назначения.
В втором поле введите маску подсети.
В третьем поле IP-адрес шлюза, который должен находиться в том же сегменте локальной сети, что и роутер.
Пример ввода параметров для Сценария 1:
Пример ввода параметров для Сценария 2:
Если у Вас возникнуть какие либо сложности с настройкой, обратитесь в техническую поддержку TP-Link
Чтобы получить подробную информацию о каждой функции и настройке оборудования, перейдите на страницу Загрузки для загрузки руководства пользователя к вашей модели устройства.
Был ли этот FAQ полезен?
Ваш отзыв поможет нам улучшить работу сайта.
Что вам не понравилось в этой статье?
- Недоволен продуктом
- Слишком сложно
- Неверный заголовок
- Не относится к моей проблеме
- Слишком туманное объяснение
- Другое
Как мы можем это улучшить?
Спасибо
Спасибо за обращение
Нажмите здесь, чтобы связаться с технической поддержкой TP-Link.
На чтение 12 мин Просмотров 1.5к.
Максим aka WisH
Высшее образование по специальности «Информационные системы». Опыт работы системным администратором — 5 лет.
Задать вопрос
Сегодня поговорим о том, что такое таблица маршрутизации, зачем она нужна и на каких устройствах применяется. В большинстве случаев, обычные люди не пользуются ей, отдавая маршрутизацию на откуп автоматике. Маршрутизаторы и другое сетевое оборудование умеют самостоятельно составлять таблицы, и не всегда хорошей идеей является вмешательство в этот процесс.
Содержание
- Как работает таблица маршрутизации
- Зачем нужна таблица
- Содержание записей
- Виды таблицы
- Команды для работы с таблицей маршрутизации
- В Windows
- В Linux
- Заключение
Как работает таблица маршрутизации
Перед тем, как приступать к настройке таблиц на роутере или на компьютере, вам нужно понимать, как они работают и для чего могут пригодиться. При настройке каких-то компьютерных систем лучше всегда соблюдать правило: если есть автоматическая настройка или предустановленные параметры, то не лезьте в этот раздел, если хоть чего-то не понимаете.
Не стоит настраивать маршрутизацию в маленьких сетях или если есть сомнения, что сможете справиться самостоятельно.
Если у вас есть небольшая домашняя сеть, то смысла в самостоятельной настройке нет. Разве что, ваше устройство не поддерживает автоматическое составление таблицы и её обязательно придется заносить вручную. Такое может случиться, если было куплено профессиональное оборудование или же, если это оборудование старое. В таких случаях действительно придется разбираться с таблицами самостоятельно.
Зачем нужна таблица
Таблица маршрутизации нужна, чтобы компьютер или маршрутизатор знали, куда нужно отправлять пакеты с информацией. Не всегда сеть организована таким образом, что после маршрутизатора сразу находятся конечные абоненты. Иногда идет сначала один маршрутизатор, потом другой, потом стоит какой-то сервер и уже за ним прячутся остальные компьютеры и устройства.
Если такая цепочка одна, то с доставкой данных нет проблем, если же это большая сеть, в которой много переходов и абонентов, то доставка информации может задерживаться. В таких случаях и составляются таблицы маршрутизации, чтобы облегчить работу всей сети. При правильно составленной таблице каждое устройство знает куда передавать пакет информации дальше.
Проще всего вам будет представить необходимость этих таблиц на примере почты и адресов. Представьте, что письмо, предназначенное вам, оказалось в главном распределительном центре Почты России. Они смотрят на него и видят, кому оно предназначается: Иванов И.И.. После этого они смотрят в свои гроссбухи с адресами и находят, что Иванов И.И. живет в Энской Губернии и переправляют письмо в почтамт этой губернии.
Дальше уже там смотрят в свои таблицы и видят, что такой абонент проживает в городе Бердичеве и переправляют туда, там находят, что к этому абоненту относится отделение почты №666 и переправляют письмо туда. Там уже находят конкретный адрес, улица Маршрутная, дом такой-то, и посылают почтальона, ответственного за этот дом, с отправлением для доставки вашего письма в почтовый ящик.
Как-то так и работают таблицы маршрутизации, пример с почтой тут отличается только тем, что там сразу написан весь адрес проживания и, фактически, весь маршрут: Энская губерния, г. Бердичев, улица Маршрутная, дом такой-то, Иванов И.И. В обоих случаях конечный получатель идентифицируется однозначно и точно. Из-за этого все отделения знают куда и как передавать отправления, а могут иметь и несколько маршрутов для доставки.
Содержание записей
Поля таблицы как раз зависят от того, что должен знать этот узел маршрута для дальнейшего получения и передачи информации. Самым важным здесь являются IP-адреса других узлов сети, а также те адреса, о существовании которых точно знает это устройство. Также важным показателем является метрика, отвечающая за длину маршрута.
В общем случае поля таблицы выглядят следующим образом:
- Адрес сети или узла назначения. Также здесь может стоять маршрут по умолчанию.
- Маска сети назначения (для IPv4-сетей маска /32 (255.255.255.255)). С помощью маски указывается единичный адрес или же некоторый диапазон адресов.
- Шлюз, обозначающий адрес маршрутизатора в сети. В случае, если устройство в своей подсети не имеет подобного адреса, то он передает пакет следующему маршрутизатору, в ведении которого и находится отправитель.
- Интерфейс, через который доступен шлюз. Для разных устройств это могут быть разные данные. Например, в случае обычного маршрутизатора это будут номера портов: 0,1,2,3 и так далее. В случае с компьютером это будет сетевая карта или одна из сетевых карт, если их несколько.
- Метрику — числовой показатель, задающий предпочтительность маршрута. Зависит от настроек, обычно здесь имеется в виду длина маршрута, то есть, количество узлов до абонента. Если есть маршрут с двумя узлами и с 12, то выбран будет маршрут с наименьшей метрикой. Также можно задавать метрику в зависимости от скорости соединения и еще нескольких параметров.
Записи на разных устройствах могут немного отличаться по внешнему виду, но поля остаются такими же в большинстве случаев. В них содержится та информация, без которой доставка пакета, просмотр маршрута, а также его выбор при доставке сообщения будут затруднены. Меньше информации добавить не получится, иначе её будет недостаточно.
Виды таблицы
Есть различия по способу формирования таблицы на устройстве. Всего есть два вида таблиц: статические и динамические. Если ничего не настраивали, а интернет как-то работает, то используется второй вид таблиц. Сейчас разберем подробнее каждый из этих видов, их преимущества и недостатки.
Статические таблицы стоит снова сравнить с почтой. Есть определенный человек, проживающий по определенному адресу. В случае переезда человека, сноса дома или строительства нового дома, нужно подать правильно оформленные документы, чтобы новые абоненты смогли получать почту. Если не сделали этого вовремя, то сами виноваты.
Со статическими таблицами также: что вы в них запишите, то там и будет. Если абонент пропадет или переедет, то пакеты для него будут высылаться по старому маршруту, пока данные не будут изменены. При подключении нового узла сети или оборудования также вносят изменения в таблицы, иначе, несмотря на работающую связь, никакого обмена сообщениями между ними не будет.
Статическая таблицы маршрутизация не зависит от местоположения роутера. Не стирается при перезагрузке или установке в другое место.
С динамическими таблицами все сложнее для оборудования и проще для человека. В случае с динамическими таблицами, их составляет сам маршрутизатор или сервер. Фактическое, каждое устройство, работающее по протоку TCP, после подключения посылает в сеть сообщение типа «Привет! Я здесь новенькой. Мой адрес и имя такие-то, готов получать и отправлять информацию». Когда это сообщение доходит до первого маршрутизатора, он добавляет этот узел в свою сеть.
При первом подключении сервера или маршрутизатора он также отправляет подобный запрос, только еще и сам говорит, что будет передавать информацию дальше. Отправляет пакеты с запросом ко всем устройствам, чтобы получить их адреса и данные, а также запросы к другим роутерам, чтобы получить их таблицы и заняться просмотром маршрутов.
Маршрутизаторы часто обмениваются информацией, например один из первых и сейчас почти неиспользуемых в крупных сетях, протокол RIP заставлял свитчи раз в 30 секунд отправлять в сеть всю свою таблицу маршрутизации. Это позволяло держать данные актуальными на всех устройствах, но нагружало есть.
В случае динамических таблиц, периодически проводится их очистка. Это позволяет избежать накопления ненужных записей и недостоверной информации. Так что, если какое-то устройство отключается и больше не присутствует в сети, то через некоторое время оно вычеркивается из таблиц. Также, если роутер был выключен, то после включения он станет с нуля создавать таблицу, а вот статическая таблица загрузится и начнет работать сразу.
Команды для работы с таблицей маршрутизации
На разном оборудовании есть разные команды для работы с таблицами маршрутизации. Например, до оборудования компании Cisco допускаются только сертифицированные сотрудники. Они должны пройти обучение и получить сертификат у самого разработчика. Можно работать и без всего этого, но тогда разработчик не отвечает за нанесенный ущерб.
На других системах таких строгих требований нет, так что приведем примеры команд для основных операционных систем. Если же захотите настроить маршрутизацию на каком-то другом оборудовании, то для поиска команд загляните в инструкцию.
В Windows
В этой операционной системе используется команда route с разными модификаторами для работы с маршрутизацией. Вводится в командной строке Windows, открытой от имени администратора.
Параметр | Использование |
-f | Используйте для очистки таблицы маршрутизации, если хотите избавится от всего, что там наворотили. |
-p | Превращает запись в постоянную. Делает запись статической. После перезагрузки компьютера она останется в памяти таблицы маршрутизации, а без этого параметры после перезагрузки запись сотрется. |
add | Добавляет новую запись в таблицу. Без параметра –p запись будет динамической. |
change | Позволяет изменить указанную запись. |
delete | Удаляет указанную запись. |
Показывает на экране всю таблицу маршрутизации со всеми активными записями. | |
destination | Позволяет установить идентификатор сети назначения при создании или изменении записи. |
mask | Напишите для указания маски сети назначения. |
gateway | Указывайте шлюз. Если нужно строить маршрут до следующего маршрутизатора, то используйте его. |
metric | Указывайте метрику для маршрута. От 1 до 999, чем меньше метрика, тем активнее станет использоваться маршрут. |
if | Укажите номер интерфейса. |
Приведем несколько примеров использования команды:
- Показать текущие записи в таблице: route print
- Показать все маршруты к подсети: 192.17.x.x: route print 192.17.x.x
- Добавление новой записи с маршрутом для всех неизвестных подсетей при использовании шлюза по адресу 192.17.77.1: route -p add 0.0.0.0 mask 0.0.0.0 192.17.77.1
- Добавление записи маршрута для сети 102.25.98.0 через узел сети 102.25.90.1: route -p add 102.25.98.0 mask 255.255.255.0 102.25.90.1
- Удаление записи из таблицы: route delete 172.16.12.0 mask 255.255.0.0
В Linux
В linux для редактирования таблицы маршрутизации также придется использовать консоль. Есть два набора команд:
- Route. Устаревший набор команд, который до сих пор поддерживается всеми версиями систем, но обладает меньшим функционалом.
- IP Route. Имеет больший функционал, должен постепенно вывести прошлый инструмент из употребления. Будем разбирать его.
Откройте терминал и введите в нем «ip route», чтобы отобразить текущие записи в таблице.
Само построение команды выглядит как на представленной картинке. Если вам захочется применить её, то каждый из указанных пунктов замените на тот, что используется у вас в сети. Основные обозначения:
- [destination] – укажите адрес сети, подсети или конечного узла маршрута.
- [MASK netmask] – маска подсети.
- [gateway] – укажите адрес шлюза, через который будет идти обращение к другой сети.
- [METRIC metric] – задайте метрику, если устройство является маршрутизатором. Чем меньше число в метрике, тем чаще будет использоваться маршрут.
- [IF interface] – укажите интерфейс(порт), через который пойдет обмен информацией.
Расшифровка некоторых фраз, которые остаются могут показаться непонятными при использовании команды:
- via – читайте как «через», используется для указания шлюза или промежуточного узла.
- dev – используется для обозначения сетевого интерфейса.
- netmask – так называется маска подсети.
- metric – метрика.
При использовании самой команды могут использоваться следующие модификаторы:
- add – добавление записи в таблицу.
- del – удаление записи из таблицы.
- replace – замена одного маршрута другим, а не изменение готового маршрута.
- change – изменение одной из записей.
Приведем несколько примеров использования команды. На их основе можно построить то, что подойдет именно к вашему случаю:
- Ip route add -net 192.16.25.0/24 via 192.168.1.1 — для указанной сети устанавливается шлюз 192.168.1.1
- Ip route del 192.16.25.0/24 via 192.168.1.1 – удаляет записи об установке шлюза для указанной сети.
- ip route replace 172.16.10.0/24 via 192.168.1.3 – удаляет запись о старом шлюзе и заменяет запись о новом шлюзе для подсети.
- ip route replace default via 5.215.98.7 – изменение маршрута по умолчанию. Обычно применяется при смене адреса провайдера или при изменении основного маршрутизатора.
Все эти команды изменяют записи в динамической таблице. Чтобы сами записи сохранялись при перезагрузке, их нужно добавить в файл конфигурации. Информацию о том, где именно они хранятся лучше посмотреть в сети или в руководстве к системе. Например, в Red Hat используются конфигурационные файлы из каталога /etc/sysconfig/network-scripts/route-ethX.
Заключение
В статье разобрали для чего используются таблицы маршрутизации, какие они бывают и как работают. Обычно людям ненужно настраивать таблицы маршрутизации в домашних сетях, потому что динамическое построение таблиц в небольших сетях нисколько не тормозит работу устройств. В организациях с несколькими филиалами или с большим количеством конечных устройств маршрутизация может принести пользу.
Само изменение таблицы требуется в редких случаях, когда какое-то устройство не удается правильно обнаружить при его подключении. В этом случае имеет смысл добавить в таблицу статическую запись, чтобы каждый раз не мучатся с подключением устройства. В остальных случаях заниматься самостоятельной маршрутизацией пакетов по сети не стоит.
В данной статье мы рассмотрим настройку статической маршрутизации на роутере MikroTik. Да, задание маршрутов может происходить и динамически, но сегодня поговорим о процессе определения маршрута (направления) на основе правил, заданных вручную.
Содержание
- Основные моменты
- Схема стенда
- Настройка маршрута между R1 и R2
- Настройка R1 и R3 через R2
- Настройка резервного маршрута на микротике
- Check Gateway
- Балансировка нагрузки
- 89 вопросов по настройке MikroTik
Основные моменты
Стоит понимать, что роутинг работает на третьем уровне (L3), для ее работы нужны IP адреса. В роутерах Mikrotik есть определённый алгоритм работы RouterOS, он описан в Packet Flow Diagram v6. Нас интересует диаграмма Packet Flow Chains.
Можно задать очень интересный вопрос. Все мы знаем, что в заголовке IP пакета есть отправитель и получатель, в процессе его передачи, эти данные не меняются. Так же из определения выше мы знаем, что routing работает на L3, т.е. с IP адресами, на их основе и строятся маршруты. Но как же так, в настройках адаптера клиента указан IPшник основного шлюза, в таблицах маршрутизации так же указаны адреса роутеров, через которые доступны нужные сети. Как так получается, что источник и получатель не меняются в процессе передачи? (а они действительно не меняются).
Все дело в том, что, когда ваш клиентский комп хочет передать данные через шлюз, он делает arp-запрос на его IPшник (не broadcast), шлюз ему отвечает, происходит подстановка MAC шлюза в качестве получателя, на канальном уровне (L2) в ethernet кадр и данные отправляются. Шлюз получивший такой кадр, смотрит в IP заголовок, понимает, что получатель за пределами его локальной базы данных маршрутов, находит подходящий роут (об этом далее), делает arp-запрос нужного роутера, отправляет ethernet (если допустим это обычная сеть) кадр с MACом нужного роутера, и так до самого конца. Интересная штука выходит, IP адреса в пути следования не меняются, а MAC меняются.
Популярным вопросом у многих начинающих админов является «Я задал маршрут в нужную сеть, почему не работает?». На самом деле, пакеты долетают куда надо (если нет блокирующих правил по пути), т.е. в одну сторону. В связи с этим вам встречные вопросы:
- А вы задали обратный маршрут до вас?
- Как сеть назначения узнает, куда слать ответные пакеты?
Тут можно прибегнуть к маленькой хитрости, включить NAT на стороне отправителя. Но так делать не стоит. Только в особых случаях.
Алгоритмы выбора маршрута:
- Самый высокий приоритет имеет сеть/адрес /32 маской. Чем уже маска, тем приоритетнее;
- Default Route имеет самый наименьший приоритет 0.0.0.0/0.
После выбора маршрута происходит выбор по метрике, чем меньше метрика, тем приоритетнее:
- distance=0 — наивысшая метрика;
- distance=254 – наименьшая метрика;
- distance=255 – недоступный маршрут.
Пора перейти от теории к практике.
Если вы хотите углубить свои знания по работе с роутерами MikroTik, то наша команда рекомендует пройти курсы которые сделаны на основе MikroTik Certified Network Associate и расширены автором на основе опыта . Подробно читайте ниже.
Схема стенда
Внимательно ознакомьтесь со схемой, на примере ее мы будем показывать как на роутерах mikrotik настраивать маршрутизацию между подсетями и как мониторить шлюз и в случае его недоступности переключится на резервный.
Входные данные:
- Имеется 4 шлюза;
- 4 ПК;
- Адресация между роутерами 10.10.1.0/24…10.10.4.0/24;
- Локальные адреса клиентов192.168.1.0/24…192.168.4.0/24;
- RouterOS 6.48.1
Настройка маршрута между R1 и R2
Мы имеем две сети за обоими роутерами, 192.168.1.0/24 и 192.168.2.0/24 соответственно. Откроем IP-Routes на R1.
У всех записей есть метки состояния. В нашем случае DAC:
- Dinamic;
- Active;
- Connected.
Если роутер имеет IP на интерфейсе, то запись будет с самым высоким приоритетом. Значения всех состояний можно посмотреть на сайте mikrotik.com
Но мы не видим роут в нужную сеть. Добавим его.
В Dst. Address указываем сеть/адрес назначения. Gateway указываем IP шлюза или интерфейс, через который можем передавать данные. Метрику обычно изменяю, т.к. в будущем может понадобится создавать более приоритетные. Если мы сейчас отправим ping запросы с PC1 на PC2, то ответов мы не увидим.
Пакеты летят, но только на передачу. В ответ мы ничего не получаем. Исправим ситуацию и пропишем обратный роут на R2.
Теперь все хорошо.
Настройка R1 и R3 через R2
Для успешного прохождения трафика, на R1 нужно указать, через кого доступна 192.168.3.0/24.
На R2, указываем через кого доступна эта же сеть.
А на R3 в обратную сторону, т.е. до 192.168.1.0/24 через R2
Настройка резервного маршрута на микротике
Сделаем резервный хоп до 192.168.3.0/24 через R4. На R1 создадим роут, но изменим метрику, т.е. понизим.
После применения, запись подсвечивается, это означает что она доступна, но не активна (отсутствует A – Active). В случае недоступности через более приоритетную метрику, Mikrotik будет слать данные через R4.
На R4 скажем, через кого доступны сети за R1 и R3.
На R3 создадим резервный маршрут с наименьшим приоритетом.
Check Gateway
Пришло время рассказать про опцию Check Gateway. Она позволяет проверять доступность соседа по ICMP или ARP запросам. Но также вы можете ее отключить. Предлагаю на маршруте к 192.168.3.0/24 через R2, на R1 и R3 включить данную опцию с ping запросами. В этом случае, каждый Mikrotik раз в 10 сек. будет отправлять один ping запрос, если ответа не будет в течении трёх запросов, то он считается недействительным.
Следом на R2 включаем блокировку ICMP запросов.
И смотрим как маршруты на R1 и R3 с метрикой 10, стали unreachable.
Проверим роутинг с PC1 на PC3.
Но как только мы отключим правило блокировки на R2, и пройдет хотя бы один ping запрос, маршруты перестроятся обратно.
Балансировка нагрузки
ECMP — Equal-Cost Multi-Path – равнозначный маршрут. Указывая в правиле 2 и более шлюза, мы тем самым включаем ECMP. Данные тем самым будут пересылаться по принципу Round Robin.
Добавим R4 на R1 и R3 в основном маршруте клиентов друг к другу.
Обратите внимание на трафик на интерфейсах. На R1 он уходит через один, а возвращается через другой. Так же огорчу читателя. Что Check Gateway с ECMP не работает.
Если допустим у вас канал через R2 200Mb/s а через R3 100Mb/s, то можно нагрузить первый канал в 2 (а то и более) раза больше, чем второй.
Хотелось бы напоследок отметить, что статическая маршрутизация как на микротик так и на других роутерах является самой экономичной моделью, т.к. на ее работу не нужно включать динамические протоколы маршрутизации. Но сложность администрирования и большая вероятность допущения ошибок являются основными моментами, которые нужно учесть при проектировании.
89 вопросов по настройке MikroTik
Вы хорошо разбираетесь в Микротиках? Или впервые недавно столкнулись с этим оборудованием и не знаете, с какой стороны к нему подступиться? В обоих случаях вы найдете для себя полезную информацию в курсе «Настройка оборудования MikroTik». 162 видеоурока, большая лабораторная работа и 89 вопросов, на каждый из которых вы будете знать ответ. Подробности и доступ к началу курса бесплатно тут.