SIP proxy Kamailio je součástí standardních repozitářů pro námi použitý OS Ubuntu 18.04
apt update
apt install kamailio kamailio-mysql-modules kamailio-tls-modules
V souboru upravíme následující řádky
# vim /etc/kamailio/kamctlrc
DBENGINE=MYSQL
DBHOST=localhost
## your SIP domain
SIP_DOMAIN=voip.martinvylet.cz #naše SIP doména, může být IP adresa
Vytvoříme databázi
# kamdbctl create
Uživatele do databáze přidáme pomocí
# kamctl add userid password
Následně na začátek /etc/kamailio/kamailio.cfg
přidáme
# vim /etc/kamailio/kamailio.cfg
#!define WITH_AUTH
#!define WITH_MYSQL
#!define WITH_TLS
/* add local domain aliases */
alias="voip.martinvylet.cz" #naše doména
Do sekce Modules přidáme
loadmodule "dispatcher.so"
Na konec Modules sekce přidáme nastavení modulu dispatcher
modparam("dispatcher", "db_url", DBURL)
modparam("dispatcher", "table_name", "dispatcher")
modparam("dispatcher", "flags", 2)
modparam("dispatcher", "dst_avp", "$avp(AVP_DST)")
modparam("dispatcher", "grp_avp", "$avp(AVP_GRP)")
modparam("dispatcher", "cnt_avp", "$avp(AVP_CNT)")
modparam("dispatcher", "sock_avp", "$avp(AVP_SOCK)")
Dále přidáme řádky označené '+'
# account only INVITEs
if (is_method("INVITE")) {
setflag(FLT_ACC); # do accounting
+ t_on_failure("TRUNKAUTH");
}
# user location service
route(LOCATION);
+ route(DISPATCHER);
+ }
+ failure_route[TRUNKAUTH] {
+
+ if (t_is_canceled()) {
+ exit;
+ }
+ if(t_check_status("401|407|403")) {
+ $avp(auser) = "kamailio";
+ $avp(apass) = "kamailio123";
+ uac_auth();
+ t_relay();
+ exit;
+ }
+ }
+
+ route[DISPATCHER] {
+ # round robin dispatching on gateways group '1'
+ if(!ds_select_dst("1", "4"))
+ {
+ send_reply("404", "No destination");
+ exit;
+ }
+ #xlog(“ —— DISPATCH: going to <$ru> via <$du>n");
+ route(RELAY);
+ exit;
+ }
# User location service
route[LOCATION] {
#!ifdef WITH_SPEEDDIAL
# search for short dialing - 2-digit extension
if($rU=~"^[0-9][0-9]$") {
if(sd_lookup("speed_dial")) {
route(SIPOUT);
}
}
#!endif
#!ifdef WITH_ALIASDB
# search in DB-based aliases
if(alias_db_lookup("dbaliases")) {
route(SIPOUT);
}
#!endif
$avp(oexten) = $rU;
if (!lookup("location")) {
+ route(DISPATCHER);
$var(rc) = $rc;
route(TOVOICEMAIL);
t_newtran();
switch ($var(rc)) {
case -1:
case -3: