srsEPC — Вбудований EPC
Конфігурація srsEPC для тестування.
Коли використовувати
srsEPC
| Сценарій |
Підходить |
| Швидкий тест |
✓ |
| Демонстрація |
✓ |
| Навчання |
✓ |
| Ізольована мережа |
✓ |
| Production |
✗ |
| Складні сценарії |
✗ |
| Інтеграція |
✗ |
Open5GS
| Сценарій |
Підходить |
| Production |
✓ |
| Масштабування |
✓ |
| Кастомізація |
✓ |
| WebUI |
✓ |
| Моніторинг |
✓ |
| Швидкий тест |
△ (складніше) |
Архітектура srsEPC
┌─────────────────────────────────────────────┐
│ 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
Коли переходити:
- Production deployment
- Потрібен WebUI
- Потрібна масштабованість
- Потрібна інтеграція
Що змінити:
1. Встановити Open5GS
2. Перенести абонентів у MongoDB
3. Змінити mme_addr в enb.conf
4. Налаштувати мережу