VoIP

Semestrální projekt

Kamailio

Instalace

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
	

Nastavení

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

A upravíme následující řádky:
		
 /* add local domain aliases */
 alias="voip.martinvylet.cz" #naše doména
	

Do sekce Modules přidáme

		
 loadmodule "dispatcher.so"
	
abychom mohli routovat hovory mimo náš server.

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:
	
Takto nastavené Kamailio jako první kontroluje, zda příchozí hovor směřuje na lokálně registrovaného klienta, pokud ano, přesměruje. Pokud ne, posílá hovor na asterisk server, kde má vytvořený účet kamailio s heslem kamailio123.