LTE Multi-Tower Mesh: Сценарій з 3+ вишками

Огляд

Цей документ описує розгортання mesh-мережі з трьома і більше LTE вишками, де кожна може бути як клієнтом так і точкою доступу одночасно.

Топологія

Базова схема (3 вишки)

                         ┌─────────────────┐
                         │   🌐 INTERNET   │
                         └────────┬────────┘
                                  │
                         ┌────────▼────────┐
                         │    ВИШКА A      │
                         │   (Primary)     │
                         │ ─────────────── │
                         │ • Starlink      │
                         │ • Open5GS Core  │
                         │ • srsENB        │
                         │ • WG Hub        │
                         └───┬─────────┬───┘
                    LTE      │         │      LTE
                 ┌───────────┘         └───────────┐
                 │                                 │
        ┌────────▼────────┐               ┌────────▼────────┐
        │    ВИШКА B      │     LTE       │    ВИШКА C      │
        │  (Secondary)    │◄─────────────►│  (Secondary)    │
        │ ─────────────── │   backup      │ ─────────────── │
        │ • LTE Modem→A   │               │ • LTE Modem→A   │
        │ • srsENB        │               │ • srsENB        │
        │ • Local Core    │               │ • Local Core    │
        └────────┬────────┘               └────────┬────────┘
                 │                                 │
            ┌────▼────┐                       ┌────▼────┐
            │Клієнти B│                       │Клієнти C│
            └─────────┘                       └─────────┘

Розширена схема (5+ вишок)

                              INTERNET
                                  │
                         ┌────────▼────────┐
                         │    ВИШКА A      │
                         │   HUB/Primary   │
                         └───┬───┬───┬─────┘
                             │   │   │
              ┌──────────────┘   │   └──────────────┐
              │                  │                  │
     ┌────────▼────────┐ ┌──────▼───────┐ ┌────────▼────────┐
     │    ВИШКА B      │ │   ВИШКА C    │ │    ВИШКА D      │
     │   Secondary     │ │  Secondary   │ │   Secondary     │
     └───────┬─────────┘ └──────────────┘ └────────┬────────┘
             │                                     │
    ┌────────▼────────┐                   ┌────────▼────────┐
    │    ВИШКА E      │                   │    ВИШКА F      │
    │   Tertiary      │                   │   Tertiary      │
    └─────────────────┘                   └─────────────────┘

Ролі вишок

Primary (Hub)

  • Має прямий інтернет (Starlink, оптика)
  • Центральний Open5GS Core
  • WireGuard Hub для всього mesh
  • Обслуговує Secondary вишки як клієнтів

Secondary

  • Підключається до Primary через LTE
  • Має власний srsENB для своїх клієнтів
  • Локальний Core для офлайн-режиму
  • Може бути relay для Tertiary вишок

Tertiary

  • Підключається до Secondary через LTE
  • Два хопи до інтернету (Tertiary → Secondary → Primary)
  • Максимальна автономність

IP-адресація

WireGuard Mesh

Вишка WG IP Роль Підмережа клієнтів
A 10.10.10.1 Primary 10.10.20.0/24
B 10.10.10.2 Secondary 10.10.21.0/24
C 10.10.10.3 Secondary 10.10.22.0/24
D 10.10.10.4 Secondary 10.10.23.0/24
E 10.10.10.5 Tertiary 10.10.24.0/24
F 10.10.10.6 Tertiary 10.10.25.0/24

Open5GS Core

Вишка MME IP SGW IP PGW IP
A (Primary) 10.10.10.1 10.10.10.1 10.10.10.1
B (Local) 10.10.10.2 10.10.10.2 10.10.10.2
C (Local) 10.10.10.3 10.10.10.3 10.10.10.3

Конфігурація

Вишка A: Primary Hub

WireGuard Hub

# /etc/wireguard/wg0.conf
[Interface]
Address = 10.10.10.1/24
PrivateKey = <PRIVATE_KEY_A>
ListenPort = 51820
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT
PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

# Вишка B
[Peer]
PublicKey = <PUBLIC_KEY_B>
AllowedIPs = 10.10.10.2/32, 10.10.21.0/24, 10.10.10.5/32, 10.10.24.0/24

# Вишка C
[Peer]
PublicKey = <PUBLIC_KEY_C>
AllowedIPs = 10.10.10.3/32, 10.10.22.0/24

# Вишка D
[Peer]
PublicKey = <PUBLIC_KEY_D>
AllowedIPs = 10.10.10.4/32, 10.10.23.0/24, 10.10.10.6/32, 10.10.25.0/24

Open5GS MME

# /etc/open5gs/mme.yaml
mme:
  freeDiameter: /etc/freeDiameter/mme.conf
  s1ap:
    - addr: 0.0.0.0
  gtpc:
    - addr: 10.10.10.1
  gummei:
    plmn_id:
      mcc: 001
      mnc: 01
    mme_gid: 1
    mme_code: 1
  tai:
    plmn_id:
      mcc: 001
      mnc: 01
    tac: 1
  security:
    integrity_order: [EIA2, EIA1, EIA0]
    ciphering_order: [EEA0, EEA1, EEA2]

