✅ Good
srsEPC — Вбудований EPC¶
Чому це важливо для UMTC?
srsEPC — найшвидший спосіб протестувати LTE вишку. Один бінарник замінює всі компоненти EPC (MME, HSS, SGW, PGW). Ідеально для первинного тестування на першому запуску. Для production використовуємо Open5GS, але srsEPC — must-have для дебагу.
Конфігурація srsEPC для тестування.
Коли використовувати¶
srsEPC¶
| Сценарій | Підходить |
|---|---|
| Швидкий тест | ✓ |
| Демонстрація | ✓ |
| Навчання | ✓ |
| Ізольована мережа | ✓ |
| Production | ✗ |
| Складні сценарії | ✗ |
| Інтеграція | ✗ |
Open5GS¶
| Сценарій | Підходить |
|---|---|
| Production | ✓ |
| Масштабування | ✓ |
| Кастомізація | ✓ |
| WebUI | ✓ |
| Моніторинг | ✓ |
| Швидкий тест | △ (складніше) |
Архітектура srsEPC¶
flowchart TB
subgraph EPC["srsEPC (all-in-one)"]
MME["MME<br/>S1-MME, NAS, Auth"]
HSS["HSS<br/>user_db.csv"]
SPGW["SPGW<br/>SGW + PGW"]
end
ENB["srsENB"] -->|"S1-MME"| MME
ENB -->|"S1-U"| SPGW
MME <--> HSS
SPGW -->|"TUN: srs_spgw_sgi"| INET["🌐 Internet"]
style EPC fill:#dcfce7┌─────────────────────────────────────────────┐
│ srsEPC │
│ │
│ ┌─────────────────────────────────────┐ │
│ │ MME │ │
│ │ - S1-MME interface (до eNB) │ │
│ │ - NAS signaling │ │
│ │ - Authentication │ │
│ └─────────────────────────────────────┘ │
│ ↕ │
│ ┌─────────────────────────────────────┐ │
│ │ HSS │ │
│ │ - Subscriber database (user_db.csv)│ │
│ │ - Authentication vectors │ │
│ └─────────────────────────────────────┘ │
│ ↕ │
│ ┌─────────────────────────────────────┐ │
│ │ SPGW │ │
│ │ - SGW + PGW combined │ │
│ │ - IP allocation │ │
│ │ - NAT/routing │ │
│ └─────────────────────────────────────┘ │
└─────────────────────────────────────────────┘
↑ ↓
S1 до eNB TUN interface
(srs_spgw_sgi)
Конфігурація epc.conf¶
Повний приклад¶
#####################################################################
# srsEPC configuration file
#####################################################################
[mme]
# MME ідентифікація
mme_code = 0x1a
mme_group = 0x0001
# TAC (Tracking Area Code)
tac = 0x0007
# PLMN
mcc = 001
mnc = 01
# Інтерфейси
mme_bind_addr = 127.0.1.100
apn = internet
# DNS для UE
dns_addr = 8.8.8.8
# Шифрування
encryption_algo = EEA0 # EEA0 (null), EEA1 (SNOW), EEA2 (AES)
integrity_algo = EIA1 # EIA0 (null), EIA1 (SNOW), EIA2 (AES)
# Paging
paging_timer = 2 # секунди
[hss]
db_file = user_db.csv
[spgw]
gtpu_bind_addr = 127.0.1.100
sgi_if_addr = 172.16.0.1
sgi_if_name = srs_spgw_sgi
# IP pool для UE
# Пул 172.16.0.0/16
# Перший UE отримає 172.16.0.2
[pcap]
enable = false
filename = /tmp/epc.pcap
[log]
all_level = info
all_hex_limit = 32
filename = /tmp/epc.log
nas_level = info
s1ap_level = info
mme_gtpc_level = info
spgw_gtpc_level = info
hss_level = info
База абонентів (user_db.csv)¶
Формат¶
# Поля:
# name, algo, imsi, key, op_type, op/opc, amf, sqn, qci, ip_alloc
ue1,mil,001010000000001,465B5CE8B199B49FAA5F0A2EE238A6BC,opc,E8ED289DEBA952E4283B54E88E6183CA,8000,000000000000,9,dynamic
Пояснення полів¶
| Поле | Опис | Приклад |
|---|---|---|
| name | Ім'я абонента | ue1 |
| algo | Алгоритм | mil (milenage), xor |
| imsi | IMSI (15 цифр) | 001010000000001 |
| key | Ki (128 біт hex) | 465B5CE8... |
| op_type | op або opc | opc |
| op/opc | Operator key | E8ED289D... |
| amf | AMF (16 біт hex) | 8000 |
| sqn | Sequence number | 000000000000 |
| qci | QoS Class ID | 9 |
| ip_alloc | IP allocation | dynamic або IP |
Приклад з кількома UE¶
# user_db.csv
ue1,mil,001010000000001,465B5CE8B199B49FAA5F0A2EE238A6BC,opc,E8ED289DEBA952E4283B54E88E6183CA,8000,000000000000,9,dynamic
ue2,mil,001010000000002,465B5CE8B199B49FAA5F0A2EE238A6BD,opc,E8ED289DEBA952E4283B54E88E6183CA,8000,000000000000,9,dynamic
ue3,mil,001010000000003,465B5CE8B199B49FAA5F0A2EE238A6BE,opc,E8ED289DEBA952E4283B54E88E6183CA,8000,000000000000,9,172.16.0.100
Генерація ключів¶
# Ki (128 біт)
openssl rand -hex 16
# Якщо потрібен OPc з OP та Ki:
# Використати pySim або online калькулятор
Мережева конфігурація¶
TUN інтерфейс¶
# srsEPC автоматично створює srs_spgw_sgi
# Перевірити:
ip addr show srs_spgw_sgi
# Має бути:
# inet 172.16.0.1/16
NAT для інтернету¶
# Увімкнути forwarding
sudo sysctl -w net.ipv4.ip_forward=1
# NAT правило
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# Зберегти
sudo iptables-save | sudo tee /etc/iptables.rules
Firewall¶
# Дозволити S1AP (порт 36412)
sudo ufw allow 36412/sctp
# Дозволити GTP-U (порт 2152)
sudo ufw allow 2152/udp
Запуск¶
Базовий¶
sudo srsepc ~/.config/srsran/epc.conf
Очікуваний вивід¶
--- Software Radio Systems EPC ---
Reading configuration file /home/user/.config/srsran/epc.conf...
HSS Initialized.
MME S1-MME Initialized. S1-MME: 127.0.1.100:36412
MME GTP-C Initialized. GTP-C: 127.0.1.100:2123
SPGW GTP-U Initialized. GTP-U: 127.0.1.100:2152
SPGW S5 Initialized.
SP-GW Initialized.
Моніторинг¶
Логи¶
# Realtime логи
tail -f /tmp/epc.log
# Фільтр NAS
grep -i "nas\|attach\|auth" /tmp/epc.log
Статус абонентів¶
Під час роботи srsEPC показує:
- Attach requests
- Authentication
- IP allocation
PCAP аналіз¶
# Увімкнути в epc.conf:
[pcap]
enable = true
filename = /tmp/epc.pcap
# Аналіз
wireshark /tmp/epc.pcap
# Фільтр: diameter || s1ap || gtp
Типові проблеми¶
Authentication failed¶
Причини:
1. Ki/OPc не співпадають між SIM та user_db.csv
2. IMSI неправильний
3. algo неправильний (mil vs xor)
Діагностика:
- Перевірити логи HSS
- Порівняти параметри SIM (pySim-read) з user_db.csv
UE не отримує IP¶
Причини:
1. SPGW не запустився
2. TUN інтерфейс не створився
3. IP pool вичерпано
Діагностика:
- ip addr show srs_spgw_sgi
- Перевірити логи SPGW
eNB не підключається¶
Причини:
1. mme_bind_addr неправильна
2. Firewall блокує порт 36412
3. SCTP не працює
Діагностика:
- sudo ss -lpn | grep 36412
- sudo tcpdump -i lo port 36412
Обмеження srsEPC¶
| Аспект | Обмеження |
|---|---|
| Кількість UE | ~50 (теоретично) |
| Throughput | Один процес |
| HA | Не підтримується |
| REST API | Немає |
| WebUI | Немає |
| Логування | Базове |
| Моніторинг | Мінімальний |
Міграція на Open5GS¶
Коли переходити на Open5GS
- Production deployment
- Потрібен WebUI для управління
- Масштабування (кілька eNB)
- Інтеграція з зовнішніми системами
Кроки міграції:
1. Встановити Open5GS
2. Перенести абонентів у MongoDB
3. Змінити mme_addr в enb.conf
4. Налаштувати мережу
Пов'язані теми¶
- srsRAN Overview — архітектура srsRAN
- srsENB — налаштування базової станції
- Встановлення srsRAN — інструкція збірки
- Програмування SIM — створення SIM-карт
- Перший тест — end-to-end перевірка
Шлях: ran/srs-epc.md