I'm new with kamailio, so may be don't understand some basic.
I'm tryin to load balance asterisk servers with kamailio and dispatcher module. My ip phones registered at kamailio, for example:
[root@sipchel ~]# kamctl ul show 101
{
"jsonrpc": "2.0",
"result": {
"AoR": "101",
"Contacts": [{
"Contact": {
"Expires": 2953,
"Q": -1,
"Call-ID": "1361221648",
"CSeq": 136,
"User-Agent": "Linphone/3.6.1 (eXosip2/3.6.0)",
"Received": "[not set]",
"Path": "[not set]",
"State": "CS_SYNC",
"Flags": 0,
"CFlags": 0,
"Methods": -1,
"Ruid": "uloc-596f5abc-2ce5-2",
"Instance": "[not set]",
"Reg-Id": 0,
"Last-Keepalive": 1500530337,
"Last-Modified": 1500530337
}
}]
},
"id": 15024
}
I have realtime asterisk server.
[root@sipchel ~]# kamctl dispatcher dump
{
"jsonrpc": "2.0",
"result": {
"NRSETS": 1,
"RECORDS": [{
"SET": {
"ID": 1,
"TARGETS": [{
"DEST": {
"URI": "sip:192.168.4.16",
"FLAGS": "IX",
"PRIORITY": 0
}
}, {
"DEST": {
"URI": "sip:192.168.10.47",
"FLAGS": "AX",
"PRIORITY": 0
}
}]
}
}]
},
"id": 15087
}
So I want if 101 call to 102 it will process by asterisk(for call recording and other features). Now if I call from 101 to 102 kamailio will forward to asterisk and asterisk dialplan cannot find that extesion(as expected, because it is not registed on asterisk)
[kamailio]
exten => _1XX,1,Dial(SIP/${EXTEN})
exten => _1XX,n,Hangup
If I change dialplan to Dial(SIP/KAMAILIO/${EXTEN}) call wil return to kamailio, but kamailio send it back to asterisk...
I hope I explained correctly, my English is terrible.
Is my screnario proper? How this usually done? Should I forward sip registrations to asterisks?
My kamailio config
# dispatcher params
modparam("dispatcher", "db_url", "mysql://kamailio:kamailiorw@localhost/kamailio")
modparam("dispatcher", "ds_ping_interval", 30)
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("auth_db", "db_url", DBASTURL)
modparam("auth_db", "calculate_ha1", yes)
modparam("auth_db", "user_column", "name")
modparam("auth_db", "password_column", "sippasswd")
modparam("auth_db", "load_credentials", "")
#modparam("auth_db", "version_table", 0)
request_route {
<------># per request initial checks
<------>route(REQINIT);
<------># NAT detection
<------>route(NATDETECT);
<------># CANCEL processing
<------>if (is_method("CANCEL")) {
<------><------>if (t_check_trans()) {
<------><------><------>route(RELAY);
<------><------>}
<------><------>exit;
<------>}
<------># handle retransmissions
<------>if (!is_method("ACK")) {
<------><------>if(t_precheck_trans()) {
<------><------><------>t_check_trans();
<------><------><------>exit;
<------><------>}
<------><------>t_check_trans();
<------>}
<------># handle requests within SIP dialogs
<------>route(WITHINDLG);
<------>### only initial requests (no To tag)
<------># authentication
<------>route(AUTH);
<------># record routing for dialog forming requests (in case they are routed)
<------># - remove preloaded route headers
<------>remove_hf("Route");
<------>if (is_method("INVITE|SUBSCRIBE")) {
<------><------>record_route();
<------>}
<------># account only INVITEs
<------>if (is_method("INVITE")) {
<------><------>setflag(FLT_ACC); # do accounting
<------>}
<------># dispatch requests to foreign domains
<------>route(SIPOUT);
------>### requests for my local domains
<------># handle presence related requests
<------>route(PRESENCE);
<------># handle registrations
<------>route(REGISTRAR);
<------>if ($rU==$null) {
<------><------># request with no Username in RURI
<------><------>sl_send_reply("484","Address Incomplete");
<------><------>exit;
<------>}
<------># dispatch destinations to PSTN
<------>route(PSTN);
<------># user location service
<------>route(LOCATION);
}
# 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")) {
<------><------>$var(rc) = $rc;
<------><------>route(TOVOICEMAIL);
<------><------>t_newtran();
<------><------>switch ($var(rc)) {
<------><------><------>case -1:
<------><------><------>case -3:
<------><------><------><------>send_reply("404", "Not Found");
<------><------><------><------>exit;
<------><------><------>case -2:
<------><------><------><------>send_reply("405", "Method Not Allowed");
<------><------><------><------>exit;
<------><------>}
<------>}
<------># when routing via usrloc, log the missed calls also
<------>if (is_method("INVITE")) {
<------><------>setflag(FLT_ACCMISSED);
<------>}
route(DISPATCH);
<------>route(RELAY);
<------>exit;
}
# Dispatch requests
route[DISPATCH] {
<------># round robin dispatching on gateways group '1'
<------>if(!ds_select_dst("1", "4"))
<------>{
<------> xlog("aaaa--- SCRIPT: going to <$ru> via <$du>\n");
<------> send_reply("404", "No destination");
<------> exit;
<------>}
<------>xlog("--- SCRIPT: going to <$ru> via <$du>\n");
<------>t_on_failure("RTF_DISPATCH");
<------>return;
}
--
Aydar A. Kamalov