mikrotik-wiki.ru
Главная
Загрузка...

Статические маршруты на MikroTik — routing table и scope

RouterOS 7.xRouting11 мин130 мар. 2026 г.
TelegramVK

Статические маршруты — основа маршрутизации на MikroTik. Даже если в сети используются динамические протоколы (OSPF, BGP), понимание статических маршрутов, таблиц маршрутизации, scope и target-scope необходимо для корректной работы recursive routing, failover и policy-based routing. В RouterOS 7 синтаксис маршрутов изменился, появилась поддержка VRF и расширенные возможности routing tables. В этом руководстве — от базовых маршрутов до продвинутых сценариев с рекурсией и PBR.

Описание

Типы маршрутов в RouterOS

RouterOS различает несколько типов маршрутов по их происхождению:

ТипОписаниеПример
ConnectedАвтоматически создаются при назначении IP на интерфейс192.168.88.0/24 на bridge-LAN
StaticВручную добавленные администраторомDefault route 0.0.0.0/0
DynamicСозданные протоколами маршрутизации (OSPF, BGP, RIP) или DHCPМаршруты, полученные от ISP по DHCP
BlackholeТрафик отбрасывается без ICMP-ответаАнкер для BGP-анонсов
UnreachableТрафик отбрасывается с ICMP Destination UnreachableЯвный запрет доступа к подсети
ProhibitТрафик отбрасывается с ICMP Administratively ProhibitedАдминистративный запрет

Distance (метрика предпочтения)

Distance определяет приоритет маршрута при наличии нескольких маршрутов к одной подсети. Чем меньше distance, тем предпочтительнее маршрут:

Источник маршрутаDistance по умолчанию
Connected0
Static1
eBGP20
OSPF110
RIP120
iBGP200

Если два static-маршрута ведут к одной подсети с разным distance, активен будет маршрут с меньшим distance. Маршрут с большим distance станет активным только при недоступности первого — это основа для failover.

Gateway types

Статический маршрут может указывать на:

  • IP-адрес — следующий hop (next-hop). Самый распространённый вариант.
  • Интерфейс — трафик отправляется через указанный интерфейс. Используется для point-to-point линков (PPPoE, VPN).
  • IP + интерфейс — явное указание и next-hop, и выходного интерфейса. Полезно при наличии нескольких маршрутов к одному next-hop.

Настройка

Базовые статические маршруты

Default route (маршрут по умолчанию):

[admin@MikroTik] >
/ip/route add dst-address=0.0.0.0/0 gateway=192.168.1.1 comment="Default route via ISP"

Это самый важный маршрут — он направляет весь трафик, для которого нет более специфичного маршрута, на gateway ISP.

Маршрут к удалённой подсети:

[admin@MikroTik] >
/ip/route add dst-address=10.20.30.0/24 gateway=192.168.88.254 comment="Branch office via VPN router"

Маршрут через интерфейс (point-to-point):

[admin@MikroTik] >
/ip/route add dst-address=0.0.0.0/0 gateway=pppoe-out1 comment="Default via PPPoE"

Для PPPoE-соединений gateway указывается как имя интерфейса, потому что IP-адрес gateway может меняться при переподключении.

Distance и failover

Классический сценарий: два ISP, основной и резервный. Основной канал — ISP A (ether1), резервный — ISP B (ether2):

[admin@MikroTik] >
# Основной маршрут — distance 1 (приоритетный)
/ip/route add dst-address=0.0.0.0/0 gateway=192.168.1.1 distance=1 comment="ISP A - primary"

# Резервный маршрут — distance 2 (активируется при недоступности ISP A)
/ip/route add dst-address=0.0.0.0/0 gateway=10.0.0.1 distance=2 comment="ISP B - backup"

При такой настройке маршрут через ISP B станет active только если маршрут через ISP A будет удалён из таблицы (например, при падении интерфейса ether1).

Проблема: если интерфейс ether1 остаётся up, но ISP A перестал маршрутизировать трафик (проблема на стороне провайдера), failover не сработает. Для решения используется check-gateway.

Check-Gateway — проверка доступности gateway

