Дружище! В этой статье мы пошагово разберем процесс установки и первичной настройки Kamailio SIP сервера. Установку будем производить на Ubuntu 18.04/16.04. Готов приблизиться к телефонии уровня энтерпрайз, построенной на open – source? :)
А что есть Kamailio?
Kamailio берет начало от SER/Open SER. Откровенно говоря, Kamailio это масштабируемая и гибкая SIP – платформа, созданная как для маленьких инсталляций, так и для больших проектов уровня сервис – провайдеров. Продукт написан на C и работает на Linux/Unix машинах. Kamailio используется в связке с медиа – сервером (RTP потоки и данные, например, Asterisk) и обеспечивает такие фичи как:
- До 5000 вызовов в секунду;
- Поддержка 300 000 абонентов (WOW!) при условии наличия всего 4ГБ оперативной памяти для сервера Kamailio!
- Легкая кластеризация и добавление новых нод в существующих кластер;
Вообще, Kamailio может выполнять такие роли как:
- Registrar server - точка для регистрации клиентов (UAC) ;
- Location server - сервер определения местоположения. Сервер хранит адрес (сетевой) абонента и отдает его SIP – серверам по запросу;
- Proxy server - роль посредника для дальнейшего проксирования этих запросов далее по цепочке SIP - серверов;
- SIP Application server - он же SAS. Сервер приложений. Любых. Плечи в БД, API, XML и так далее – все здесь;
- Redirect server - информация клиенту (UAC) о его маршруте. Условно говоря, перенаправляет SIP – потоки по нужному пути;
На этом прелести Kamailio не заканчиваются. Вот еще немного фич, на которые стоит обратить внимание:
- Поддержка NAT –T (NAT traversal) для SIP и RTP трафика;
- Балансировка нагрузки и отказоустойчивость с множеством сценариев/алгоритмов распределения трафика (на случай отказа);
- Лёгкий механизм настрйоки правил маршрутизации;
- Простота в реализации отказоустойчивой маршрутизации! Отвалился один маршрут – легко перенаправить трафик на другой;
- Поддержка IPv4 и IPv6;
- SCTP (Stream Control Transmission Protocol) с поддержкой многопоточности и так называемого multi – homing (синхронизация хостов по двум и более физическим каналам);
- Коммуникация по протоколам UDP, TCP, TLS и SCTP;
- Кодите на Java, Python, Lua, Perl? Ваши навыки точно пригодятся :)
Приступаем
Перед началом работ, у вас должны быть выполнены следующие требования:
- У вас есть сервер, с установленной на него Ubuntu 18.04/16.04;
- Вы установили MariaDB на этот сервер;
- Вы добавили репозитории Kamailio;
Мы предполагаем, что 1 и 2 пункты вы выполнили :) Приступаем к третьему.
Добавляем репозиторий Kamailio
Если у вас установлена Ubuntu версии 16.04 вам нужно добавить репозиторий Kamailio, который будет использован при установке этой SIP – платформы.
Для начала скачиваем и добавляем GPG ключ:
wget -O- http://deb.kamailio.org/kamailiodebkey.gpg | sudo apt-key add -
После этого нужно добавить строки в файл /etc/apt/sources.list
. Работать мы будем с версией 5.1 Kamailio:
$ sudo vim /etc/apt/sources.list.d/kamailio.list
Добавляем данные:
deb http://deb.kamailio.org/kamailio51 xenial main deb-src http://deb.kamailio.org/kamailio51 xenial main
Установка Kamailio
Как только мы сконфигурировали репозитории, приступаем к установке самого продукта. В том числе, мы установим некоторые MySQL модули:
$ sudo apt install kamailio kamailio-mysql-modules
Установим так же модуль для web – сокетов:
$ sudo apt install kamailio-websocket-modules
Ждем. Как только процессы, рождаемые этими командами будут выполнены, мы можем проверить приложение kamailio
и увидеть его версию командой kamailio -V
:
$ which kamailio /usr/sbin/kamailio $ kamailio -V version: kamailio 5.1.2 (x86_64/linux) flags: STATS: Off, USE_TCP, USE_TLS, USE_SCTP, TLS_HOOKS, DISABLE_NAGLE, USE_MCAST, DNS_IP_HACK, SHM_MEM, SHM_MMAP, PKG_MALLOC, Q_MALLOC, F_MALLOC, TLSF_MALLOC, DBG_SR_MEMORY, USE_FUTEX, FAST_LOCK-ADAPTIVE_WAIT, USE_DNS_CACHE, USE_DNS_FAILOVER, USE_NAPTR, USE_DST_BLACKLIST, HAVE_RESOLV_RES ADAPTIVE_WAIT_LOOPS=1024, MAX_RECV_BUFFER_SIZE 262144, MAX_LISTEN 16, MAX_URI_SIZE 1024, BUF_SIZE 65535, DEFAULT PKG_SIZE 8MB poll method support: poll, epoll_lt, epoll_et, sigio_rt, select. id: unknown compiled with gcc 7.3.0
Огонь. После этого, правим файл /etc/kamailio/kamctlrc
(откройте так же через vim) и проверяем, что параметр DBENGINE
выставлен в значение MySQL.
Раскомментируйте значение DBENGINE=MYSQL, удалив # перед строчкой
Далее, создаем базу данных. Команда, указанная ниже, создаст пользователей и таблицы, необходимые для Kamailio:
$ kamdbctl create INFO: creating database kamailio ... INFO: granting privileges to database kamailio ... INFO: creating standard tables into kamailio ... INFO: Core Kamailio tables succesfully created. Install presence related tables? (y/n): y INFO: creating presence tables into kamailio ... INFO: Presence tables succesfully created. Install tables for imc cpl siptrace domainpolicy carrierroute drouting userblacklist htable purple uac pipelimit mtree sca mohqueue rtpproxy rtpengine? (y/n): y INFO: creating extra tables into kamailio ... INFO: Extra tables succesfully created. Install tables for uid_auth_db uid_avp_db uid_domain uid_gflags uid_uri_db? (y/n): y INFO: creating uid tables into kamailio ... INFO: UID tables succesfully created.
Во время инсталляции, вам нужно будет указать пароль для MySQL. Инсталлятор сделает следующих юзеров:
- kamailio - с паролем
kamailiorw
. Этот юзер имеет права на чтение и запись в БД; - kamailioro - с паролем
kamailioro
. Этот юзер имеет права только на чтение;
Почти готово. Теперь слегка поправим конфигурационный файл Kamailio /etc/kamailio/kamailio.cfg
. Настроим SIP – домен:
$ sudo vim /etc/kamailio/kamctlrc ## ваш SIP домен SIP_DOMAIN=wiki.merionet.ru
В том же файле, включим некоторые нужные модули. Расположите следующий код в том же файле, прямо под строкой #!KAMAILIO
:
#!define WITH_MYSQL #!define WITH_AUTH #!define WITH_USRLOCDB #!define WITH_ACCDB
Включаем Kamailio!
$ sudo systemctl restart kamailio
Командой systemctl status kamailio
можно проверить текущий статус Kamailio. Если что-либо не работает, лог – файл приложения можно найти в /var/log/kamailio.log
.