srsENB

# /etc/srsran/enb.conf
[enb]
enb_id = 0x19B01
mcc = 001
mnc = 01
mme_addr = 127.0.0.1
gtp_bind_addr = 10.10.10.1
s1c_bind_addr = 10.10.10.1
n_prb = 50

[rf]
device_name = lime
device_args = auto
dl_earfcn = 3100
tx_gain = 60
rx_gain = 40

Вишка B: Secondary

WireGuard Client

# /etc/wireguard/wg0.conf
[Interface]
Address = 10.10.10.2/24
PrivateKey = <PRIVATE_KEY_B>
# Роутинг через LTE
Table = off
PostUp = ip route add 10.10.10.1/32 via $(ip route | grep wwan0 | grep default | awk '{print $3}') dev wwan0
PostUp = wg set %i fwmark 51820
PostUp = ip route add default dev %i table 51820
PostUp = ip rule add fwmark 51820 table 51820
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT
PostUp = iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE

[Peer]
PublicKey = <PUBLIC_KEY_A>
Endpoint = <PRIMARY_PUBLIC_IP>:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

# Вишка E (Tertiary через B)
[Peer]
PublicKey = <PUBLIC_KEY_E>
AllowedIPs = 10.10.10.5/32, 10.10.24.0/24

srsENB для своїх клієнтів

# /etc/srsran/enb.conf
[enb]
enb_id = 0x19B02
mcc = 001
mnc = 01
# Підключення до Primary Core через WG
mme_addr = 10.10.10.1
gtp_bind_addr = 10.10.10.2
s1c_bind_addr = 10.10.10.2
n_prb = 50

[rf]
device_name = lime
device_args = auto
# Інша частота!
dl_earfcn = 3350
tx_gain = 60
rx_gain = 40

Локальний Core (для офлайн)

# /etc/open5gs/mme-local.yaml
mme:
  freeDiameter: /etc/freeDiameter/mme.conf
  s1ap:
    - addr: 127.0.0.1
  gtpc:
    - addr: 10.10.10.2
  gummei:
    plmn_id:
      mcc: 001
      mnc: 01
    mme_gid: 2
    mme_code: 2
  tai:
    plmn_id:
      mcc: 001
      mnc: 01
    tac: 2

Вишка E: Tertiary

WireGuard через Вишку B

# /etc/wireguard/wg0.conf
[Interface]
Address = 10.10.10.5/24
PrivateKey = <PRIVATE_KEY_E>
Table = off
PostUp = ip route add 10.10.10.2/32 via $(ip route | grep wwan0 | grep default | awk '{print $3}') dev wwan0
PostUp = wg set %i fwmark 51820
PostUp = ip route add default dev %i table 51820
PostUp = ip rule add fwmark 51820 table 51820

[Peer]
PublicKey = <PUBLIC_KEY_B>
# Endpoint — WG IP Вишки B (через LTE від B)
Endpoint = 10.10.10.2:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

Частотне планування

Band 7 (2600 MHz)

Вишка EARFCN Центральна частота DL Ширина
A 3100 2655 MHz 10 MHz
B 3200 2665 MHz 10 MHz
C 3300 2675 MHz 10 MHz
D 3400 2685 MHz 10 MHz

Band 3 (1800 MHz) — альтернатива

Вишка EARFCN Центральна частота DL Ширина
A 1575 1842.5 MHz 10 MHz
B 1675 1852.5 MHz 10 MHz
C 1775 1862.5 MHz 10 MHz

Правила

┌─────────────────────────────────────────────────────────────┐
│  ВАЖЛИВО: Сусідні вишки НЕ повинні використовувати          │
│  однакові частоти! Мінімальний рознос — 10 MHz              │
│                                                             │
│  Вишка A ────► 2655 MHz                                     │
│  Вишка B ────► 2665 MHz  (в зоні видимості A)              │
│  Вишка C ────► 2655 MHz  (НЕ в зоні видимості A — можна)   │
└─────────────────────────────────────────────────────────────┘

Автоматичний Failover

Сценарії відмов

Сценарій 1: Втрата інтернету на Primary
┌─────────┐         ┌─────────┐         ┌─────────┐
│ Вишка A │    X    │ Internet│         │         │
│         │─────────│         │         │         │
│ Primary │         └─────────┘         │         │
└────┬────┘                             │         │
     │ LTE                              │         │
┌────▼────┐                             │         │
│ Вишка B │ ◄─── перемикається на ────► │ Вишка C │
│         │      локальний Core         │         │
└─────────┘                             └─────────┘

Результат: B і C працюють автономно зі своїми клієнтами
Сценарій 2: Втрата Вишки B
┌─────────┐
│ Вишка A │
│ Primary │
└────┬────┘
     │
     │ LTE (B недоступна)
     │
┌────▼────┐         ┌─────────┐
│ Вишка E │ ◄────── │ Вишка B │ X
│Tertiary │  relay  │Secondary│
└─────────┘         └─────────┘

Результат: E перемикається на прямий зв'язок з A
          (якщо в зоні покриття) або офлайн режим