[admin@MikroTik] >
/ip/route add dst-address=0.0.0.0/0 gateway=192.168.1.1 distance=1 \
  check-gateway=ping comment="ISP A - primary with health check"

/ip/route add dst-address=0.0.0.0/0 gateway=10.0.0.1 distance=2 \
  check-gateway=ping comment="ISP B - backup with health check"

Параметр check-gateway=ping заставляет RouterOS периодически пинговать gateway. Если gateway не отвечает на ping в течение 10 секунд (два неудачных пинга подряд с интервалом 5 секунд), маршрут помечается как unreachable и деактивируется.

Опции check-gateway:

  • ping — ICMP echo request к gateway IP
  • arp — ARP-запрос к gateway (работает только для directly connected)
  • bfd — Bidirectional Forwarding Detection (быстрый, < 1 секунды)

Рекомендация: для failover между двумя ISP используйте check-gateway=ping. Для подробного сценария dual-WAN failover с netwatch и маршрутизацией по источнику смотрите статью о failover с двумя провайдерами.

Recursive Routing — scope и target-scope

Recursive routing — продвинутая техника, при которой маршрут ссылается на next-hop, доступный не напрямую, а через другой маршрут. Это основа для надёжного failover через мониторинг удалённого хоста (а не только gateway ISP).

Проблема: check-gateway=ping проверяет только ближайший gateway. Если gateway отвечает, но интернет за ним недоступен — failover не сработает.

Решение: recursive route через удалённый хост:

[admin@MikroTik] >
# Шаг 1: маршруты к «проверочным» хостам через каждого ISP
/ip/route add dst-address=8.8.8.8/32 gateway=192.168.1.1 scope=10 target-scope=10 \
  comment="Google DNS via ISP A (probe)"

/ip/route add dst-address=1.1.1.1/32 gateway=10.0.0.1 scope=10 target-scope=10 \
  comment="Cloudflare DNS via ISP B (probe)"

# Шаг 2: recursive default routes через эти хосты
/ip/route add dst-address=0.0.0.0/0 gateway=8.8.8.8 distance=1 \
  check-gateway=ping target-scope=11 \
  comment="Default via ISP A (recursive, check 8.8.8.8)"

/ip/route add dst-address=0.0.0.0/0 gateway=1.1.1.1 distance=2 \
  check-gateway=ping target-scope=11 \
  comment="Default via ISP B (recursive, check 1.1.1.1)"

Как это работает:

  1. Маршрут 0.0.0.0/0 с gateway=8.8.8.8 — рекурсивный. RouterOS ищет маршрут к 8.8.8.8.
  2. Маршрут к 8.8.8.8 найден через 192.168.1.1 (ISP A). Рекурсия разрешена.
  3. check-gateway=ping пингует 8.8.8.8 (а не 192.168.1.1). Если 8.8.8.8 недоступен через ISP A — маршрут деактивируется.
  4. Активируется резервный маршрут через 1.1.1.1 (ISP B).

Scope и Target-Scope — ключевые параметры:

ПараметрОписаниеЗначение по умолчанию
scope«Видимость» маршрута для рекурсии. Определяет, кто может ссылаться на этот маршрут30 (static), 10 (connected)
target-scopeМаксимальное значение scope маршрута, через который разрешена рекурсия10

Правило: рекурсивный маршрут (gateway = remote IP) разрешается через промежуточный маршрут, только если target-scope рекурсивного маршрута >= scope промежуточного маршрута.

В нашем примере:

  • Маршрут к 8.8.8.8 имеет scope=10 — его видят маршруты с target-scope >= 10
  • Default route имеет target-scope=11 — он «видит» маршрут к 8.8.8.8 (11 >= 10)
  • Маршрут к 8.8.8.8 имеет target-scope=10 — он разрешается через connected-маршруты (scope=10)

Если scope/target-scope настроены неправильно, рекурсия не разрешится и маршрут будет неактивным.

Routing Tables и Policy-Based Routing (PBR)

