Маршрутизація 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 сценарії

До:                              Після:
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

  1. Унікальні IP пули — кожна Primary має свій UE pool
  2. Redundant paths — мінімум 2 шляхи до інтернету для кожної Secondary
  3. Aggressive keepalive — 15-25 секунд для швидшого детектування падіння
  4. Netwatch — швидший failover ніж check-gateway
  5. Logging — зберігати історію failover для аналізу
  6. Документація — IP схема та topology diagram для кожного deployment

Останнє оновлення: 2 січня 2026
UMTC Project — Ukrainian Military Tactical Communications

Шлях: networking/routing/umtc-lte-mesh-routing.md

UMTC Wiki © 2026 | Ukrainian Military Tactical Communications