Hello again,
After doing some research I found this: "*Asterisk normally matches
incoming calls to users based on the From: user name (without domain)*.
However, if Asterisk can't find a user that matches the incoming call, it
will try to match the caller's IP address with the IP addresses of known
peers. If there's no match at all, the call will be sent to the context
defined in the [general] section of sip.conf." here
https://www.voip-info.org/wiki/view/Asterisk+sip+type.
And after replacing *uac_replace_from("sip:4444444444@XXX.XXX.XXX.XXX") *
with *uac_replace_from("sip:trunk_name@XXX.XXX.XXX.XXX") *everything worked
as expected.
Thanks.
2017-06-20 18:00 GMT+03:00 Володимир Іванець <volodyaivanets(a)gmail.com>om>:
Hello everyone,
I'm doing some custom Kamailio configuration to achieve few things but
seem to be stuck with SIP trunks. I'm currently using Kamailio 4.4.5 and
here is what I have at the moment:
*1.* Asterisk 11.25.1 servers behing Kamailio using RealTime for SIP
peers.
*2.* Route that checks if packet was sent from one of configured SIP
trunks. This part works correctly:
*route[FROMPSTN] {*
* xlog("== FROMPSTN ==\n");*
* $var(socket) = $si + ":" + $sp;*
* xlog("**** $var(socket)\n");*
* xlog("**** $(sht(trunks_kamailio=>$var(socket)))\n");*
* if ($(sht(trunks_kamailio=>$var(socket))) != $null) {*
* xlog("**** From $(sht(trunks_kamailio=>$var(socket)))
PSTN\n");*
* return 1;*
* }*
* xlog("**** Not from PSTN\n");*
* return -1;*
*}*
*3.* Here is a fragment that sends INVITE packet to *TOASTERISK* route if
it was received from one of trunks. I have 4444444444(a)XXX.XXX.XXX.XXX
hardcoded for now, and in my configuration 4444444444 and XXX.XXX.XXX.XXX
represent my real caller id number and carrier's IP address:
*if(route(FROMPSTN)) {*
* uac_replace_from("sip:4444444444@XXX.XXX.XXX.XXX");*
* route(TOASTERISK);*
*}*
*4.* TOASTERISK basically has folloving fragment that load balances
traffic between Asterisk nodes:
*if(!ds_select_dst("0", "4")) {*
* xlog("**** Call was not sent to none of Asterisk hosts\n");*
* if(!is_method("REGISTER")) {*
* xlog("**** Method is not REGISTER\n");*
* send_reply("404", "No destination");*
* }*
* xlog("**** Dispatcher fail\n");*
* exit;*
*}*
So when I'm making a call to my test number, I can see following incomming
packet in Asterisk from Kamailio. From header has correct caller id number
and carrier's IP address (192.168.88.5 is Kamailio's internal IP address):
[image: Вбудоване зображення 1]
And when Asterisk tries to find a maching peer for this incoming call, it
is using Kamailio's instead of Carrier's IP address. So it is actually
finds one of peers (101-XXXXXXX) that is being authenticated on Kamailio as
many others:
[image: Вбудоване зображення 2]
I'm not sure if Asterisk is just using packet's source IP to lookup for
corresponding peer or something else from it's content. I will really
appreciate any help on this.
Thanks a lot!