По умолчанию все маршруты находятся в таблице main. RouterOS 7 позволяет создавать дополнительные таблицы маршрутизации для PBR — маршрутизации на основе источника, порта или других критериев.

Шаг 1: Создание routing table:

[admin@MikroTik] >
/routing/table add name=to-isp-b fib comment="Routing table for traffic via ISP B"

Параметр fib указывает, что таблица будет использоваться для реальной пересылки пакетов (Forwarding Information Base), а не только для хранения маршрутов.

Шаг 2: Добавление маршрута в таблицу:

[admin@MikroTik] >
/ip/route add dst-address=0.0.0.0/0 gateway=10.0.0.1 routing-table=to-isp-b \
  comment="Default via ISP B in separate table"

Шаг 3: Маркировка трафика через mangle:

[admin@MikroTik] >
# Весь трафик из подсети 192.168.88.0/24 — через ISP B
/ip/firewall/mangle add \
  chain=prerouting \
  src-address=192.168.88.0/24 \
  action=mark-routing \
  new-routing-mark=to-isp-b \
  passthrough=yes \
  comment="Route 192.168.88.0/24 via ISP B"

Шаг 4: NAT для трафика через ISP B:

[admin@MikroTik] >
/ip/firewall/nat add \
  chain=srcnat \
  routing-mark=to-isp-b \
  out-interface=ether2 \
  action=masquerade \
  comment="NAT for ISP B traffic"

Типичные сценарии PBR:

  • Разные подсети через разных ISP
  • VoIP-трафик через провайдера с лучшей latency
  • Трафик к определённым серверам через VPN
  • Разделение бизнес-трафика и гостевого Wi-Fi по разным каналам

Blackhole и Unreachable маршруты

Blackhole — молча отбрасывает пакеты. Используется для:

  • Анкерных маршрутов в BGP (см. статью о BGP)
  • Защиты от routing loops
  • Блокировки трафика без нагрузки на firewall
[admin@MikroTik] >
/ip/route add dst-address=203.0.113.0/24 type=blackhole comment="BGP anchor"

Unreachable — отбрасывает с ICMP Destination Unreachable:

[admin@MikroTik] >
/ip/route add dst-address=10.99.0.0/16 type=unreachable comment="Non-existent network"

Prohibit — отбрасывает с ICMP Administratively Prohibited:

[admin@MikroTik] >
/ip/route add dst-address=192.168.200.0/24 type=prohibit comment="Blocked network"

Разница между blackhole, unreachable и prohibit:

  • blackhole — пакет тихо отбрасывается. Отправитель ничего не узнает (timeout).
  • unreachable — отправитель получит ICMP «Destination Unreachable» (host unreachable).
  • prohibit — отправитель получит ICMP «Administratively Prohibited» (communication administratively filtered).

VRF (Virtual Routing and Forwarding)

VRF позволяет создать полностью изолированные таблицы маршрутизации с отдельными интерфейсами. В отличие от routing tables (PBR), VRF изолирует интерфейсы на уровне L3 — одинаковые IP-подсети могут существовать в разных VRF без конфликтов.

[admin@MikroTik] >
# Создание VRF
/ip/vrf add name=vrf-guest interfaces=ether5 comment="Guest network VRF"

# Маршруты внутри VRF
/ip/route add dst-address=0.0.0.0/0 gateway=10.10.10.1 vrf=vrf-guest

# IP-адрес на интерфейсе в VRF
/ip/address add address=10.10.10.254/24 interface=ether5

VRF полезен для:

  • Полной изоляции гостевой сети от корпоративной
  • Multi-tenant сценариев (несколько клиентов на одном маршрутизаторе)
  • Пересечение IP-адресации (два клиента с 192.168.1.0/24)

Ограничение: VRF в RouterOS имеет ограниченную функциональность по сравнению с Cisco/Juniper. Не все сервисы (DNS, SNMP) корректно работают в контексте VRF.

Проверка

Просмотр таблицы маршрутизации

[admin@MikroTik] >
/ip/route/print

Для детального вывода с атрибутами:

[admin@MikroTik] >
/ip/route/print detail where static

Фильтр по типу маршрута:

