Перейти до змісту

Kamailio Handbook — Українська

Як Kamailio влаштований зсередини.

Kamailio Мова Switch to English


[!IMPORTANT] Цей посібник свідомо не переказує офіційну документацію. Передбачається, що ви вже знаєте, що таке Kamailio на поверхні. Натомість тут — занурення в рантайм, життєвий цикл повідомлень, движок скриптів, KEMI та архітектурні фішки, які формують поведінку Kamailio. Розділу «модуль за модулем» тут не буде.

Використані джерела:

Як SIP-запит проходить через Kamailio

flowchart LR
    In([SIP IN]) --> Parser[Парсер]
    Parser --> Sanity[Sanity-перевірки]
    Sanity --> RR[request_route]
    RR --> Mods[[Функції модулів<br/>tm · rr · auth · dispatcher · …]]
    Mods --> Decision{Stateful?}
    Decision -- так --> TM[tm: створити транзакцію]
    Decision -- ні --> SL[sl: stateless-форвард]
    TM --> Out([SIP OUT])
    SL --> Out

    classDef io fill:#238636,stroke:#238636,color:#fff
    classDef core fill:#1f6feb,stroke:#1f6feb,color:#fff
    classDef mod fill:#bf8700,stroke:#bf8700,color:#fff
    classDef branch fill:#6e7681,stroke:#6e7681,color:#fff

    class In,Out io
    class Parser,Sanity,RR core
    class Mods,TM,SL mod
    class Decision branch

Одне отримане SIP-повідомлення проходить через цей конвеєр. Більшість того, що в конфізі Kamailio виглядає «магічно», — це просто вибір гілки на цьому шляху. Цей посібник розбирає кожен прямокутник вище.

Зміст

1. Передмова

  • 1.1 Вступ — сигналізація проти медіа, ментальна модель, чого чекати ✅
  • 1.2 SIP за 60 секунд — транзакції, діалоги, positive/negative ACK, роль проксі ✅

2. Рантайм

3. Життєвий цикл SIP-повідомлення

4. Движок скриптів

  • 4. Script engine — pointer-розділ — тонка карта де про script-engine-машинерію написано в інших розділах, плюс ті кілька внутрішніх деталей (форма AST, диспетчеризація псевдо-змінних, конвенція return-value) що нікуди не вмістилися ✅

5. KEMI — embedded scripting

  • 5.1 Яку проблему вирішує KEMI — коли cfg DSL перестає вистачати ✅
  • 5.2 Bridge — як Lua, Python, JS, Ruby вбудовуються в C-рантайм ✅
  • 5.3 Lifecycle — per-worker-інтерпретатор, що переживає повідомлення, reload ✅
  • 5.4 Tradeoffs — коли виграє KEMI, коли native cfg, гібридний патерн ✅

6. Стан, транзакції, діалоги

7. Control plane

  • 7.1 Архітектура RPC — BINRPC vs JSON-RPC, command registry, auth ✅
  • 7.2 kamcmd — важіль оператора, п'ять команд для повсякдення ✅
  • 7.3 Event routes — програмовані хуки в життєвий цикл рантайму ✅

8. Архітектурні фішки

  • 8.1 Topology hiding (topos) — переписування виклику так, щоб топологія зникла ✅
  • 8.2 Async-транзакціїt_suspend / t_continue для неблокуючих сценаріїв ✅
  • 8.3 htable — хеш-таблиці у спільній пам'яті як «бідний Redis» ✅
  • 8.4 dispatcher — hash-based stickiness, набори шлюзів, failover-алгоритми ✅
  • 8.5 dmq — синхронізація стану між інстансами Kamailio ✅
  • 8.6 Медіа — rtpengine — анкорінг RTP, керування демоном з конфіга, захист від RTP-bleed, SRTP/DTLS↔RTP, ICE/STUN, kernel-mode-форвардинг ✅
  • 8.7 Захоплення SIP через TLS — чому wire-capture не працює на TLS/WSS, тап розшифрованого SIP через siptrace, HEP і живий sngrep

9. Безпека і hardening

10. Kamailio в IMS

11. Довідник


🇬🇧 English