Скрипт multi-path failover

#!/bin/bash
# /usr/local/bin/mesh-failover.sh

PRIMARY="10.10.10.1"
SECONDARY_PEERS=("10.10.10.2" "10.10.10.3" "10.10.10.4")
CHECK_INTERVAL=15
FAIL_THRESHOLD=3

declare -A fail_counts

check_peer() {
    local peer=$1
    if ping -c 1 -W 3 $peer > /dev/null 2>&1; then
        return 0
    fi
    return 1
}

find_best_route() {
    # Спочатку пробуємо Primary
    if check_peer $PRIMARY; then
        echo $PRIMARY
        return
    fi

    # Шукаємо робочий Secondary
    for peer in "${SECONDARY_PEERS[@]}"; do
        if check_peer $peer; then
            echo $peer
            return
        fi
    done

    echo "none"
}

switch_route() {
    local new_gw=$1

    if [ "$new_gw" == "none" ]; then
        echo "$(date): No route available, switching to offline mode"
        systemctl start open5gs-local
        return
    fi

    echo "$(date): Switching default route to $new_gw"
    ip route replace default via $new_gw dev wg0
}

current_route=""

while true; do
    best=$(find_best_route)

    if [ "$best" != "$current_route" ]; then
        switch_route $best
        current_route=$best
    fi

    sleep $CHECK_INTERVAL
done

Моніторинг

Prometheus метрики

# /etc/prometheus/prometheus.yml
scrape_configs:
  - job_name: 'mesh-nodes'
    static_configs:
      - targets:
        - '10.10.10.1:9100'  # Вишка A
        - '10.10.10.2:9100'  # Вишка B
        - '10.10.10.3:9100'  # Вишка C
        - '10.10.10.4:9100'  # Вишка D
        - '10.10.10.5:9100'  # Вишка E

Grafana Dashboard

Ключові метрики:
- WireGuard handshake age (< 180s = OK)
- LTE signal strength (RSRP, RSRQ)
- Latency між вишками
- Кількість підключених UE
- Throughput на кожному лінку

Alerting

# /etc/prometheus/alerts.yml
groups:
  - name: mesh-alerts
    rules:
      - alert: NodeDown
        expr: up{job="mesh-nodes"} == 0
        for: 2m
        labels:
          severity: critical
        annotations:
          summary: "Mesh node {{ $labels.instance }} is down"

      - alert: HighLatency
        expr: probe_duration_seconds > 0.5
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "High latency to {{ $labels.instance }}"

      - alert: WireGuardHandshakeStale
        expr: wireguard_latest_handshake_seconds > 180
        for: 3m
        labels:
          severity: warning
        annotations:
          summary: "WireGuard handshake stale on {{ $labels.instance }}"

Масштабування

Додавання нової вишки

  1. Згенерувати WireGuard ключі
wg genkey | tee privatekey | wg pubkey > publickey
  1. Визначити роль (Secondary/Tertiary)

  2. Обрати частоту (уникати конфлікту з сусідами)

  3. Додати peer на Hub або parent вишку

  4. Налаштувати srsENB з унікальним enb_id

  5. Додати SIM-карти в HSS

Обмеження

Параметр Ліміт Примітка
Max вишок в mesh ~50 Обмеження WireGuard peers
Max хопів 3-4 Latency збільшується
Max UE на вишку ~100 Залежить від hardware
Max відстань LTE 5-10 км З направленими антенами до 30 км

Приклад реального розгортання

Сценарій: Бригадний рівень

                    ┌──────────────────┐
                    │   Штаб бригади   │
                    │   (Starlink)     │
                    │   ВИШКА-HQ       │
                    └────────┬─────────┘
                             │
            ┌────────────────┼────────────────┐
            │                │                │
    ┌───────▼───────┐ ┌──────▼──────┐ ┌───────▼───────┐
    │  1-й батальйон│ │ 2-й батальйон│ │ 3-й батальйон│
    │   ВИШКА-1     │ │   ВИШКА-2   │ │   ВИШКА-3    │
    └───────┬───────┘ └──────┬──────┘ └───────┬───────┘
            │                │                │
    ┌───────▼───────┐ ┌──────▼──────┐ ┌───────▼───────┐
    │  Роти 1-го    │ │  Роти 2-го  │ │  Роти 3-го   │
    │  ВИШКА-1A/1B  │ │  ВИШКА-2A   │ │  ВИШКА-3A/3B │
    └───────────────┘ └─────────────┘ └───────────────┘

IP схема для бригади

Підрозділ WG IP LTE TAC Підмережа
HQ 10.10.10.1 1 10.10.20.0/24
1-й бат 10.10.10.10 10 10.10.30.0/24
2-й бат 10.10.10.20 20 10.10.40.0/24
3-й бат 10.10.10.30 30 10.10.50.0/24
Рота 1A 10.10.10.11 11 10.10.31.0/24
Рота 1B 10.10.10.12 12 10.10.32.0/24

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

Шлях: lte/multi-tower-mesh.md

UMTC Wiki © 2026 | Ukrainian Military Tactical Communications