[admin@MikroTik] >
# Только connected маршруты
/ip/route/print where connect

# Только static маршруты
/ip/route/print where static

# Только dynamic (OSPF, BGP, DHCP)
/ip/route/print where dynamic

# Только active маршруты
/ip/route/print where active

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

[admin@MikroTik] >
/ip/route/print detail where dst-address=0.0.0.0/0

В выводе обратите внимание на поле gateway-status. Для рекурсивного маршрута оно покажет цепочку разрешения:

code
gateway=8.8.8.8 gateway-status=8.8.8.8 recursive via 192.168.1.1

Если рекурсия не разрешилась:

code
gateway=8.8.8.8 gateway-status=8.8.8.8 unreachable

Это значит scope/target-scope настроены неправильно.

Проверка маршрута к конкретному адресу

[admin@MikroTik] >
/ip/route/check 8.8.8.8

Команда покажет, какой именно маршрут будет использован для доставки пакета к указанному IP:

code
      dst-address: 0.0.0.0/0
        gateway: 192.168.1.1
      interface: ether1

Traceroute для проверки пути

[admin@MikroTik] >
/tool/traceroute address=8.8.8.8 count=1

Проверка routing tables (PBR)

[admin@MikroTik] >
/routing/table/print
/ip/route/print where routing-table=to-isp-b

Мониторинг состояния gateway

[admin@MikroTik] >
/ip/route/print where gateway-status~"unreachable"

Эта команда покажет все маршруты с недоступным gateway — полезно для быстрой диагностики.

Типичные ошибки

1. Маршрут не активен (inactive)

Симптом: маршрут добавлен, виден в print, но не помечен как active.

Причины:

  • Gateway недоступен (нет ARP-записи, интерфейс down)
  • Существует более специфичный или более приоритетный маршрут (меньший distance)
  • Для рекурсивного маршрута — не разрешена рекурсия (scope/target-scope)

Диагностика:

[admin@MikroTik] >
/ip/route/print detail where dst-address=0.0.0.0/0

Проверьте gateway-status — там будет указана причина неактивности.

2. Неправильный scope/target-scope в recursive routing

Симптом: рекурсивный маршрут (gateway = удалённый IP) не активен, gateway-status показывает «unreachable».

Причина: target-scope рекурсивного маршрута меньше, чем scope промежуточного маршрута.

Решение: убедитесь что цепочка scope корректна:

[admin@MikroTik] >
# Промежуточный маршрут к probe-хосту
/ip/route add dst-address=8.8.8.8/32 gateway=192.168.1.1 scope=10 target-scope=10

# Рекурсивный default route — target-scope должен быть >= scope промежуточного
/ip/route add dst-address=0.0.0.0/0 gateway=8.8.8.8 target-scope=11

Если scope промежуточного маршрута = 10, а target-scope рекурсивного = 10 — рекурсия разрешится (10 >= 10). Если target-scope = 9 — не разрешится (9 < 10).

3. Check-gateway не срабатывает

Симптом: gateway ISP не пингуется, но маршрут остаётся active.

Причина: check-gateway не указан (по умолчанию — none).

Решение:

[admin@MikroTik] >
/ip/route set [find dst-address=0.0.0.0/0 gateway=192.168.1.1] check-gateway=ping

Также убедитесь, что gateway действительно отвечает на ICMP. Некоторые ISP-роутеры не отвечают на ping — в этом случае check-gateway не поможет, используйте recursive routing с проверкой удалённого хоста.

4. Routing loop при PBR

Симптом: пакеты с routing-mark не доходят до назначения, traceroute показывает петлю.

Причина: в таблице to-isp-b нет маршрута к dst-address, или NAT не настроен для этого routing-mark.

Решение: в каждой дополнительной routing table должен быть как минимум default route:

[admin@MikroTik] >
/ip/route/print where routing-table=to-isp-b

Если таблица пуста — добавьте default route:

[admin@MikroTik] >
/ip/route add dst-address=0.0.0.0/0 gateway=10.0.0.1 routing-table=to-isp-b

