[Serusers] Re: Enabling calls to US-based 8xx numbers

Klaus Darilion klaus.mailinglists at pernau.at
Tue Mar 2 13:37:03 CET 2004


Have you seen the BYE message at the client side? Capture on the PC with 
xlite. Does xlite send a BYE? If yes, where is it sending to?

klaus

Nikola Stojanoski wrote:
> Hi,
> 
> Yes, i'm using ethereal that's why i'm sure that BYE is not reaching the
> SER and DeltaThree's servers.
> 
> Can the problem be that the SER is located behind NAT i don't have a
> option to try it on a public IP. X-Lite is registered as user at 192.168.0.1
> on SER but it's user@<public IP> on delta servers. At the moment i can't
> forward my public IP to accept SIP requests to 192.168.0.2 so in my X-Lite
> configuration i'm using 192.168.0.2 as sip proxy.
> 
> If you think that it could be a problem let me know so i can try to find
> out a way to start SER on a public IP.
> 
> Regards,
> Nikola
> 
> 
> 
>>how do you know that there is no BYE? Do you capture the network traffic
>>on the proxy and on the client side? Use ethereal to verify if there are
>>differences to the BYE and CANCEL messages.
>>
>>klaus
>>
>>Nikola Stojanoski wrote:
>>
>>>  HI Klaus,
>>>
>>>i'm testing SER to redirect the calls started with 00 to
>>>natrelay.deltathree.com because my sip server is behind NAT, the
>>>scenario
>>>is like this:
>>>
>>>X-Lite --> SER --> DeltaThree --> etc ....
>>>    |_________|
>>>           NAT
>>>
>>>X-Lite has 192.168.0.1
>>>SER 192.168.0.2
>>>
>>>and as i've told you i can send a call CANCEL it but i can't send BYE to
>>>stop a call that is already in progress
>>>
>>>Here is my config.
>>>
>>>-------------------------------------------------------
>>>debug=1         # i had this at "3" initially"
>>>fork=yes
>>>log_stderror=no # (cmd line: -E)
>>>
>>>/* Uncomment these lines to enter debugging mode
>>>fork=no
>>>log_stderror=yes
>>>*/
>>>
>>>check_via=no    # (cmd. line: -v)
>>>dns=no           # (cmd. line: -r)
>>>rev_dns=no      # (cmd. line: -R)
>>>port=5060
>>>children=4
>>>fifo="/tmp/ser_fifo"
>>>
>>>#
>>># Listen
>>>#
>>>listen=192.168.0.2
>>>
>>>#
>>># Aliases
>>>#
>>>alias=igor.intranet.com.mk
>>>alias=192.168.0.2
>>>
>>># ------------------ module loading ----------------------------------
>>># Uncomment this if you want to use SQL database
>>>loadmodule "/usr/local/lib/ser/modules/mysql.so"
>>>
>>>loadmodule "/usr/local/lib/ser/modules/sl.so"
>>>loadmodule "/usr/local/lib/ser/modules/tm.so"
>>>loadmodule "/usr/local/lib/ser/modules/rr.so"
>>>loadmodule "/usr/local/lib/ser/modules/maxfwd.so"
>>>loadmodule "/usr/local/lib/ser/modules/usrloc.so"
>>>loadmodule "/usr/local/lib/ser/modules/registrar.so"
>>>loadmodule "/usr/local/lib/ser/modules/textops.so"
>>>
>>># Uncomment this if you want digest authentication
>>># mysql.so must be loaded !
>>>loadmodule "/usr/local/lib/ser/modules/auth.so"
>>>loadmodule "/usr/local/lib/ser/modules/auth_db.so"
>>>
>>># We want to earn money, therefore we need accounting
>>>loadmodule "/usr/local/lib/ser/modules/acc.so"
>>>
>>># !! Nathelper
>>>loadmodule "/usr/local/lib/ser/modules/nathelper.so"
>>>
>>># ----------------- setting module-specific parameters ---------------
>>>
>>># -- usrloc params --
>>>modparam("usrloc", "db_mode", 2)
>>>modparam("usrloc", "db_url", "mysql://ser:heslo@localhost/ser")
>>>
>>>#
>>># Accounting Setup
>>>#
>>>#modparam("acc", "db_url", "sql://ser:heslo@localhost/ser")
>>>modparam("acc", "log_level", 1)
>>>modparam("acc", "log_flag", 1)
>>>
>>># Account failed transactions
>>>modparam("acc", "failed_transactions", 1)
>>>
>>># Which data should be accounted?
>>>#
>>># c = Call-Id
>>># d = To tag (Dst)
>>># f = From
>>># i = Inbound Request-URI
>>># m = Method
>>># o = Outbound Request-URI
>>># r = fRom
>>># s = Status
>>># t = To
>>># u = digest Username
>>># p = username Part of inbound Request-URI
>>>#
>>># default is "miocfs"
>>>#
>>>modparam("acc", "log_fmt", "miocfst")
>>>
>>># -- auth params --
>>># Uncomment if you are using auth module
>>>#
>>>modparam("auth_db", "calculate_ha1", yes)
>>>
>>>#
>>># If you set "calculate_ha1" parameter to yes (which true in this
>>>config),
>>># uncomment also the following parameter)
>>>#
>>>modparam("auth_db", "db_url", "mysql://ser:heslo@localhost/ser")
>>>modparam("auth_db", "password_column", "password")
>>>
>>># -- rr params --
>>># add value to ;lr param to make some broken UAs happy
>>>modparam("rr", "enable_full_lr", 1)
>>>
>>># !! Nathelper
>>>modparam("registrar", "nat_flag", 6)
>>>modparam("nathelper", "natping_interval", 30) # Ping interval 30 s
>>>modparam("nathelper", "ping_nated_only", 1)   # Ping only clients behind
>>>NAT
>>>
>>># -------------------------  request routing logic -------------------
>>>
>>>
>>># main routing logic
>>>route{
>>>        # Accounting TEST
>>>        # How does this work anyway? And why 1+2?
>>>        setflag(1);
>>>        setflag(2);
>>>
>>>        # initial sanity checks -- messages with
>>>        # max_forwards==0, or excessively long requests
>>>        if (!mf_process_maxfwd_header("10")) {
>>>                sl_send_reply("483","Too Many Hops");
>>>                break;
>>>        };
>>>        if (msg:len >=  max_len ) {
>>>                sl_send_reply("513", "Message too big");
>>>                break;
>>>        };
>>>
>>>        # !! Nathelper
>>>        # Special handling for NATed clients; first, NAT test is
>>>        # executed: it looks for via!=received and RFC1918 addresses
>>>        # in Contact (may fail if line-folding is used); also,
>>>        # the received test should, if completed, should check all
>>>        # vias for rpesence of received
>>>        if (nat_uac_test("3")) {
>>>                # Allow RR-ed requests, as these may indicate that
>>>                # a NAT-enabled proxy takes care of it; unless it is
>>>                # a REGISTER
>>>
>>>                if (method == "REGISTER" || ! search("^Record-Route:"))
>>>{
>>>                    log("LOG: Someone trying to register from private
>>>IP,
>>>rewriting\n");
>>>
>>>                    # This will work only for user agents that support
>>>symmetric
>>>                    # communication. We tested quite many of them and
>>>majority is
>>>                    # smart enough to be symmetric. In some phones it
>>>takes a configuration
>>>                    # option. With Cisco 7960, it is called
>>>NAT_Enable=Yes, with kphone it is
>>>                    # called "symmetric media" and "symmetric
>>>signalling".
>>>                    fix_nated_contact(); # Rewrite contact with source
>>>IP
>>>of signalling
>>>
>>>                    if (method == "INVITE") {
>>>                        fix_nated_sdp("1"); # Add direction=active to
>>>SDP
>>>                    };
>>>                    force_rport(); # Add rport parameter to topmost Via
>>>                    setflag(6);    # Mark as NATed
>>>                };
>>>        };
>>>
>>>        # we record-route all messages -- to make sure that
>>>        # subsequent messages will go through our proxy; that's
>>>        # particularly good if upstream and downstream entities
>>>        # use different transport protocol
>>>        if (!method=="REGISTER") {
>>>          record_route();
>>>        }
>>>
>>>        # subsequent messages withing a dialog should take the
>>>        # path determined by record-routing
>>>        if (loose_route()) {
>>>                # mark routing logic in request
>>>                append_hf("P-hint: rr-enforced\r\n");
>>>                route(1);
>>>                break;
>>>        };
>>>
>>>        if (!uri==myself) {
>>>                # mark routing logic in request
>>>                append_hf("P-hint: outbound\r\n");
>>>                route(1);
>>>                break;
>>>        };
>>>
>>>        # if the request is for other domain use UsrLoc
>>>        # (in case, it does not work, use the following command
>>>        # with proper names and addresses in it)
>>>        if (uri==myself) {
>>>
>>>                if (method=="REGISTER") {
>>>
>>>                        # SQL Digest Auth
>>>                        if (!www_authorize("", "subscriber")) {
>>>                                www_challenge("", "1");
>>>                                break;
>>>                        };
>>>
>>>                        save("location");
>>>                        break;
>>>                };
>>>                lookup("aliases");
>>>                if (!uri==myself) {
>>>                        append_hf("P-hint: outbound alias\r\n");
>>>                        route(1);
>>>                        break;
>>>                };
>>>
>>>                # Destination DeltaThree
>>>                if( uri=~"^sip:00[0-9]*@.*")
>>>                {
>>>                  route(1);
>>>                  break;
>>>                };
>>>
>>>                # native SIP destinations are handled using our USRLOC
>>>DB
>>>                if (!lookup("location") ) {
>>>                        sl_send_reply("404", "Not Found");
>>>                        break;
>>>                };
>>>        };
>>>        append_hf("P-hint: usrloc applied\r\n");
>>>        route(1);
>>>}
>>>
>>>route[1]
>>>{
>>>        # !! Nathelper
>>>        if
>>>(uri=~"^sip:(.+@)?(192\.168\.|10\.|172\.(1[6-9]|2[0-9]|3[0-1])\.)"
>>>&& !search("^Route:")) {
>>>            sl_send_reply("479", "We don't forward to private IP
>>>addresses");
>>>            break;
>>>        };
>>>
>>>        # if client or server know to be behind a NAT, enable relay
>>>        if (isflagset(6)) {
>>>            force_rtp_proxy();
>>>        };
>>>
>>>        # NAT processing of replies; apply to all transactions (for
>>>example,
>>>        # re-INVITEs from public to private UA are hard to identify as
>>>        # NATed at the moment of request processing); look at replies
>>>        t_on_reply("1");
>>>
>>>        # Route to PSTN Gateways(s)
>>>        if (uri=~"^sip:00[0-9]*@.*") {       ##  This assumes that the
>>>caller is
>>>            log("Forwarding to DeltaThree\n");
>>>            strip(2);
>>>            rewritehostport("natrelay.deltathree.com:5060");
>>>            t_relay();
>>>            break;
>>>        };
>>>
>>>
>>>        # Local Domain User
>>>        # send it out now; use stateful forwarding as it works reliably
>>>        # even for UDP2TCP
>>>        if (!t_relay()) {
>>>                sl_reply_error();
>>>        };
>>>}
>>>
>>># !! Nathelper
>>>onreply_route[1] {
>>>
>>>    # NATed transaction ?
>>>    if (isflagset(6) && status =~ "(183)|2[0-9][0-9]") {
>>>        fix_nated_contact();
>>>        force_rtp_proxy();
>>>
>>>    # otherwise, is it a transaction behind a NAT and we did not
>>>    # know at time of request processing ? (RFC1918 contacts)
>>>    } else if (nat_uac_test("1")) {
>>>        fix_nated_contact();
>>>    };
>>>}
>>>
>>>
>>>Regards,
>>>Nikola
>>>
>>>
>>>
>>>>Hi Nikola!
>>>>
>>>>Without message dumps its impossible for us to solve your problems!
>>>>
>>>>regards,
>>>>Klaus
>>>>
>>>>Nikola Stojanoski wrote:
>>>>
>>>>
>>>>>I'm trying to setup SER to route my outgoing calls to DeltaThree's
>>>>>servers. So far i'v managed to forward the calls but my problem is that
>>>>>if
>>>>>a call starts somehow i can't record route the call and my UA is not
>>>>>sending BYE to the servers, so i'm getting billed more than i talk. For
>>>>>call duration of 0:10 i can see 1:45 on deltathree servers.
>>>>>
>>>>>If you manage to work something out let me know.
>>>>>
>>>>
>>>>
>>>
>>
> 
> 




More information about the sr-users mailing list