Динамічна маршрутизація для початківців¶
Ця стаття пояснює навіщо потрібна динамічна маршрутизація, чим відрізняються OSPF, BGP і RIP, та коли що використовувати.
Проблема статичної маршрутизації¶
Уявіть ситуацію¶
У вас є 3 роутери, з'єднані в трикутник:
┌─────┐
│ A │
└──┬──┘
/│\
/ │ \
/ │ \
/ │ \
/ │ \
/ │ \
┌──▼──┐ │ ┌──▼──┐
│ B │◄─┴─▶│ C │
└─────┘ └─────┘
Зі статичними маршрутами вам потрібно:
- На A: додати маршрути до мереж B і C
- На B: додати маршрути до мереж A і C
- На C: додати маршрути до мереж A і B
6 маршрутів вручну. А якщо 10 роутерів? 90 маршрутів!
А що якщо зв'язок падає?¶
┌─────┐
│ A │
└──┬──┘
/│\
/ │ \
/ │ \ ← Цей лінк впав!
/ │ ✗
/ │
/ │
┌──▼──┐ │ ┌─────┐
│ B │◄─┴──│ C │
└─────┘ └─────┘
Статичні маршрути не знають що лінк впав. Трафік продовжує йти в "чорну діру".
Рішення: Динамічна маршрутизація¶
Динамічні протоколи роблять це автоматично:
- Роутери обмінюються інформацією про свої мережі
- Кожен будує карту всієї мережі
- При зміні топології — перераховують маршрути
┌──────────────────────────────────────────────────────────┐
│ │
│ Роутер A: "Привіт, я маю мережу 10.1.0.0/24" │
│ Роутер B: "Привіт, я маю мережу 10.2.0.0/24" │
│ Роутер C: "Привіт, я маю мережу 10.3.0.0/24" │
│ │
│ Всі автоматично знають як дістатись до всіх мереж! │
│ │
└──────────────────────────────────────────────────────────┘
Три головні протоколи¶
Порівняльна таблиця¶
| Протокол | Тип | Масштаб | Складність | Швидкість збіжності |
|---|---|---|---|---|
| RIP | Distance Vector | Малий (<15 хопів) | Проста | Повільна (хвилини) |
| OSPF | Link State | Середній-Великий | Середня | Швидка (секунди) |
| BGP | Path Vector | Інтернет | Висока | Середня (секунди-хвилини) |
Коли що використовувати?¶
┌────────────────────────────────────────────────────────────┐
│ │
│ "У мене 3-5 роутерів, хочу просто" │
│ → RIP (або статика + check-gateway) │
│ │
│ "У мене корпоративна мережа, 10-100 роутерів" │
│ → OSPF │
│ │
│ "Я з'єдную різні організації / маю декілька ISP" │
│ → BGP │
│ │
│ "У мене mesh VPN на 30+ вузлів" │
│ → OSPF або BGP │
│ │
└────────────────────────────────────────────────────────────┘
RIP (Routing Information Protocol)¶
Як працює¶
Кожен роутер періодично (кожні 30 сек) надсилає сусідам список своїх маршрутів.
┌─────────────────────────────────────────────────────────┐
│ │
│ Роутер A кожні 30 сек: │
│ "10.1.0.0/24 distance=1" │
│ "10.2.0.0/24 distance=2" (через B) │
│ │
│ Distance = кількість "стрибків" (hops) │
│ Максимум 15 hops (16 = unreachable) │
│ │
└─────────────────────────────────────────────────────────┘
Налаштування в MikroTik¶
# Увімкнути RIP
/routing rip instance add name=default
# Додати мережі для оголошення
/routing rip interface-template add instance=default interfaces=ether1,ether2
Плюси і мінуси¶
✅ Дуже простий
✅ Майже немає налаштувань
❌ Повільна збіжність (до 3 хвилин)
❌ Максимум 15 hops
❌ Не враховує швидкість каналів
OSPF (Open Shortest Path First)¶
Як працює¶
Кожен роутер:
1. Знаходить сусідів (hello пакети)
2. Обмінюється повною картою мережі (LSA)
3. Рахує найкоротший шлях алгоритмом Дейкстри
┌─────────────────────────────────────────────────────────┐
│ │
│ Link State Database (LSDB): │
│ │
│ ┌────┐ cost=10 ┌────┐ cost=5 ┌────┐ │
│ │ A │───────────▶│ B │───────────▶│ C │ │
│ └────┘ └────┘ └────┘ │
│ │ ▲ │
│ │ cost=20 │ │
│ └───────────────────────────────────┘ │
│ │
│ A→C: через B (cost=15) або напряму (cost=20)? │
│ OSPF обирає: через B! │
│ │
└─────────────────────────────────────────────────────────┘
Області (Areas)¶
OSPF ділить мережу на області для масштабування:
┌─────────────────────────────────────────────────────────┐
│ │
│ Area 0 (Backbone) │
│ ┌────────────────────────┐ │
│ │ ABR │ │
│ └────┬──────────────┬────┘ │
│ │ │ │
│ ┌─────────▼──┐ ┌───▼──────────┐ │
│ │ Area 1 │ │ Area 2 │ │
│ │ (Офіс Київ)│ │ (Офіс Львів) │ │
│ └────────────┘ └──────────────┘ │
│ │
└─────────────────────────────────────────────────────────┘
Налаштування в MikroTik¶
# Створити інстанс
/routing ospf instance add name=default router-id=10.10.10.1
# Додати area
/routing ospf area add name=backbone area-id=0.0.0.0 instance=default
# Додати інтерфейси
/routing ospf interface-template add area=backbone interfaces=wg0,ether1
Базовий приклад: Два роутери¶
┌─────────────────┐ ┌─────────────────┐
│ Router A │ │ Router B │
│ ID: 10.10.10.1 │◄───────▶│ ID: 10.10.10.2 │
│ LAN: 10.1.0.0/24│ wg0 │ LAN: 10.2.0.0/24│
└─────────────────┘ └─────────────────┘
Router A:
/routing ospf instance add name=default router-id=10.10.10.1
/routing ospf area add name=backbone area-id=0.0.0.0 instance=default
/routing ospf interface-template add area=backbone interfaces=wg0
/routing ospf interface-template add area=backbone interfaces=bridge1 passive
Router B:
/routing ospf instance add name=default router-id=10.10.10.2
/routing ospf area add name=backbone area-id=0.0.0.0 instance=default
/routing ospf interface-template add area=backbone interfaces=wg0
/routing ospf interface-template add area=backbone interfaces=bridge1 passive
passive — означає "оголошуй цю мережу, але не шукай OSPF сусідів".
Перевірка¶
# Сусіди
/routing ospf neighbor print
# Маршрути від OSPF
/ip route print where routing-table=main ospf
Плюси і мінуси¶
✅ Швидка збіжність (секунди)
✅ Враховує "вартість" каналів
✅ Масштабується до сотень роутерів
✅ Стандартизований (працює з Cisco, Juniper, etc)
❌ Складніший за RIP
❌ Потрібно планувати області
BGP (Border Gateway Protocol)¶
Як працює¶
BGP — протокол для з'єднання різних автономних систем (AS).
┌─────────────────────────────────────────────────────────┐
│ │
│ AS 65001 (Ваша організація) │
│ ┌──────────────────────┐ │
│ │ 10.1.0.0/24 │ │
│ │ 10.2.0.0/24 │ │
│ └──────────┬───────────┘ │
│ │ eBGP │
│ ┌──────────▼───────────┐ │
│ │ AS 65002 (Партнер) │ │
│ │ 172.16.0.0/16 │ │
│ └──────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────┘
Два типи BGP¶
iBGP (internal) — всередині однієї AS
eBGP (external) — між різними AS
Коли потрібен BGP?¶
- Multi-homing — підключення до кількох ISP
- Mesh VPN — коли OSPF не масштабується
- Обмін маршрутами між організаціями
Налаштування в MikroTik (базове)¶
# Створити інстанс
/routing bgp instance add name=default as=65001 router-id=10.10.10.1
# Додати сусіда
/routing bgp peer add name=peer1 instance=default remote.as=65002 \
remote.address=10.10.10.2
# Оголосити мережі
/routing bgp network add network=10.1.0.0/24
Плюси і мінуси¶
✅ Масштабується до мільйонів маршрутів
✅ Повний контроль над політиками
✅ Працює через Інтернет (не потребує L2 зв'язності)
❌ Найскладніший протокол
❌ Повільніша збіжність ніж OSPF
❌ Потребує ретельного планування
Порівняння на практиці¶
Сценарій: 5 офісів через VPN¶
┌─────────┐
│ Центр │
│ (Hub) │
└────┬────┘
│
┌───────┬───────┼───────┬───────┐
│ │ │ │ │
┌────▼──┐ ┌──▼───┐ ┌─▼────┐ ┌▼─────┐ ┌▼─────┐
│Київ │ │Львів │ │Одеса │ │Харків│ │Дніпро│
└───────┘ └──────┘ └──────┘ └──────┘ └──────┘
| Підхід | Маршрутів вручну | Час на failover | Складність |
|---|---|---|---|
| Статика | 20 | Вручну / хвилини | Низька |
| RIP | 0 | ~3 хвилини | Низька |
| OSPF | 0 | ~1-5 секунд | Середня |
| BGP | 0 | ~30 секунд | Висока |
Рекомендація: OSPF — найкращий баланс для такої топології.
Сценарій: 30 вузлів WireGuard mesh¶
┌──────────────────────────────────────┐
│ │
│ ●────●────●────●────●────● │
│ │ │ │ │ │ │ │
│ ●────●────●────●────●────● │
│ │ │ │ │ │ │ │
│ ●────●────●────●────●────● │
│ │ │ │ │ │ │ │
│ ●────●────●────●────●────● │
│ │ │ │ │ │ │ │
│ ●────●────●────●────●────● │
│ │
└──────────────────────────────────────┘
| Підхід | Маршрутів на вузол | Масштабування |
|---|---|---|
| Статика | 29 | Погано (O(n²)) |
| OSPF | 0 | Добре |
| BGP | 0 | Відмінно |
Рекомендація: BGP для великого mesh (простіше масштабується), OSPF для середнього.
Практичне завдання¶
Налаштуйте OSPF між двома MikroTik¶
Топологія:
┌─────────────────┐ ┌─────────────────┐
│ Router A │ │ Router B │
│ wg0: 10.10.10.1 │◄───────▶│ wg0: 10.10.10.2 │
│ br0: 10.1.0.1 │ │ br0: 10.2.0.1 │
└─────────────────┘ └─────────────────┘
Крок 1: Router A
/routing ospf instance add name=default router-id=10.10.10.1
/routing ospf area add name=backbone area-id=0.0.0.0 instance=default
/routing ospf interface-template add area=backbone interfaces=wg0
/routing ospf interface-template add area=backbone interfaces=br0 passive
Крок 2: Router B
/routing ospf instance add name=default router-id=10.10.10.2
/routing ospf area add name=backbone area-id=0.0.0.0 instance=default
/routing ospf interface-template add area=backbone interfaces=wg0
/routing ospf interface-template add area=backbone interfaces=br0 passive
Крок 3: Перевірка
# На обох роутерах
/routing ospf neighbor print
# Має показати сусіда в стані "Full"
/ip route print where ospf
# Має показати маршрут до мережі іншого роутера
Словник¶
| Термін | Значення |
|---|---|
| Convergence | Процес узгодження маршрутів між роутерами |
| Distance Vector | Протокол що передає "напрямок і відстань" |
| Link State | Протокол що передає "карту мережі" |
| LSA | Link State Advertisement — повідомлення OSPF |
| Hop | Один "стрибок" через роутер |
| Cost | "Вартість" маршруту (менше = краще) |
| Area | Зона в OSPF для масштабування |
| AS | Autonomous System — незалежна мережа |
Див. також¶
Шлях: networking/routing/dynamic-routing-intro.md