Также проверьте NAT — без masquerade/srcnat для трафика с routing-mark ответные пакеты не вернутся.

5. Connected-маршрут пропал

Симптом: подсеть, назначенная на интерфейс, недоступна. Connected-маршрут отсутствует в таблице.

Причина: интерфейс disabled или link down. Connected-маршруты существуют только при активном интерфейсе с назначенным IP.

Решение:

[admin@MikroTik] >
/interface/print where name=bridge-LAN
/ip/address/print where interface=bridge-LAN

Убедитесь, что интерфейс running=yes и IP-адрес назначен корректно.

6. ECMP вместо failover

Симптом: трафик распределяется между двумя ISP одновременно, вместо использования одного основного.

Причина: оба маршрута имеют одинаковый distance. RouterOS автоматически включает ECMP (Equal-Cost Multi-Path) для маршрутов с одинаковым distance к одной подсети.

Решение: если нужен failover, а не балансировка — задайте разный distance:

[admin@MikroTik] >
/ip/route set [find gateway=192.168.1.1 dst-address=0.0.0.0/0] distance=1
/ip/route set [find gateway=10.0.0.1 dst-address=0.0.0.0/0] distance=2

Если нужен именно ECMP (балансировка между ISP) — оставьте одинаковый distance, но настройте корректный NAT для обоих выходных интерфейсов.

7. Маршруты от DHCP-клиента конфликтуют со статическими

Симптом: после получения IP по DHCP на WAN-интерфейсе появляется dynamic default route, который конкурирует со статическими маршрутами.

Причина: DHCP-клиент добавляет default route с distance=1, как и ваш статический маршрут.

Решение: изменить distance маршрута, добавляемого DHCP-клиентом:

[admin@MikroTik] >
/ip/dhcp-client set [find interface=ether1] default-route-distance=5

Или отключить добавление default route от DHCP:

[admin@MikroTik] >
/ip/dhcp-client set [find interface=ether1] add-default-route=no

И добавить собственный статический маршрут с нужными параметрами (check-gateway, distance).

Рекомендации

  • Всегда указывайте comment для статических маршрутов — через полгода вы не вспомните, зачем добавляли маршрут к 10.99.0.0/16
  • Используйте check-gateway=ping для всех default routes через ISP
  • Для надёжного failover применяйте recursive routing с проверкой удалённого хоста (8.8.8.8, 1.1.1.1), а не только ближайшего gateway
  • Не создавайте routing tables без необходимости — каждая дополнительная таблица усложняет диагностику
  • Для просмотра маршрута к конкретному адресу используйте /ip/route/check — это быстрее, чем разбирать всю таблицу вручную
  • Перед изменением маршрутов на production-роутере — сделайте backup и имейте доступ через альтернативный канал (например, LTE или console cable)
[admin@MikroTik] >
/ip/route add dst-address=0.0.0.0/0 gateway=192.168.1.1 comment="Default route via ISP"
/ip/route add dst-address=10.20.30.0/24 gateway=192.168.88.254 comment="Branch office via VPN router"
/ip/route add dst-address=0.0.0.0/0 gateway=pppoe-out1 comment="Default via PPPoE"
# Основной маршрут — distance 1 (приоритетный)
/ip/route add dst-address=0.0.0.0/0 gateway=192.168.1.1 distance=1 comment="ISP A - primary"

# Резервный маршрут — distance 2 (активируется при недоступности ISP A)
/ip/route add dst-address=0.0.0.0/0 gateway=10.0.0.1 distance=2 comment="ISP B - backup"
/ip/route add dst-address=0.0.0.0/0 gateway=192.168.1.1 distance=1 \
  check-gateway=ping comment="ISP A - primary with health check"

/ip/route add dst-address=0.0.0.0/0 gateway=10.0.0.1 distance=2 \
  check-gateway=ping comment="ISP B - backup with health check"
# Шаг 1: маршруты к «проверочным» хостам через каждого ISP
/ip/route add dst-address=8.8.8.8/32 gateway=192.168.1.1 scope=10 target-scope=10 \
  comment="Google DNS via ISP A (probe)"

