Проект Kamailio отмечает 25 лет с момента начала разработки, которая стартовала 2 сентября 2001 года в исследовательском институте FhG Fokus в Берлине под названием SIP Express Router (SER).
Познакомился я с ним довольно поздно в районе 2019
Увы, где я с ним был основные задачи были по переносу клиентов на РТУ, но с синтаксисом познакомился плотно.
Основные вехи проекта
🔘2001 год: Начало разработки системы SER (предшественника Kamailio).
🔘2005 год: Появление ответвления OpenSER.
🔘2008 год: Проект переименован в Kamailio из-за торговых знаков.
🔘2012 год: Официальное объединение кодовой базы с SER.
🔘2026 год: Выход мажорной версии v6.1 и празднование 25-летия проекта на конференции Kamailio World в Берлине
Особенности платформы
Назначение: Масштабируемый SIP-сервер с открытым исходным кодом (GPLv2) для VoIP, WebRTC и систем реального времени.
Производительность: Написан на языке Си для Unix/Linux, обрабатывает тысячи вызовов в секунду.
Применение: Используется крупными операторами связи и провайдерами по всему миру
Kamailio — это не классическая АТС (IP-PBX), а высокопроизводительный SIP-прокси-сервер и маршрутизатор сигнального трафика. Он не обрабатывает медиа-потоки (аудио/видео) напрямую, а занимается исключительно маршрутизацией SIP-сообщений.
Ключевые компоненты архитектуры:
Ядро (Core): Написано на чистом языке C. Отвечает за низкоуровневые операции: сетевой ввод-вывод (сервер основан на многопроцессной модели fork()), парсинг SIP-пакетов, управление памятью (разделяемая память shm и приватная память pkg) и базовый тайм-менеджмент.
Модульная система: Почти вся логика вынесена в динамические модули (их более 150 и с каждым годов количество ростет). Модули отвечают за аутентификацию (AUTH), работу с базами данных (DB_MYSQL, DB_POSTGRES и др.), учет вызовов (ACC) и интеграцию с другими системами.
Скрипт маршрутизации (kamailio.cfg): Это сердце настройки и часто все что надо знать :). Язык конфигурации Kamailio похож на язык программирования. Он позволяет перехватывать каждый SIP-запрос или ответ и применять к нему кастомную логику (маршруты request_route, reply_route, failure_route). Для сложной логики также поддерживается интеграция с Lua, Python и JavaScript (KEMI).
Транспортный уровень: Из коробки поддерживает протоколы UDP, TCP, TLS, SCTP, а также WebSocket (и Secure WebSocket) для работы с WebRTC прямо из браузера.
Как понять что готов к Камаилио: должен +/- понимать что здесь творится и желать это повторить самому
# Handle requests within SIP dialogs
route[WITHINDLG] {
if (!has_totag()) return;
# sequential request withing a dialog should
# take the path determined by record-routing
if (loose_route()) {
route(DLGURI);
if (is_method("BYE")) {
setflag(FLT_ACC); # do accounting ...
setflag(FLT_ACCFAILED); # ... even if the transaction fails
} else if ( is_method("ACK") ) {
# ACK is forwarded statelessly
route(NATMANAGE);
} else if ( is_method("NOTIFY") ) {
# Add Record-Route for in-dialog NOTIFY as per RFC 6665.
record_route();
}
route(RELAY);
exit;
}
if (is_method("SUBSCRIBE") && uri == myself) {
# in-dialog subscribe requests
route(PRESENCE);
exit;
}
if ( is_method("ACK") ) {
if ( t_check_trans() ) {
# no loose-route, but stateful ACK;
# must be an ACK after a 487
# or e.g. 404 from upstream server
route(RELAY);
exit;
} else {
# ACK without matching transaction ... ignore and discard
exit;
}
}
sl_send_reply("404","Not here");
exit;
}Всем связь!
