10.5 Робочий референс — софтовий IMS-стенд¶
[!IMPORTANT] Проєкт
lyatanski/ims— це повний, цілком софтовий IMS — Kamailio CSCF плюс повний supporting cast — зшитий через Docker Compose і Helm, запускається на одній машині. Цей розділ мапить його компоненти на решту цієї частини.[!NOTE]
lyatanski/ims— сторонній лаб, що підтримується незалежно від цього посібника. Сприймайте його як навчально-тестовий референс, не як production-blueprint, і звіряйтеся з репозиторієм щодо поточного стану — він активно розвивається.
Що це¶
Відтворюваний, цілком опенсорсний IMS-core, що підіймається однією командою docker compose або передеплоюється на Kubernetes через прикладені Helm-чарти. Він цілить у VoLTE/5G-flow'и і тримається 3GPP-специфікацій (TS 23.228, 24.229, Cx 29.228/229, Rx 29.214, charging 32.299).
Компоненти, змапані на цю частину¶
Стек розбитий на Compose-профілі — IMS, core network, billing, monitoring, test — які лягають майже один-в-один на 10.4:
| Шар | Компонент | Грає роль | Покрито в |
|---|---|---|---|
| IMS-сигналізація | Kamailio (P/I/S-CSCF) | CSCF | 10.2 |
| Медіа | rtpengine | медіа-релей | 10.4 |
| Маршрутизація | CoreDNS | NAPTR/SRV/ENUM | 10.4 |
| Стан | MariaDB / Valkey | стор S-CSCF / rtpengine | 10.2 |
| Абонент/політика | open5gs | HSS, PCRF | 10.3 |
| Пакетне ядро | open5gs | SMF, UPF (CUPS) | 10.4 |
| Diameter-маршрутизація | freeDiameter | DRA | 10.3 |
| Білінг | CGRateS | OCS | 10.3 |
| Моніторинг | Prometheus · Grafana · Loki · cAdvisor · Promtail | observability | 10.4 |
| Тестовий UE | Doubango-форк + go-gtp | телефон | — |
flowchart LR
Test([тестовий UE]) -->|GTP| CORE[open5gs<br/>SMF · UPF]
CORE -->|Gm| P[P-CSCF]
P --- I[I-CSCF] --- S[S-CSCF]
P -.Rx.-> PCRF[(PCRF)]
I -.Cx.-> DRA{{freeDiameter DRA}} -.-> HSS[(HSS)]
S -.Cx.-> DRA
S -.Ro.-> OCS[(CGRateS)]
P --- RTP[rtpengine]
S --- RTP
classDef cscf fill:#1f6feb,stroke:#1f6feb,color:#fff
classDef ext fill:#bf8700,stroke:#bf8700,color:#fff
classDef media fill:#238636,stroke:#238636,color:#fff
class P,I,S cscf
class PCRF,HSS,OCS,DRA ext
class RTP,CORE,Test media
Як усередині налаштований Kamailio¶
Лаб тримає три CSCF-ролі як окремі конфіги Kamailio зі спільною базою:
common.cfg— спільні завантаження модулів і дефолтиproxy.cfg— P-CSCFinterrogating.cfg— I-CSCFserving.cfg— S-CSCF5g.cfg,monitor.cfg— 5G-специфічна обв'язка і metrics/health-ендпоінт
У цих конфігах можна вичитати точний набір ims_*-модулів, що описувала ця частина — список loadmodule включає:
cdp cdp_avp ims_auth
ims_icscf ims_registrar_pcscf ims_registrar_scscf
ims_usrloc_pcscf ims_usrloc_scscf ims_ipsec_pcscf
ims_isc ims_qos ims_charging
ims_dialog rtpengine db_redis
плюс звичні робочі конячки (tm, rr, sl, sanity, siputils, textops, pv, presence/pua для reg-event-підписки, і xhttp_prom для Prometheus-метрик). Завантажені разом у role-specific-файлах, вони — мапа роль→модуль із 10.2 у конкретній формі.
Що з цим робити¶
Репо постачає flow-доки (doc/registration.md, doc/session.md, doc/transaction.md) і doc по reference-points, що дзеркалить таблицю з 10.1. Продуктивний цикл:
- Підняти (
docker compose --profile test up -d— воно вантажить kernel-модуль, тож рекомендована VM). - Дивитися на дріт:
wireshark -i any --display-filter 'gtpv2 or sip or diameter.cmd.code != 280'(відфільтрувавши Diameter-watchdog'и). - Тригернути реєстрацію і простежити двопрохідний flow із 10.2 пакет за пакетом — REGISTER, UAR/UAA, MAR/MAA, 401, IPSec, SAR/SAA, 200, далі reg-event SUBSCRIBE.
Простеживши цей один обмін на дроті, ви мапите всю частину на реальні пакети.
Інший кут — академічний single-VM-стенд¶
Контрастний, навчально-орієнтований сетап — IMS-Kamailio-Tutorial від Ana Belén García Hernando (Universidad Politécnica de Madrid): повний IMS на одній VM, оптимізований під чіткі Wireshark-flow'и, а не під реалістичність.
- Усі три CSCF-ролі — це Kamailio. P-CSCF (
:5060), S-CSCF (:6060) та I-CSCF (:4060) крутяться як три окремі процеси Kamailio на одному хості (форк herlesupreeth ізKamailio_IMS_Config-шаблонами) — один бінар покриває весь шар CSCF. Кожна роль тримає свійkamailio_*.cfg,*.xml(конфіг Diameter-peer'аcdp) і файл defines. - Інший склад компонентів. Kamailio з FHoSS (Java-HSS від FOKUS з лінії OpenIMSCore) замість open5gs, bind9 для DNS, PJSUA як тестовий UA — контраст із виборами 10.4: ролі важать більше за продукти.
- Чистий IMS, без EPC. Без пакетного ядра, тож немає Rx-інтерфейсу і підняття bearer'а — SIP+Cx-ядро IMS в ізоляції.
- Capture-first. Кожна функція отримує свій
127.0.0.X-loopback; cgroups + iptables SNAT + nflog дають один capture з коректно-адресованими, причинно-впорядкованими трасами.
Обидва стенди походять від upstream-рецепту — Open5GS «VoLTE Setup with Kamailio IMS and Open5GS» Сукчана Лі.
Підсумок¶
IMS ставить Kamailio в обмежену роль: conformant-CSCF, що володіє SIP-reference-points і делегує Cx/Rx/Ro/Rf зовнішнім Diameter-peer'ам. Два стенди зшивають цю роль двома способами — cloud-native (Compose/Helm, ядро open5gs) і single-VM (FHoSS, фокус на capture). Обидва — read-the-configs, run-the-flows-референси для всього з 10.1–10.4.