Маршрутизація LTE Mesh: Multi-Tower Failover¶
Огляд сценарію¶
Цей документ описує налаштування маршрутизації для мережі з декількома LTE вишками, де одні вишки мають прямий інтернет (Starlink, оптика), а інші отримують інтернет через LTE backhaul від сусідніх вишок.
INTERNET
│
┌─────────────────┼─────────────────┐
│ │ │
┌─────▼─────┐ ┌─────▼─────┐ ┌─────▼─────┐
│ TOWER-A │ │ TOWER-B │ │ TOWER-C │
│ Starlink │ │ Оптика │ │ LTE │
│ 10.10.10.x│ │ 10.10.20.x│ │ 10.10.30.x│
└─────┬─────┘ └─────┬─────┘ └─────┬─────┘
│ │ │
│ LTE Radio │ LTE Radio │
│◄───────────────►│◄───────────────►│
│ │ │
┌─────▼─────┐ ┌─────▼─────┐ ┌─────▼─────┐
│ TOWER-D │ │ TOWER-E │ │ TOWER-F │
│ Secondary │ │ Secondary │ │ Secondary │
│ 10.10.40.x│ │ 10.10.50.x│ │ 10.10.60.x│
└───────────┘ └───────────┘ └───────────┘
IP-адресація¶
Схема підмереж¶
| Роль | WireGuard підмережа | LTE UE підмережа | Локальна мережа |
|---|---|---|---|
| VPS Hub | 10.10.0.1/32 | — | — |
| Tower-A (Primary) | 10.10.10.0/24 | 10.45.10.0/24 | 192.168.10.0/24 |
| Tower-B (Primary) | 10.10.20.0/24 | 10.45.20.0/24 | 192.168.20.0/24 |
| Tower-C (Primary) | 10.10.30.0/24 | 10.45.30.0/24 | 192.168.30.0/24 |
| Tower-D (Secondary) | 10.10.40.0/24 | 10.45.40.0/24 | 192.168.40.0/24 |
| Tower-E (Secondary) | 10.10.50.0/24 | 10.45.50.0/24 | 192.168.50.0/24 |
| Tower-F (Secondary) | 10.10.60.0/24 | 10.45.60.0/24 | 192.168.60.0/24 |
Рівні мережі¶
┌────────────────────────────────────────────────────────────┐
│ Layer 3: WireGuard Overlay │
│ 10.10.0.0/16 │
│ Mesh між усіма вишками та VPS │
├────────────────────────────────────────────────────────────┤
│ Layer 2: LTE Backhaul │
│ 10.45.0.0/16 │
│ UE підключення до сусідніх eNodeB │
├────────────────────────────────────────────────────────────┤
│ Layer 1: Local Networks │
│ 192.168.x.0/24 │
│ Клієнти кожної вишки (WiFi, Ethernet) │
└────────────────────────────────────────────────────────────┘
Типи вишок та їх ролі¶
Primary Tower (з інтернетом)¶
Компоненти:
- Інтернет-канал (Starlink/оптика/радіорелейка)
- srsENB — базова станція для клієнтів та сусідніх вишок
- Open5GS Core — MME, HSS, SGW, PGW
- WireGuard — mesh з VPS та іншими вишками
- MikroTik Router — routing, firewall, failover
Функції:
- Роздає інтернет своїм LTE клієнтам
- Надає LTE backhaul для secondary вишок
- Участь у WireGuard mesh
Secondary Tower (без інтернету)¶
Компоненти:
- LTE Modem (UE) — підключення до Primary tower
- srsENB — своя базова станція (опційно)
- Open5GS Core (локальний, для offline режиму)
- WireGuard — тунель через LTE backhaul
- MikroTik Router — routing, failover між primary towers
Функції:
- Отримує інтернет через LTE від найближчої Primary
- Роздає інтернет своїм клієнтам
- Автоматичний failover між Primary towers
Конфігурація MikroTik: Primary Tower¶
Базова конфігурація¶
# Ідентифікація
/system identity set name="UMTC-Tower-A"
# Інтерфейси
# ether1 — Starlink/WAN
# ether2 — до srsENB/Open5GS сервера
# ether3-5 — локальна мережа
# wlan1 — WiFi для клієнтів
# Bridge для локальної мережі
/interface bridge add name=bridge-lan
/interface bridge port add bridge=bridge-lan interface=ether3
/interface bridge port add bridge=bridge-lan interface=ether4
/interface bridge port add bridge=bridge-lan interface=wlan1
IP адресація¶
# WAN (Starlink)
/ip dhcp-client add interface=ether1 disabled=no add-default-route=yes \
use-peer-dns=yes comment="primary-starlink"
# LTE Core мережа
/ip address add address=10.45.10.1/24 interface=ether2 comment="lte-core"
# Локальна мережа
/ip address add address=192.168.10.1/24 interface=bridge-lan comment="lan"
# WireGuard
/interface wireguard add name=wg-mesh listen-port=51820 private-key="<PRIVATE_KEY>"
/ip address add address=10.10.10.1/24 interface=wg-mesh comment="wg-overlay"
WireGuard Peers¶
# VPS Hub
/interface wireguard peers add interface=wg-mesh \
public-key="<VPS_PUBLIC_KEY>" \
endpoint-address=203.0.113.1 endpoint-port=51820 \
allowed-address=10.10.0.0/16 \
persistent-keepalive=25 \
comment="vps-hub"
# Tower-B (інша Primary)
/interface wireguard peers add interface=wg-mesh \
public-key="<TOWER_B_PUBLIC_KEY>" \
endpoint-address=0.0.0.0 endpoint-port=51820 \
allowed-address=10.10.20.0/24,192.168.20.0/24 \
persistent-keepalive=25 \
comment="tower-b"
# Tower-D (Secondary, підключена через наш LTE)
/interface wireguard peers add interface=wg-mesh \
public-key="<TOWER_D_PUBLIC_KEY>" \
endpoint-address=0.0.0.0 endpoint-port=51820 \
allowed-address=10.10.40.0/24,192.168.40.0/24 \
persistent-keepalive=25 \
comment="tower-d-secondary"
Маршрутизація¶
# Default route через Starlink (primary)
# Встановлюється автоматично через DHCP client
# Backup через іншу Primary tower (Tower-B)
/ip route add dst-address=0.0.0.0/0 gateway=10.10.20.1 distance=2 \
check-gateway=ping comment="backup-via-tower-b"
# Маршрути до інших підмереж через WireGuard
/ip route add dst-address=10.10.0.0/16 gateway=wg-mesh distance=1 \
comment="wg-overlay-networks"
# Маршрут до LTE UE (клієнти що підключаються до нашого eNodeB)
/ip route add dst-address=10.45.10.0/24 gateway=10.45.10.254 distance=1 \
comment="lte-ue-pool"
NAT та Firewall¶
# Masquerade для виходу в інтернет
/ip firewall nat add chain=srcnat out-interface=ether1 action=masquerade \
comment="wan-nat"
# Masquerade для LTE клієнтів
/ip firewall nat add chain=srcnat src-address=10.45.10.0/24 \
out-interface=ether1 action=masquerade comment="lte-clients-nat"
# Дозволити WireGuard
/ip firewall filter add chain=input protocol=udp dst-port=51820 action=accept \
comment="allow-wireguard"
# Дозволити трафік з WireGuard overlay
/ip firewall filter add chain=input src-address=10.10.0.0/16 action=accept \
comment="allow-wg-overlay"
# Дозволити LTE S1 та GTP (від Open5GS сервера)
/ip firewall filter add chain=forward src-address=10.45.0.0/16 action=accept \
comment="allow-lte-traffic"
Конфігурація MikroTik: Secondary Tower¶
Сценарій: Tower-D без прямого інтернету¶
Tower-D отримує інтернет через LTE modem, підключений до Tower-A або Tower-B.
Інтерфейси¶
# Ідентифікація
/system identity set name="UMTC-Tower-D"
# Інтерфейси:
# ether1 — до LTE модему (Quectel RM502Q тощо)
# ether2 — до локального srsENB (опційно)
# ether3-5 — локальна мережа
# lte1 — вбудований LTE (якщо є)
# Bridge для локальної мережі
/interface bridge add name=bridge-lan
/interface bridge port add bridge=bridge-lan interface=ether3
/interface bridge port add bridge=bridge-lan interface=ether4
LTE Modem як WAN¶
# Варіант 1: Вбудований LTE модем
/interface lte set lte1 apn="internet" band="" network-mode=lte
# Варіант 2: USB модем через DHCP
/ip dhcp-client add interface=ether1 disabled=no add-default-route=no \
use-peer-dns=no comment="lte-modem"
IP адресація¶
# LTE отримує IP автоматично (10.45.10.x від Tower-A)
# Або статично якщо потрібно
# Локальна мережа
/ip address add address=192.168.40.1/24 interface=bridge-lan comment="lan"
# WireGuard overlay
/interface wireguard add name=wg-mesh listen-port=51820 private-key="<PRIVATE_KEY>"
/ip address add address=10.10.40.1/24 interface=wg-mesh comment="wg-overlay"
WireGuard через LTE Backhaul¶
# VPS Hub (через LTE backhaul)
/interface wireguard peers add interface=wg-mesh \
public-key="<VPS_PUBLIC_KEY>" \
endpoint-address=203.0.113.1 endpoint-port=51820 \
allowed-address=10.10.0.0/16 \
persistent-keepalive=25 \
comment="vps-hub"
# Tower-A (Primary, наш LTE provider)
/interface wireguard peers add interface=wg-mesh \
public-key="<TOWER_A_PUBLIC_KEY>" \
endpoint-address=10.45.10.1 endpoint-port=51820 \
allowed-address=10.10.10.0/24,192.168.10.0/24 \
persistent-keepalive=15 \
comment="tower-a-primary"
# Tower-B (Backup Primary)
/interface wireguard peers add interface=wg-mesh \
public-key="<TOWER_B_PUBLIC_KEY>" \
endpoint-address=0.0.0.0 endpoint-port=51820 \
allowed-address=10.10.20.0/24,192.168.20.0/24 \
persistent-keepalive=25 \
comment="tower-b-backup"
Failover Routing — Ключова частина¶
# ============================================
# FAILOVER: Вибір Primary Tower для інтернету
# ============================================
# Routing table для LTE backhaul
/routing table add name=lte-backhaul fib
# Primary: Tower-A через LTE (distance=1)
/ip route add dst-address=0.0.0.0/0 gateway=10.45.10.1 distance=1 \
check-gateway=ping routing-table=main comment="primary-tower-a"
# Backup: Tower-B через WireGuard mesh (distance=2)
/ip route add dst-address=0.0.0.0/0 gateway=10.10.20.1 distance=2 \
check-gateway=ping routing-table=main comment="backup-tower-b"
# Emergency: Tower-C через WireGuard (distance=3)
/ip route add dst-address=0.0.0.0/0 gateway=10.10.30.1 distance=3 \
check-gateway=ping routing-table=main comment="emergency-tower-c"
# WireGuard overlay routing
/ip route add dst-address=10.10.0.0/16 gateway=wg-mesh distance=1 \
comment="wg-overlay"
Netwatch для швидшого Failover¶
# Моніторинг Tower-A
/tool netwatch add host=10.45.10.1 interval=10s timeout=2s \
up-script="/ip route enable [find comment=\"primary-tower-a\"]" \
down-script="/ip route disable [find comment=\"primary-tower-a\"]; \
/log warning \"Tower-A down, failover to Tower-B\""
# Моніторинг Tower-B
/tool netwatch add host=10.10.20.1 interval=10s timeout=2s \
up-script="/ip route enable [find comment=\"backup-tower-b\"]" \
down-script="/ip route disable [find comment=\"backup-tower-b\"]; \
/log warning \"Tower-B down, failover to Tower-C\""
NAT для локальних клієнтів¶
# Masquerade через LTE
/ip firewall nat add chain=srcnat out-interface=ether1 action=masquerade \
comment="lte-nat"
# Або masquerade через WireGuard (якщо LTE down)
/ip firewall nat add chain=srcnat out-interface=wg-mesh \
src-address=192.168.40.0/24 action=masquerade comment="wg-nat-backup"
Failover сценарії¶
Сценарій 1: Tower-A втрачає Starlink¶
До: Після:
Tower-D → LTE → Tower-A → NET Tower-D → LTE → Tower-A → WG → Tower-B → NET
↓ ↓
[Starlink] [Оптика]
✗ ✓
Що відбувається:
1. Tower-A втрачає Starlink
2. Tower-A failover на backup route через Tower-B (WG mesh)
3. Tower-D продовжує використовувати LTE до Tower-A
4. Трафік Tower-D йде: LTE → Tower-A → WG → Tower-B → Internet
Сценарій 2: Tower-A повністю offline¶
До: Після:
Tower-D → LTE → Tower-A Tower-D ─────→ WG ─────→ Tower-B → NET
✗ (через інший LTE або mesh)
Що відбувається:
1. Tower-A повністю offline
2. Tower-D netwatch детектує падіння 10.45.10.1
3. Disable primary route, активується backup через Tower-B
4. Tower-D шукає альтернативний шлях до Tower-B:
- Якщо є LTE coverage від Tower-B — підключається напряму
- Якщо є інша Secondary tower з connection до Tower-B — через неї
Сценарій 3: Mesh relay через Secondary¶
Tower-D не бачить жодну Primary напряму, але бачить Tower-E:
Tower-D → WG → Tower-E → LTE → Tower-B → NET
Конфігурація для relay:
На Tower-D:
# Backup через Tower-E (інша Secondary)
/ip route add dst-address=0.0.0.0/0 gateway=10.10.50.1 distance=4 \
check-gateway=ping comment="relay-via-tower-e"
На Tower-E:
# Дозволити forwarding для Tower-D
/ip firewall filter add chain=forward src-address=10.10.40.0/24 action=accept
/ip firewall nat add chain=srcnat src-address=10.10.40.0/24 action=masquerade
VPS Hub конфігурація¶
WireGuard з AllowedIPs для всіх вишок¶
# /etc/wireguard/wg0.conf
[Interface]
PrivateKey = <VPS_PRIVATE_KEY>
Address = 10.10.0.1/24
ListenPort = 51820
# Tower-A (Primary + може relay Tower-D)
[Peer]
PublicKey = <TOWER_A_KEY>
AllowedIPs = 10.10.10.0/24, 192.168.10.0/24, 10.10.40.0/24
PersistentKeepalive = 25
# Tower-B (Primary + може relay Tower-E)
[Peer]
PublicKey = <TOWER_B_KEY>
AllowedIPs = 10.10.20.0/24, 192.168.20.0/24, 10.10.50.0/24
PersistentKeepalive = 25
# Tower-C (Primary + може relay Tower-F)
[Peer]
PublicKey = <TOWER_C_KEY>
AllowedIPs = 10.10.30.0/24, 192.168.30.0/24, 10.10.60.0/24
PersistentKeepalive = 25
# Tower-D (Secondary, зазвичай через Tower-A)
[Peer]
PublicKey = <TOWER_D_KEY>
AllowedIPs = 10.10.40.0/24, 192.168.40.0/24
PersistentKeepalive = 25
# Tower-E (Secondary, зазвичай через Tower-B)
[Peer]
PublicKey = <TOWER_E_KEY>
AllowedIPs = 10.10.50.0/24, 192.168.50.0/24
PersistentKeepalive = 25
# Tower-F (Secondary, зазвичай через Tower-C)
[Peer]
PublicKey = <TOWER_F_KEY>
AllowedIPs = 10.10.60.0/24, 192.168.60.0/24
PersistentKeepalive = 25
Динамічне оновлення AllowedIPs¶
При failover Secondary tower може змінити Primary. VPS має бачити трафік від будь-якого шляху:
#!/bin/bash
# /usr/local/bin/update-wg-routes.sh
# Додати всі Secondary до AllowedIPs кожної Primary
# Це дозволяє relay через будь-яку Primary
wg set wg0 peer <TOWER_A_KEY> allowed-ips \
10.10.10.0/24,192.168.10.0/24,10.10.40.0/24,10.10.50.0/24,10.10.60.0/24
wg set wg0 peer <TOWER_B_KEY> allowed-ips \
10.10.20.0/24,192.168.20.0/24,10.10.40.0/24,10.10.50.0/24,10.10.60.0/24
wg set wg0 peer <TOWER_C_KEY> allowed-ips \
10.10.30.0/24,192.168.30.0/24,10.10.40.0/24,10.10.50.0/24,10.10.60.0/24
wg-quick save wg0
Open5GS інтеграція¶
IP Pool для LTE клієнтів¶
Кожна Primary tower видає IP зі свого пулу:
| Tower | UE IP Pool | APN |
|---|---|---|
| Tower-A | 10.45.10.0/24 | internet.tower-a |
| Tower-B | 10.45.20.0/24 | internet.tower-b |
| Tower-C | 10.45.30.0/24 | internet.tower-c |
PGW конфігурація (Tower-A)¶
# /etc/open5gs/pgw.yaml
pgw:
gtpc:
- addr: 10.45.10.1
gtpu:
- addr: 10.45.10.1
ue_pool:
- addr: 10.45.10.0/24
dns:
- 1.1.1.1
- 8.8.8.8
Routing для UE трафіку¶
На MikroTik Tower-A:
# Маршрут до UE pool
/ip route add dst-address=10.45.10.0/24 gateway=10.45.10.254 \
comment="lte-ue-via-pgw"
# NAT для UE виходу в інтернет
/ip firewall nat add chain=srcnat src-address=10.45.10.0/24 \
out-interface=ether1 action=masquerade comment="ue-internet-nat"
Моніторинг та діагностика¶
MMM інтеграція¶
Всі MikroTik роутери на вишках додаються в MMM для централізованого моніторингу:
MMM Dashboard:
┌─────────────────────────────────────────────────────┐
│ Tower-A (Primary) ● Online Starlink: 45ms │
│ Tower-B (Primary) ● Online Fiber: 12ms │
│ Tower-C (Primary) ● Online LTE: 89ms │
│ Tower-D (Secondary)● Online via Tower-A: 67ms │
│ Tower-E (Secondary)● Online via Tower-B: 34ms │
│ Tower-F (Secondary)○ Offline Last seen: 5m ago │
└─────────────────────────────────────────────────────┘
Перевірка поточного шляху¶
На Secondary tower:
# Який gateway активний?
/ip route print where active and dst-address="0.0.0.0/0"
# Trace до VPS
/tool traceroute 10.10.0.1
# Перевірка WG handshakes
/interface wireguard peers print
Логування failover подій¶
# Налаштування логування
/system logging add topics=route,warning action=memory
/system logging add topics=route,info action=memory
# Перегляд логів
/log print where topics~"route"
Чеклист розгортання¶
Primary Tower¶
- [ ] Інтернет-канал налаштовано та працює
- [ ] Open5GS Core запущено, eNodeB підключений
- [ ] WireGuard mesh до VPS та інших Primary
- [ ] Backup route до іншої Primary
- [ ] NAT для LTE клієнтів
- [ ] Firewall правила
- [ ] Додано в MMM
Secondary Tower¶
- [ ] LTE modem підключено та отримує IP
- [ ] WireGuard тунель через LTE працює
- [ ] Failover routes до декількох Primary
- [ ] Netwatch моніторинг
- [ ] NAT для локальних клієнтів
- [ ] Додано в MMM
VPS Hub¶
- [ ] AllowedIPs включають всі можливі relay шляхи
- [ ] Routes до всіх підмереж
- [ ] MMM може бачити всі вишки
Типові проблеми¶
Secondary не може підключитись до Primary¶
Симптоми: LTE з'єднання є, але WireGuard handshake не відбувається
Перевірити:
1. Firewall на Primary — UDP 51820 відкритий?
2. NAT на Primary — чи правильно форвардиться?
3. Endpoint address — чи правильний IP Primary в LTE мережі?
# На Secondary
/ping 10.45.10.1
/tool traceroute 10.45.10.1 port=51820 protocol=udp
Failover не спрацьовує¶
Симптоми: Primary offline, але Secondary не переключається
Перевірити:
1. check-gateway=ping встановлено?
2. Gateway reachable в route table?
3. Netwatch працює?
/ip route print detail where dst-address="0.0.0.0/0"
/tool netwatch print
Asymmetric routing¶
Симптоми: Запити йдуть через один шлях, відповіді через інший
Рішення: Переконатись що masquerade працює на всіх transit точках
# На кожній transit tower
/ip firewall nat print where chain=srcnat
Best Practices¶
- Унікальні IP пули — кожна Primary має свій UE pool
- Redundant paths — мінімум 2 шляхи до інтернету для кожної Secondary
- Aggressive keepalive — 15-25 секунд для швидшого детектування падіння
- Netwatch — швидший failover ніж check-gateway
- Logging — зберігати історію failover для аналізу
- Документація — IP схема та topology diagram для кожного deployment
Останнє оновлення: 2 січня 2026
UMTC Project — Ukrainian Military Tactical Communications
Шлях: networking/routing/umtc-lte-mesh-routing.md