Маршрутизація та масштабування UMTC Mesh¶
Огляд архітектури¶
UMTC Mesh використовує ієрархічну топологію з VPS як центральним хабом та MikroTik роутерами як тактичними нодами. Система забезпечує автоматичний failover між різними каналами зв'язку.
┌─────────────────┐
│ VPS (Hub) │
│ 10.10.10.1 │
│ WireGuard │
└────────┬────────┘
│
┌──────────────────┼──────────────────┐
│ │ │
┌───────▼───────┐ ┌───────▼───────┐ ┌───────▼───────┐
│ NeoForge │ │ Node-B │ │ Node-C │
│ 10.10.10.2 │ │ 10.10.12.1 │ │ 10.10.13.1 │
│ Primary │ │ Secondary │ │ Tactical │
└───────┬───────┘ └───────┬───────┘ └───────────────┘
│ │
└────── Interval ──┘
(5GHz P2P)
Рівні мережі¶
Рівень 1: WireGuard Overlay (10.10.0.0/16)¶
Основна мережа для всіх сервісів. Кожна нода має унікальну /24 підмережу:
| Підмережа | Призначення |
|---|---|
| 10.10.10.0/24 | VPS та primary роутери |
| 10.10.11.0/24 | Клієнти та мобільні пристрої |
| 10.10.12.0/24 | Node-B та його клієнти |
| 10.10.13.0/24 | Node-C та його клієнти |
Рівень 2: Interval Links (192.168.55.0/24)¶
Прямі P2P з'єднання між роутерами для backup та low-latency комунікації:
| IP | Роутер |
|---|---|
| 192.168.55.55 | Node-B |
| 192.168.55.56 | NeoForge |
| 192.168.55.57 | Node-C (planned) |
Рівень 3: Local Networks¶
Кожен роутер має локальні мережі для клієнтів:
- 192.168.88.0/24 — LAN
- 192.168.99.0/24 — Guest/IoT
Failover Routing¶
Принцип роботи¶
MikroTik використовує check-gateway=ping для моніторингу доступності шлюзів. При недоступності основного маршруту, активується резервний з вищою distance.
Конфігурація NeoForge (Primary Router)¶
# Primary: Starlink
/ip route add dst-address=0.0.0.0/0 gateway=192.168.0.1 distance=1 \
check-gateway=ping comment="primary-starlink"
# Secondary: iOS Hotspot
/ip route add dst-address=0.0.0.0/0 gateway=172.20.10.1 distance=2 \
check-gateway=ping comment="secondary-hotspot"
# Backup: Interval (через Node-B з LTE)
/ip route add dst-address=0.0.0.0/0 gateway=192.168.55.55 distance=3 \
comment="backup-via-B"
# WireGuard routes
/ip route add dst-address=10.10.0.0/16 gateway=wg-to-vps distance=1
/ip route add dst-address=10.10.12.0/24 gateway=192.168.55.55 distance=1
Конфігурація Node-B (Secondary Router)¶
# Primary: LTE
/ip route add dst-address=0.0.0.0/0 gateway=10.33.218.14 distance=1 \
check-gateway=ping comment="primary-lte"
# Secondary: WireGuard (direct to VPS)
/ip route add dst-address=0.0.0.0/0 gateway=10.10.11.1 distance=2 \
comment="secondary-wg"
# Backup: Interval (через NeoForge)
/ip route add dst-address=0.0.0.0/0 gateway=192.168.55.56 distance=3 \
comment="backup-interval"
# WireGuard routes
/ip route add dst-address=10.10.0.0/16 gateway=wg-to-vps distance=1
/ip route add dst-address=10.10.0.0/16 gateway=192.168.55.56 distance=2
VPS WireGuard Configuration¶
Структура peers¶
VPS виступає центральним хабом. Кожен peer має визначені allowed-ips:
# /etc/wireguard/wg0.conf
[Interface]
PrivateKey = <VPS_PRIVATE_KEY>
Address = 10.10.10.1/24
ListenPort = 51820
# NeoForge - Primary router + routes to Node-B via interval
[Peer]
PublicKey = <NEOFORGE_PUBLIC_KEY>
AllowedIPs = 10.10.10.2/32, 192.168.88.0/24, 10.10.12.0/24
PersistentKeepalive = 15
# Node-B - Direct connection when LTE available
[Peer]
PublicKey = <NODE_B_PUBLIC_KEY>
AllowedIPs = 10.10.11.0/24, 10.10.12.0/24
PersistentKeepalive = 25
# Mobile clients
[Peer]
PublicKey = <CLIENT_KEY>
AllowedIPs = 10.10.10.69/32
PersistentKeepalive = 25
Важливо: AllowedIPs для failover¶
Коли Node-B недоступний напряму (LTE down), трафік до 10.10.12.0/24 має йти через NeoForge. Для цього 10.10.12.0/24 додано до AllowedIPs обох peers:
- NeoForge peer: для routing через interval
- Node-B peer: для direct routing коли LTE up
WireGuard автоматично обирає peer з найновішим handshake.
Interval Link Setup¶
Фізичний рівень¶
Interval link використовує 5GHz WiFi у режимі station-bridge:
NeoForge (AP):
/interface wifi
add name=wifi5 configuration.mode=ap configuration.ssid=UMTC-Interval \
configuration.channel.band=5ghz-ax configuration.channel.width=80mhz \
security.authentication-types=wpa2-psk,wpa3-psk
/ip address add address=192.168.55.56/24 interface=wifi5
Node-B (Station):
/interface wifi
add name=wifi2 configuration.mode=station-bridge \
configuration.ssid=UMTC-Interval \
security.authentication-types=wpa2-psk,wpa3-psk
/ip address add address=192.168.55.55/24 interface=wifi2
Маршрутизація через interval¶
Для доступу до Node-B через interval, NeoForge потребує маршрут:
/ip route add dst-address=10.10.12.0/24 gateway=192.168.55.55 distance=1
NAT та Masquerade¶
Проблема¶
При routing через interval, NeoForge робить masquerade. Node-B бачить source IP як 192.168.55.56, а не оригінальний 10.10.10.x.
Рішення для API access¶
# На Node-B дозволити API з interval мережі
/ip service set api address=10.10.0.0/16,192.168.55.0/24
Firewall правило для mesh-api¶
/ip firewall filter add chain=input action=accept protocol=tcp \
src-address=10.10.0.0/16 dst-port=8728 comment="mesh-api"
/ip firewall filter add chain=input action=accept protocol=tcp \
src-address=192.168.55.0/24 dst-port=8728 comment="interval-api"
Масштабування¶
Додавання нової ноди¶
-
Виділити підмережу (наприклад, 10.10.14.0/24)
-
Згенерувати WireGuard ключі:
wg genkey | tee privatekey | wg pubkey > publickey
- Додати peer на VPS:
wg set wg0 peer <NEW_PUBLIC_KEY> allowed-ips 10.10.14.0/24
wg-quick save wg0
- Налаштувати роутер:
/interface wireguard add name=wg-to-vps listen-port=51820 private-key="<PRIVATE>"
/interface wireguard peers add interface=wg-to-vps \
public-key="<VPS_PUBLIC_KEY>" \
endpoint-address=203.0.113.1 endpoint-port=51820 \
allowed-address=10.10.0.0/16 \
persistent-keepalive=25
/ip address add address=10.10.14.1/24 interface=wg-to-vps
/ip route add dst-address=10.10.0.0/16 gateway=wg-to-vps
- Додати в MMM:
- Відкрити mikro.example.com
- "+ Add" → ввести IP, credentials
- Роутер з'явиться в dashboard
Додавання interval link¶
- Налаштувати WiFi bridge між роутерами
- Присвоїти IP з 192.168.55.0/24
- Додати маршрути:
На hub роутері:
/ip route add dst-address=10.10.14.0/24 gateway=192.168.55.x distance=1
На VPS (якщо потрібен failover):
wg set wg0 peer <HUB_KEY> allowed-ips <existing>,10.10.14.0/24
Діагностика¶
Перевірка WireGuard¶
# На VPS
wg show
# Має показати recent handshake для активних peers
# На роутері
/interface wireguard peers print
# latest-handshake має бути < 2 хвилин
Перевірка routing¶
# Активні маршрути
/ip route print where active
# Трасування
/tool traceroute 10.10.10.1
Перевірка failover¶
# Статус gateway check
/ip route print detail where check-gateway=ping
# GW Status: reachable / unreachable
MMM Diagnostics¶
Відкрити "Diag" на картці роутера:
- Default Routes — показує active/inactive
- Gateway Ping — RTT до кожного gateway
- Issues — проблеми з DHCP, routing
Типові проблеми¶
1. Node недоступна через WG¶
Симптом: Ping до 10.10.x.1 timeout
Перевірити:
- wg show на VPS — handshake age
- Endpoint address peer'а — чи правильний public IP
- Firewall на роутері — UDP 51820
2. API connection failed¶
Симптом: MMM показує "API connection failed"
Перевірити:
- /ip service print — api enabled, address restrictions
- Firewall input chain — правило для 8728
- Source IP запитів (може бути masquerade)
3. Interval link не працює¶
Симптом: Ping між роутерами через interval timeout
Перевірити:
- WiFi інтерфейси running
- IP адреси на interval інтерфейсах
- ARP таблиця: /ip arp print where interface=wifi5
4. Failover не спрацьовує¶
Симптом: При падінні primary, трафік не переключається
Перевірити:
- check-gateway=ping на маршрутах
- Distance значення (менше = пріоритетніше)
- Gateway reachability в route table
Best Practices¶
- Використовуйте коментарі для маршрутів — легше дебажити
- Різні distance для чіткої пріоритизації
- check-gateway=ping тільки на default routes
- Регулярні бекапи конфігурації через MMM
- Моніторинг через Matrix alerts
- Документуйте IP схему та topology
Приклад повної конфігурації¶
Tactical Node Template¶
# Identity
/system identity set name="UMTC-Node-X"
# WireGuard
/interface wireguard add name=wg-to-vps listen-port=51820 private-key="XXX"
/interface wireguard peers add interface=wg-to-vps \
public-key="<VPS_PUBLIC_KEY>" \
endpoint-address=203.0.113.1 endpoint-port=51820 \
allowed-address=10.10.0.0/16 persistent-keepalive=25
# IP Addressing
/ip address add address=10.10.X.1/24 interface=wg-to-vps
/ip address add address=192.168.88.1/24 interface=bridge1
# Routing
/ip route add dst-address=0.0.0.0/0 gateway=<PRIMARY_GW> distance=1 check-gateway=ping
/ip route add dst-address=0.0.0.0/0 gateway=<BACKUP_GW> distance=2
/ip route add dst-address=10.10.0.0/16 gateway=wg-to-vps distance=1
# Firewall - API access
/ip firewall filter add chain=input action=accept protocol=tcp \
src-address=10.10.0.0/16 dst-port=8728 comment="mesh-api"
# Services
/ip service set api address=10.10.0.0/16
/ip service set winbox address=10.10.0.0/16,192.168.88.0/24
/ip service disable telnet,ftp,www
# DNS
/ip dns set servers=1.1.1.1,8.8.8.8 allow-remote-requests=yes
# NTP
/system ntp client set enabled=yes
/system ntp client servers add address=time.cloudflare.com
Останнє оновлення: 2 січня 2026
Шлях: networking/routing/umtc-routing-guide.md