/ip/route add dst-address=1.1.1.1/32 gateway=10.0.0.1 scope=10 target-scope=10 \
  comment="Cloudflare DNS via ISP B (probe)"

# Шаг 2: recursive default routes через эти хосты
/ip/route add dst-address=0.0.0.0/0 gateway=8.8.8.8 distance=1 \
  check-gateway=ping target-scope=11 \
  comment="Default via ISP A (recursive, check 8.8.8.8)"

/ip/route add dst-address=0.0.0.0/0 gateway=1.1.1.1 distance=2 \
  check-gateway=ping target-scope=11 \
  comment="Default via ISP B (recursive, check 1.1.1.1)"
/routing/table add name=to-isp-b fib comment="Routing table for traffic via ISP B"
/ip/route add dst-address=0.0.0.0/0 gateway=10.0.0.1 routing-table=to-isp-b \
  comment="Default via ISP B in separate table"
# Весь трафик из подсети 192.168.88.0/24 — через ISP B
/ip/firewall/mangle add \
  chain=prerouting \
  src-address=192.168.88.0/24 \
  action=mark-routing \
  new-routing-mark=to-isp-b \
  passthrough=yes \
  comment="Route 192.168.88.0/24 via ISP B"
/ip/firewall/nat add \
  chain=srcnat \
  routing-mark=to-isp-b \
  out-interface=ether2 \
  action=masquerade \
  comment="NAT for ISP B traffic"
/ip/route add dst-address=203.0.113.0/24 type=blackhole comment="BGP anchor"
/ip/route add dst-address=10.99.0.0/16 type=unreachable comment="Non-existent network"
/ip/route add dst-address=192.168.200.0/24 type=prohibit comment="Blocked network"
# Создание VRF
/ip/vrf add name=vrf-guest interfaces=ether5 comment="Guest network VRF"

# Маршруты внутри VRF
/ip/route add dst-address=0.0.0.0/0 gateway=10.10.10.1 vrf=vrf-guest

# IP-адрес на интерфейсе в VRF
/ip/address add address=10.10.10.254/24 interface=ether5
/ip/route/print
/ip/route/print detail where static
# Только connected маршруты
/ip/route/print where connect

# Только static маршруты
/ip/route/print where static

# Только dynamic (OSPF, BGP, DHCP)
/ip/route/print where dynamic

# Только active маршруты
/ip/route/print where active
/ip/route/print detail where dst-address=0.0.0.0/0
gateway=8.8.8.8 gateway-status=8.8.8.8 recursive via 192.168.1.1
gateway=8.8.8.8 gateway-status=8.8.8.8 unreachable
/ip/route/check 8.8.8.8
dst-address: 0.0.0.0/0
        gateway: 192.168.1.1
      interface: ether1
/tool/traceroute address=8.8.8.8 count=1
/routing/table/print
/ip/route/print where routing-table=to-isp-b
/ip/route/print where gateway-status~"unreachable"
/ip/route/print detail where dst-address=0.0.0.0/0
# Промежуточный маршрут к probe-хосту
/ip/route add dst-address=8.8.8.8/32 gateway=192.168.1.1 scope=10 target-scope=10

# Рекурсивный default route — target-scope должен быть >= scope промежуточного
/ip/route add dst-address=0.0.0.0/0 gateway=8.8.8.8 target-scope=11
/ip/route set [find dst-address=0.0.0.0/0 gateway=192.168.1.1] check-gateway=ping
/ip/route/print where routing-table=to-isp-b
/ip/route add dst-address=0.0.0.0/0 gateway=10.0.0.1 routing-table=to-isp-b
/interface/print where name=bridge-LAN
/ip/address/print where interface=bridge-LAN
/ip/route set [find gateway=192.168.1.1 dst-address=0.0.0.0/0] distance=1
/ip/route set [find gateway=10.0.0.1 dst-address=0.0.0.0/0] distance=2
/ip/dhcp-client set [find interface=ether1] default-route-distance=5
/ip/dhcp-client set [find interface=ether1] add-default-route=no
Routing / Статические маршруты на MikroTik — routing table и scope