[Serusers] Problem with PSTN calls from Asterisk towards SIP clients registered in SER

Max Weltz max at opticall.se
Thu Oct 11 15:29:32 CEST 2007


OK,

thank you for the hint. It works now even though for some reason I  
need to have the IP of Asterisk both in the 'trusted' table and the  
'permissions.allow' file.

Thanks

Max


On Oct 11, 2007, at 6:39 , Greger V. Teigre wrote:

> You can use allow_trusted() to allow calls from your Asterisk. see  
> the chapter you referred to (Getting Started) for an example of how  
> to use it.
> Just add the IP of your Asterisk to the table of trusted IPs.
> g-)
>
> Max Weltz wrote:
>>      Hello,
>>
>>    I am working on a project in which calls are placed from an   
>> Asterisk server towards the PSTN or SIP clients and then connected  
>> to  another phone of the PSTN or another SIP client. Those calls  
>> are  placed by a user (caller) through an interface. First a call  
>> is  placed towards the caller from an extension in Asterisk and  
>> once the  caller picks up the phone, the second call is placed and  
>> both are  connected.
>>
>>    In a first time all SIP clients were registered to Asterisk  
>> and  there was no SER on the picture. Everything was working fine.  
>> But I  have decided to use SER as SIP proxy now. So the SIP  
>> clients are  registered with SER and Asterisk is still the  
>> originating point of  all calls and provides the connection to the  
>> PSTN. Asterisk and SER  are running on the same machine (Asterisk  
>> has port 5061 and SER port  5060) and Asterisk is registered to SER:
>>
>> ==sip.conf==
>>
>> [general]
>> port=5061
>> bindport=5061
>> bindaddr=0.0.0.0
>> disallow=all
>> ;allow=gsm
>> allow=ulaw
>> allow=alaw
>> ;context=bogon-calls
>> context=from-sip
>> autocreatepeer=yes
>>
>> register=> asterisk:password at 192.168.1.24:5060/maxAS
>>
>> [SERADDRESS]
>> type=friend
>> username=asterisk
>> secret=password
>> host=192.168.1.24
>> fromdomain=192.168.1.24
>>
>> [maxAS]
>> type=friend
>> secret=password2
>> qualify=yes
>> nat=no
>> host=dynamic
>> canreinvite=no
>> context=from-sip
>>
>>
>>    Most things work fine:
>> * a user can ask Asterisk to call a SIP client and connect it to   
>> another SIP client: Asterisk finds its way to SER and both calls  
>> are  happily connected.
>> * a user can also ask a call to be placed towards a SIP client  
>> and  then this call is connected to a PSTN call, no problem either.
>>
>> The problem is when the user wants a call towards the PSTN to be   
>> connected to a SIP client. Once the call going towards the PSTN  
>> has  been answered, Asterisk attempts to contact a SIP client  
>> which is  registered in SER but SER sees the call coming from "sip: 
>> (PSTN phone  number of the first call)@hostIP". There is no such  
>> client in the  database and it is therefore not allowed to  
>> connect. In the following  example Zap/1-1 is the interface  
>> towards the PSTN, 0761111111 the  phone number dialled, and 6644  
>> an extension registered with SER. Here  is the Asterisk output.
>>
>>      > Channel Zap/1-1 was answered.
>>      -- Executing Answer("Zap/1-1", "") in new stack
>>      -- Executing Goto("Zap/1-1", "from-sip|6644|1") in new stack
>>      -- Goto (from-sip,6644,1)
>>      -- Executing Answer("Zap/1-1", "") in new stack
>>      -- Executing Dial("Zap/1-1", "SIP/6644 at SERADDRESS||r") in new  
>> stack
>>      -- Called 6644 at SERADDRESS
>> Oct 10 11:41:16 WARNING[4264]: chan_sip.c:7972 handle_response:   
>> Forbidden - wrong password on authentication for INVITE to   
>> '"0761111111" <sip:0761111111 at 192.168.1.24>;tag=as537d1ed7'
>>      -- SIP/SERADDRESS-50e7 is circuit-busy
>>
>> Here is the portion of the Asterisk Dialplan that is relevant and  
>> the  ser.cfg (which comes from http://siprouter.onsip.org/doc/  
>> gettingstarted/):
>>
>> ==extensions.conf==
>> [context1]
>> exten => 666,1,Answer()
>> exten => 666,2,Goto(from-sip,6644,1)
>>
>> [from-sip]
>> exten => _.,1,Answer
>> exten => _.,2,Dial(SIP/${EXTEN}@SERADDRESS,,r)
>> exten => _.,3,Hangup
>>
>> ==ser.cfg==
>> debug=3
>> fork=no
>> log_stderror=yes
>>
>> listen=192.168.1.24   # INSERT YOUR IP ADDRESS HERE
>> port=5060
>> children=4
>>
>> dns=no
>> rev_dns=no
>> fifo="/tmp/ser_fifo"
>> fifo_db_url="mysql://ser:password@192.168.1.26/ser"
>>
>> loadmodule "/usr/lib/ser/modules/mysql.so"
>> loadmodule "/usr/lib/ser/modules/sl.so"
>> loadmodule "/usr/lib/ser/modules/tm.so"
>> loadmodule "/usr/lib/ser/modules/rr.so"
>> loadmodule "/usr/lib/ser/modules/maxfwd.so"
>> loadmodule "/usr/lib/ser/modules/usrloc.so"
>> loadmodule "/usr/lib/ser/modules/registrar.so"
>> loadmodule "/usr/lib/ser/modules/auth.so"
>> loadmodule "/usr/lib/ser/modules/auth_db.so"
>> loadmodule "/usr/lib/ser/modules/uri_db.so"
>>
>> modparam("auth_db|uri_db|usrloc", "db_url", "mysql://  
>> ser:password at 192.168.1.26/ser")
>> modparam("auth_db", "calculate_ha1", 1)
>> modparam("auth_db", "password_column", "password")
>> modparam("usrloc", "db_mode", 2)
>> modparam("rr", "enable_full_lr", 1)
>>
>> route {
>>
>>    #  
>> -----------------------------------------------------------------
>>    # Sanity Check Section
>>    #  
>> -----------------------------------------------------------------
>>    if (!mf_process_maxfwd_header("10")) {
>>      sl_send_reply("483", "Too Many Hops");
>>      break;
>>    };
>>
>>    if (msg:len > max_len) {
>>      sl_send_reply("513", "Message Overflow");
>>      break;
>>    };
>>
>>    #  
>> -----------------------------------------------------------------
>>    # Record Route Section
>>    #  
>> -----------------------------------------------------------------
>>    if (method!="REGISTER") {
>>      record_route();
>>    };
>>
>>    #  
>> -----------------------------------------------------------------
>>    # Loose Route Section
>>    #  
>> -----------------------------------------------------------------
>>    if (loose_route()) {
>>      route(1);
>>      break;
>>    };
>>
>>    #  
>> -----------------------------------------------------------------
>>    # Call Type Processing Section
>>    #  
>> -----------------------------------------------------------------
>>    if (uri!=myself) {
>>      route(1);
>>      break;
>>    };
>>
>>    if (method=="ACK") {
>>      route(1);
>>      break;
>>    } if (method=="INVITE") {
>>      route(3);
>>      break;
>>    } else  if (method=="REGISTER") {
>>      route(2);
>>      break;
>>    };
>>
>>    lookup("aliases");
>>    if (uri!=myself) {
>>      route(1);
>>      break;
>>    };
>>
>>
>>    if (!lookup("location")) {
>>      sl_send_reply("404", "User Not Found");
>>      break;
>>    };
>>
>>    route(1);
>> }
>>
>> route[1] {
>>
>>    #  
>> -----------------------------------------------------------------
>>    # Default Message Handler
>>    #  
>> -----------------------------------------------------------------
>>    if (!t_relay()) {
>>      sl_reply_error();
>>    };
>> }
>>
>> route[2] {
>>
>>    #  
>> -----------------------------------------------------------------
>>    # REGISTER Message Handler
>>    # ----------------------------------------------------------------
>>    sl_send_reply("100", "Trying");
>>
>>    if (!www_authorize("192.168.1.24","subscriber")) {
>>      www_challenge("192.168.1.24","0");
>>      break;
>>    };
>>
>>    if (!check_to()) {
>>      sl_send_reply("401", "Unauthorized");
>>      break;
>>    };
>>
>>    consume_credentials();
>>
>>    if (!save("location")) {
>>      sl_reply_error();
>>    };
>> }
>>
>> route[3] {
>>    #  
>> -----------------------------------------------------------------
>>    # INVITE Message Handler
>>    #  
>> -----------------------------------------------------------------
>>    if (!proxy_authorize("192.168.1.24","subscriber")) {
>>      proxy_challenge("192.168.1.24","0");
>>      break;
>>    } else if (!check_from()) {
>>      sl_send_reply("403", "Use From=ID");
>>      break;
>>    };
>>
>>    consume_credentials();
>>
>>    lookup("aliases");
>>    if (uri!=myself) {
>>      route(1);
>>      break;
>>    };
>>
>>    if (!lookup("location")) {
>>      sl_send_reply("404", "User Not Found");
>>      break;
>>    };
>>
>>    route(1);
>> }
>>
>>
>> I guess (but I am new to SER) that the idea is to make the call  
>> be  placed as the SIP user "asterisk" and not as the SIP user   
>> "0761111111" but I don't know where to do that (inside asterisk   
>> before the SIP call is placed? inside ser.cfg?) or maybe just to  
>> skip  the authentication for SIP URIs that look like a phone  
>> number. I also  read in http://siprouter.onsip.org/doc/ 
>> gettingstarted/ch09.html how  to relay calls placed towards the  
>> PSTN from SER towards a gateway  (Asterisk here) but I think it  
>> wouldn't do any good to send back the  call to Asterisk. Asterisk  
>> would just end up placing another call  towards the PSTN and  
>> that's not what I want.
>>
>> Any suggestion will be greatly appreciated,
>>
>> Thanks,
>>
>> //Max
>> _______________________________________________
>> Serusers mailing list
>> Serusers at lists.iptel.org
>> http://lists.iptel.org/mailman/listinfo/serusers
>>
>>
>>
>




More information about the sr-users mailing list