Routes на MikroTik — таблица маршрутизации и gateway
Маршрутизация IP на MikroTik — таблица маршрутов и gateway
Маршрутизация — основа работы любого роутера. Когда пакет приходит на MikroTik, система смотрит таблицу маршрутов и определяет, куда его отправить: в локальную сеть, на шлюз провайдера или на VPN-туннель. Понимание таблицы маршрутов, типов маршрутов, distance и check-gateway — обязательное знание для администратора MikroTik. В этой статье разберём теорию маршрутизации и практические команды. Детальная настройка статических маршрутов и failover описана в отдельных статьях.
Описание
Как работает маршрутизация
Когда RouterOS получает IP-пакет, происходит поиск в таблице маршрутов по принципу longest prefix match — выбирается маршрут с наиболее длинной маской, совпадающей с адресом назначения. Если пакет идёт к 10.0.1.50:
- Маршрут 10.0.1.0/24 через ether2 — совпадение, маска /24
- Маршрут 10.0.0.0/16 через VPN — совпадение, маска /16
- Маршрут 0.0.0.0/0 через провайдера — совпадение, маска /0
Выбирается первый вариант (longest prefix match — /24 длиннее /16 и /0).
Типы маршрутов
В таблице маршрутов каждый маршрут имеет флаг, указывающий на его происхождение:
| Флаг | Тип | Описание |
|---|---|---|
| C | Connected | Автоматически создаётся при назначении IP на интерфейс |
| S | Static | Добавлен вручную администратором |
| D | Dynamic | Создан динамически (DHCP-client, PPPoE и т.д.) |
| o | OSPF | Получен через протокол OSPF |
| b | BGP | Получен через протокол BGP |
| r | RIP | Получен через протокол RIP |
Маршруты connected (C) появляются автоматически при назначении IP-адреса интерфейсу. Если на bridge-LAN назначен 192.168.88.1/24, то маршрут 192.168.88.0/24 через bridge-LAN появится автоматически.
Default Route (маршрут по умолчанию)
Маршрут по умолчанию (0.0.0.0/0) — "ловушка" для всех пакетов, которые не совпали с более конкретными маршрутами. Обычно это шлюз провайдера:
[admin@MikroTik] >/ip/route/add dst-address=0.0.0.0/0 gateway=192.168.1.1 comment="ISP Gateway"
Если интернет приходит через DHCP от провайдера, default route создаётся автоматически DHCP-клиентом (флаг D).
Distance (административная дистанция)
Distance определяет приоритет маршрута, когда к одному dst-address ведут несколько маршрутов. Чем меньше значение — тем выше приоритет:
| Тип маршрута | Distance по умолчанию |
|---|---|
| Connected | 0 |
| Static | 1 |
| OSPF intra-area | 110 |
| RIP | 120 |
| BGP (eBGP) | 20 |
| BGP (iBGP) | 200 |
Пример: два маршрута к 0.0.0.0/0 — через основного провайдера (distance=1) и резервного (distance=2). При доступности обоих используется основной. Если основной недоступен — трафик переключается на резервный. Это основа failover.
Check-gateway
Параметр check-gateway определяет, как RouterOS проверяет доступность шлюза:
| Значение | Механизм | Когда использовать |
|---|---|---|
| ping | ICMP ping к gateway каждые 10 секунд | Универсальный вариант |
| arp | ARP-запрос к gateway | Когда gateway не отвечает на ping |
| none | Проверка не выполняется | Для статических маршрутов, которые всегда должны быть активны |
Если check-gateway=ping и шлюз не отвечает на 3 последовательных ping — маршрут деактивируется, и трафик переходит на следующий по distance.
Специальные типы маршрутов
RouterOS поддерживает несколько специальных типов маршрутов для управления трафиком:
| Тип | Описание | Применение |
|---|---|---|
| blackhole | Пакет молча отбрасывается | Защита от routing loops, BGP blackholing |
| unreachable | Отправителю возвращается ICMP Destination Unreachable | Явный запрет доступа к сети |
| prohibit | Отправителю возвращается ICMP Administratively Prohibited | Административный запрет |
Настройка
Просмотр таблицы маршрутов
[admin@MikroTik] ># Полная таблица маршрутов /ip/route/print # Компактный вид /ip/route/print brief # Подробная информация /ip/route/print detail # Только активные маршруты /ip/route/print where active=yes # Только статические маршруты /ip/route/print where static=yes
Добавление статических маршрутов
Базовый статический маршрут:
[admin@MikroTik] ># Маршрут к удалённой подсети через шлюз /ip/route/add dst-address=10.10.0.0/24 gateway=192.168.88.2 \ comment="Филиал через VPN" # Default route с check-gateway /ip/route/add dst-address=0.0.0.0/0 gateway=203.0.113.1 \ distance=1 check-gateway=ping comment="ISP1 Main"
Маршрут через интерфейс (point-to-point):
[admin@MikroTik] >/ip/route/add dst-address=10.20.0.0/24 gateway=wireguard1 \ comment="Удалённый офис через WireGuard"
Настройка Failover (базовый)
Два провайдера с автоматическим переключением:
[admin@MikroTik] ># Основной провайдер — distance=1 (приоритет выше) /ip/route/add dst-address=0.0.0.0/0 gateway=203.0.113.1 \ distance=1 check-gateway=ping comment="ISP1 Main" # Резервный провайдер — distance=2 (переключится при падении ISP1) /ip/route/add dst-address=0.0.0.0/0 gateway=198.51.100.1 \ distance=2 check-gateway=ping comment="ISP2 Backup"
Когда шлюз ISP1 перестаёт отвечать на ping, маршрут с distance=1 деактивируется, и трафик автоматически уходит через ISP2.
Preferred Source (pref-src)
Параметр pref-src указывает, какой source IP использовать для пакетов, исходящих от самого роутера (не транзитных):
[admin@MikroTik] ># Пакеты от роутера к ISP1 идут с адреса 203.0.113.5 /ip/route/add dst-address=0.0.0.0/0 gateway=203.0.113.1 \ pref-src=203.0.113.5 distance=1 comment="ISP1 с указанным source"
Это важно для корректной работы DNS, NTP и других сервисов роутера при наличии нескольких WAN-интерфейсов. Без pref-src роутер может использовать неправильный source IP, и ответные пакеты не дойдут.
Специальные маршруты
[admin@MikroTik] ># Blackhole — пакеты к этой сети молча отбрасываются /ip/route/add dst-address=192.168.99.0/24 type=blackhole \ comment="Blackhole: сеть выведена из эксплуатации" # Unreachable — отправителю возвращается ICMP Unreachable /ip/route/add dst-address=10.99.0.0/16 type=unreachable \ comment="Сеть не существует" # Prohibit — ICMP Administratively Prohibited /ip/route/add dst-address=172.16.0.0/12 type=prohibit \ comment="Доступ к этим сетям запрещён"
Routing Mark и Policy-Based Routing
Routing mark позволяет направлять определённый трафик через альтернативный маршрут. Это основа policy-based routing (PBR):
[admin@MikroTik] ># Создаём routing table /routing/table/add name=ISP2 fib # Маршрут по умолчанию для таблицы ISP2 /ip/route/add dst-address=0.0.0.0/0 gateway=198.51.100.1 \ routing-table=ISP2 comment="Default route для ISP2" # В Mangle маркируем трафик от подсети 192.168.20.0/24 /ip/firewall/mangle/add chain=prerouting \ src-address=192.168.20.0/24 \ action=mark-routing new-routing-mark=ISP2 \ passthrough=no comment="Подсеть 20 через ISP2"
Теперь весь трафик от подсети 192.168.20.0/24 будет уходить через ISP2, а остальной — через ISP1 по основной таблице маршрутов.
VRF (Virtual Routing and Forwarding)
VRF позволяет создать несколько изолированных таблиц маршрутизации на одном роутере. Каждый VRF имеет собственный набор маршрутов и интерфейсов:
[admin@MikroTik] ># Создание VRF /ip/vrf/add name=VRF-CLIENTS interfaces=bridge-CLIENTS # Маршруты в VRF добавляются через routing-table /ip/route/add dst-address=0.0.0.0/0 gateway=10.0.0.1 \ routing-table=VRF-CLIENTS comment="Default для клиентов"
VRF — продвинутая тема, применяемая в провайдерских сетях и сложных enterprise-инсталляциях. Для большинства задач достаточно routing mark.
Проверка
Проверка активных маршрутов
[admin@MikroTik] ># Какие маршруты сейчас активны /ip/route/print where active=yes # Проверка конкретного маршрута — через какой gateway пойдёт пакет /ip/route/check 8.8.8.8 # Показать все маршруты к определённой сети /ip/route/print where dst-address=0.0.0.0/0
Диагностика проблем маршрутизации
[admin@MikroTik] ># Трассировка маршрута до хоста /tool/traceroute address=8.8.8.8 # Ping с указанием source — проверка pref-src /ping 8.8.8.8 src-address=203.0.113.5 count=5 # Проверка routing table для policy-based routing /ip/route/print where routing-table=ISP2 # Мониторинг маршрутов в реальном времени /ip/route/print interval=5s
Проверка работы check-gateway
[admin@MikroTik] ># Если маршрут неактивен — check-gateway обнаружил недоступность шлюза /ip/route/print where active=no # Проверка доступности шлюза вручную /ping 203.0.113.1 count=5
Проверка connected маршрутов
[admin@MikroTik] ># Connected маршруты должны совпадать с назначенными IP /ip/address/print /ip/route/print where connect=yes
Типичные ошибки
-
Нет default route — после настройки "с нуля" администратор забывает добавить маршрут 0.0.0.0/0. Локальная сеть работает, но интернета нет. Проверяйте:
/ip/route/print where dst-address=0.0.0.0/0 -
Два default route с одинаковым distance — если оба маршрута активны с distance=1, RouterOS будет использовать ECMP (Equal Cost Multi-Path), распределяя трафик между двумя шлюзами. Это вызывает проблемы с NAT и stateful firewall — сессия может уйти через один провайдер, а вернуться через другой. Для failover используйте разные distance (1 и 2)
-
check-gateway=none при failover — без check-gateway маршрут останется активным, даже если шлюз недоступен. Трафик будет уходить "в никуда". Всегда используйте check-gateway=ping для маршрутов failover
-
Неправильный pref-src — если pref-src указывает на адрес, не существующий на роутере, маршрут может некорректно работать. Убедитесь, что IP-адрес в pref-src действительно назначен на один из интерфейсов
-
Конфликт connected и static маршрутов — если добавить статический маршрут к подсети, которая уже есть как connected, получится два маршрута. Connected имеет distance=0 и всегда побеждает, а статический будет проигнорирован
-
Забыли routing table для PBR — добавили mangle-правило с mark-routing, но не создали routing table и маршрут в ней. Маркированный трафик не найдёт маршрут и будет отброшен. Всегда создавайте routing table:
/routing/table/add name=ISP2 fib -
Routing loop — два роутера указывают друг на друга как gateway для одной и той же сети. Пакет будет прыгать между ними, пока не истечёт TTL. Используйте traceroute для диагностики и blackhole-маршруты для защиты
-
DHCP-клиент перезаписывает default route — DHCP-клиент от провайдера автоматически добавляет default route с distance=1. Если вы добавили свой static default route тоже с distance=1, они начнут конфликтовать. Установите add-default-route=no в DHCP-клиенте и управляйте маршрутом вручную, либо поставьте distance на DHCP-клиенте:
/ip/dhcp-client/set [find] default-route-distance=2
/ip/route/add dst-address=0.0.0.0/0 gateway=192.168.1.1 comment="ISP Gateway" # Полная таблица маршрутов /ip/route/print # Компактный вид /ip/route/print brief # Подробная информация /ip/route/print detail # Только активные маршруты /ip/route/print where active=yes # Только статические маршруты /ip/route/print where static=yes # Маршрут к удалённой подсети через шлюз /ip/route/add dst-address=10.10.0.0/24 gateway=192.168.88.2 \ comment="Филиал через VPN" # Default route с check-gateway /ip/route/add dst-address=0.0.0.0/0 gateway=203.0.113.1 \ distance=1 check-gateway=ping comment="ISP1 Main" /ip/route/add dst-address=10.20.0.0/24 gateway=wireguard1 \ comment="Удалённый офис через WireGuard" # Основной провайдер — distance=1 (приоритет выше) /ip/route/add dst-address=0.0.0.0/0 gateway=203.0.113.1 \ distance=1 check-gateway=ping comment="ISP1 Main" # Резервный провайдер — distance=2 (переключится при падении ISP1) /ip/route/add dst-address=0.0.0.0/0 gateway=198.51.100.1 \ distance=2 check-gateway=ping comment="ISP2 Backup" # Пакеты от роутера к ISP1 идут с адреса 203.0.113.5 /ip/route/add dst-address=0.0.0.0/0 gateway=203.0.113.1 \ pref-src=203.0.113.5 distance=1 comment="ISP1 с указанным source" # Blackhole — пакеты к этой сети молча отбрасываются /ip/route/add dst-address=192.168.99.0/24 type=blackhole \ comment="Blackhole: сеть выведена из эксплуатации" # Unreachable — отправителю возвращается ICMP Unreachable /ip/route/add dst-address=10.99.0.0/16 type=unreachable \ comment="Сеть не существует" # Prohibit — ICMP Administratively Prohibited /ip/route/add dst-address=172.16.0.0/12 type=prohibit \ comment="Доступ к этим сетям запрещён" # Создаём routing table /routing/table/add name=ISP2 fib # Маршрут по умолчанию для таблицы ISP2 /ip/route/add dst-address=0.0.0.0/0 gateway=198.51.100.1 \ routing-table=ISP2 comment="Default route для ISP2" # В Mangle маркируем трафик от подсети 192.168.20.0/24 /ip/firewall/mangle/add chain=prerouting \ src-address=192.168.20.0/24 \ action=mark-routing new-routing-mark=ISP2 \ passthrough=no comment="Подсеть 20 через ISP2" # Создание VRF /ip/vrf/add name=VRF-CLIENTS interfaces=bridge-CLIENTS # Маршруты в VRF добавляются через routing-table /ip/route/add dst-address=0.0.0.0/0 gateway=10.0.0.1 \ routing-table=VRF-CLIENTS comment="Default для клиентов" # Какие маршруты сейчас активны /ip/route/print where active=yes # Проверка конкретного маршрута — через какой gateway пойдёт пакет /ip/route/check 8.8.8.8 # Показать все маршруты к определённой сети /ip/route/print where dst-address=0.0.0.0/0 # Трассировка маршрута до хоста /tool/traceroute address=8.8.8.8 # Ping с указанием source — проверка pref-src /ping 8.8.8.8 src-address=203.0.113.5 count=5 # Проверка routing table для policy-based routing /ip/route/print where routing-table=ISP2 # Мониторинг маршрутов в реальном времени /ip/route/print interval=5s # Если маршрут неактивен — check-gateway обнаружил недоступность шлюза /ip/route/print where active=no # Проверка доступности шлюза вручную /ping 203.0.113.1 count=5 # Connected маршруты должны совпадать с назначенными IP /ip/address/print /ip/route/print where connect=yes