Kamailio to jeden z najpopularniejszych serwerów SIP (Session Initiation Protocol) typu open-source, wykorzystywany do obsługi połączeń VoIP (Voice over IP) i komunikacji w czasie rzeczywistym. Kamailio, wcześniej znany jako OpenSER, pozwala na zaawansowaną kontrolę nad połączeniami SIP, ich routingiem i bezpieczeństwem. Dzięki swojej wysokiej skalowalności i elastyczności jest wykorzystywany w systemach o bardzo dużej liczbie użytkowników, takich jak dostawcy usług VoIP, platformy komunikacyjne, a także w firmowych infrastrukturach telekomunikacyjnych.
Kamailio jest napisane w języku C i może obsługiwać miliony połączeń jednocześnie, co czyni go odpowiednim wyborem do dużych wdrożeń. Oferuje zaawansowane funkcje takie jak autentykacja, kontrola jakości połączeń, routing oparty na regułach, integracja z bazami danych, a także wsparcie dla protokołów takich jak WebSocket, XMPP, i inne.
W tej serii wpisów omówię krok po kroku jak zainstalować i skonfigurować Kamailio, byś mógł wykorzystać pełen potencjał tego potężnego narzędzia
Na początek zajmijmy się instalacją Kamailio 6 na systemie Debian 12 z obsługą MySQL.
Spis treści
1) Wymagania wstępne
Tutaj sprawa jest dość prosta, bo jedynym wymaganiem jest właściwie instalacja systemu operacyjnego. Instalując Debiana 12 pamiętaj o ustawieniu statycznego adresu IP.
Jeśli o tym zapomniałeś na etapie instalacji możesz po prostu zedytować plik /etc/network/interfaces
. Jego zawartość pewnie będzie zbliżona do poniższej.
W momencie tworzenia tego posta nasz Debian domyślnie zainstalowałby Kamailio w wersji 5.6.3. Możemy to sprawdzić za pomocą polecenia:
apt search kamailio
Jako, że w styczniu 2025 ogłoszono wydanie Kamailio w wersji 6.0.0 instalujemy nowszą wersję oprogramowania (https://www.kamailio.org/w/2025/01/kamailio-v6-0-0-released/). Najpierw jednak musimy dodać do naszego systemu operacyjnego nowe repozytorium.
W tym celu najpierw zainstalujemy kilka pakietów:
apt -y install gpg curl
Następnie dodamy klucz gpg Kamailio do naszego pęka kluczy i stworzymy plik kamailio.list
z danymi nowego repozytorium.
curl -s https://deb.kamailio.org/kamailiodebkey.gpg | gpg --no-default-keyring --keyring gnupg-ring:/usr/share/keyrings/kamailiodebkey.gpg --import && chmod 644 /usr/share/keyrings/kamailiodebkey.gpg
echo "deb [signed-by=/usr/share/keyrings/kamailiodebkey.gpg] http://deb.kamailio.org/kamailio60 bookworm main" | tee -a /etc/apt/sources.list.d/kamailio.list
Podpowiedź
Oczywiście możesz też zainstalować inną wersję Kamailio zmieniając w pliku /etc/apt/sources.list.d/kamailio.list
kamailio60 na np. kamailio58
Po dodaniu nowego repozytorium odświeżmy informacje.
apt update
Od teraz polecenie apt search kamailio
znajdzie nam najnowszą wersję oprogramowania.
2) Instalacja Kamailio
Skoro repozytorium już jest gotowe, możemy zainstalować Kamailio za pomocą polecenia:
apt -y install kamailio kamailio-mysql-modules gdb
Dzięki temu zainstalujemy zarówno samo oprogramowanie, jak i moduły do obsługi MySQL oraz kompilator gdb
, który w razie potrzeby możemy wykorzystać podczas debugowania.
Po instalacji, Kamailio zostanie automatycznie uruchomione. Dla pewności upewnimy się czy nasze oprogramowanie już działa i dodamy je do autostartu.
systemctl status kamailio
systemctl enable kamailio
Od teraz możesz wykorzystywać polecenia kamctl
np. do monitorowania usługi.
Podpowiedź
Jeśli system nie znajduje poleceń np. kamailio
czy kamctl
, sprawdź swoje ścieżki systemowe $PATH
i ewentualnie dodaj obsługę /usr/sbin/
w pliku /etc/profile
lub $HOME/.profile
.
Podpowiedź
Jeśli polecenie kamctl monitor wyrzuca błąd column: not found
, nie oznacza to problemów z bazą danych, ale raczej brak polecenia column.
Jeśli polecenie which column
nic nie pokazuje, doinstaluj dodatkowy pakiet:
apt -y install bsdmainutils
Po wszystkim polecenie kamctl monitor
powinno działać poprawnie.
Dla pewności możesz sprawdzić czy system nasłuchuje na porcie 5060.
3) Instalacja bazy danych MySQL
Oczywiście nic nie stoi na przeszkodzie, żeby na tym etapie pozostać i dokonywać zmian w samym pliku /etc/kamailio/kamailio.cfg
. Ale jeśli planujesz wykorzystywać Kamailio jako SIP Proxy, SIP Registrar lub podobne, obsługa MySQL będzie niezastąpiona.
Zanim zainstalujemy oprogramowanie polecam wygenerować trzy bezpieczne hasła np. za pomocą strony https://www.avast.com/random-password-generator
Potrzebujemy hasła dla 3 użytkowników (ze względów konfiguracyjnych nie zalecamy stosowania w haśle znaków $
oraz "
):
- root – główny użytkownik bazy danych, który wykorzystamy do utworzenia kolejnych
- kamailio – główny użytkownik, który będzie służył do połączenia usługi z bazą danych
- kamailioro – opcjonalny użytkownik z uprawnieniami tylko do odczytu
Tak przygotowani możemy przystąpić to instalacji bazy.
apt -y install default-mysql-server
Następnie za pomocą polecenia mysql_secure_installation wstępnie skonfigurujemy naszą bazę. W trakcie konfiguracji na wszystkie pytania możesz odpowiadać twierdzącą i ustawić wygenerowane wcześniej hasło do root’a.
mysql_secure_installation
Po instalacji uruchomimy naszą nową usługę i dodamy ją do autostartu.
systemctl start mysqld
systemctl enable mysqld
4) Wygenerowanie tabel Kamailio
Nic tak nie cieszy, jak gotowe skrypty! I tym razem deweloperzy Kamailio przygotowali gotowy skrypt, który utworzy nam zarówno użytkowników Kamailio (kamailio
oraz kamailioro
), jak i wszystkie konieczne tabele.
Zanim go uruchomimy, musimy przygotować kilka ustawień. W pliku /etc/kamailio/kamctlrc
zalecamy odkomentowanie poniższych linii i wprowadzenie następujących ustawień:
- SIP_DOMAIN – domena np. adres IP serwera
- DBENGINE – silnik bazy
- DBRWUSER – nazwa użytkownika z prawami do odczytu/zapisu
- DBRWPW – hasło użytkownika z prawami do odczytu/zapisu
- DBROUSER – nazwa użytkownika z prawami tylko do odczytu
- DBROPW – hasło użytkownika z prawami tylko do odczytu
- CHARSET (opcjonalnie) – zestaw znaków do połączenia z bazą znaków np. latin1 (inaczej instalator o to zapyta)
Przykładowa zawartość pliku może wyglądać następująco:
Po wprowadzeniu zmiennych wykonujemy skrypt za pomocą ustalonego wcześniej hasła root’a (do bazy danych, nie systemu operacyjnego) zgadzając się na utworzenie wybranych tabel.
kamdbctl create
Aby podpiąć utworzone tabele pod Kamailio pora na edycję głównego pliku konfiguracyjnego /etc/kamailio/kamailio.cfg
. Najpierw zalecamy wykonanie jego kopii.
cp /etc/kamailio/kamailio.cfg /etc/kamailio/kamailio.cfg-bak
W samym pliku /etc/kamailio/kamailio.cfg na samym porządku proponujemy dopisać następujące linie:
- #!define WITH_MYSQL – uruchamia połączenie z MySQL
- #!define WITH_AUTH – uruchamia możliwość autoryzacji
- #!define WITH_USRLOCDB – umożliwia trwałe ustalenie lokalizacji użytkownika
Ponadto w linii opisującej połączenie z bazą danych (zaczyna się od #!trydef DBURL "mysql:...
), zaktualizuj informacje o danych do połączenia z bazą.
Użyty poniżej ciąg znaków "mysql://kamailio:kamailiorw@localhost/kamailio"
jest w formacie: "silnik_bazy://użytkownik:hasło@adres_serwera/nazwa_bazy_danych"
Oczywiście wszystko będzie zależało od funkcjonalności i ról, które będzie uruchamiać na serwerze. W każdym przypadku polecam przejrzeć plik kamailio.cfg
, który opisuje całą składnię.
Od teraz w każdym miejscu w kodzie, które korzysta ze zdediniowanego połączenia, będziesz miał możliwość przechowywać informacje w bazie danych.
Nie pozostało nam już nic innego jak tylko zrestartować usługę.
systemctl restart kamailio
Od teraz możesz zacząć rejestrować konta SIP i przechowywać konfigurację w bazie danych. Żeby dodać nowego użytkownika wykonaj:
kamctl add 101 password_for_101
5) Pierwsze połączenie
Skoro jesteśmy w stanie rejestrować konta SIP to nic nie stoi na przeszkodzie, żeby zalogować dwa konta SIP i wykonać pierwsze połączenie.
W tym celu dodajmy jeszcze jednego użytkownika.
kamctl add 102 password_for_102
Po zarejestrowaniu obu kont możesz sprawdzić aktualnie zalogowanych użytkowników za pomocą poleceń kamctl
.
kamctl online # wyświetli aktualnie zalogowanych użytkowników
kamctl ul show 101 # wyświetli szczegóły lokalizacyjne dla danego konta
To takie proste! Od teraz konta 101 i 102 mogą wykonywać połączenia wewnątrz naszego środowiska.
Oczywiście tutaj zabawa się dopiero zaczyna! W kolejnym poście zobaczysz jak w Kamailio włączyć debugowanie i jakie oprogramowanie może Ci pomóc śledzić pakiety SIP.
Kolejny wpis w serii: Kamailio część 2: Uruchomienie monitorowania SIP i debugowania ruchu
Jeżeli chciałbyś monitorować wszystko, co dzieje się na Twojej centrali, wypróbuj nasze autorskie oprogramowanie VoiperoManager.
Instalacja i konfiguracja zajmuje kilka minut, a system możesz mieć całkowicie za darmo.
Przeczytaj, co potrafi nasz system VoiperoManager w zakresie monitorowania na żywo i raportowania systemów VoIP opartych na Asterisku.