<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-US link="#0563C1" vlink="#954F72"><div class=WordSection1><p class=MsoNormal>I have configured Kamailio to pass a registration request to another VoIP provider.  The reason I am doing this is to provide a sip port for users where the ISP is blocking SIP.  I am able to pass the registrations to the VoIP provider but I’d like to have inbound calls working as well.  I see the inbound invites coming into the Kamailio server but it appears that the server does not ‘know’ about the UA that is registered ‘through’ the server to the VoIP provider.  Can anyone tell me how to fix this problem?  Below is my config.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Thank you,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Mike<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>#!KAMAILIO<o:p></o:p></p><p class=MsoNormal>#<o:p></o:p></p><p class=MsoNormal># Edge proxy configuration<o:p></o:p></p><p class=MsoNormal>#<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>#!subst "/REGISTRAR_IP/xxxxxxxxxx/" #IP address of voip provider<o:p></o:p></p><p class=MsoNormal>#!subst "/REGISTRAR_PORT/5060/"<o:p></o:p></p><p class=MsoNormal>#!substdef "/FLOW_TIMER/20/"<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>debug=2<o:p></o:p></p><p class=MsoNormal>log_stderror=no<o:p></o:p></p><p class=MsoNormal>log_facility=LOG_LOCAL0<o:p></o:p></p><p class=MsoNormal>fork=yes<o:p></o:p></p><p class=MsoNormal>children=4<o:p></o:p></p><p class=MsoNormal>alias="example.com"<o:p></o:p></p><p class=MsoNormal>#mpath="/usr/lib64/kamailio/modules"<o:p></o:p></p><p class=MsoNormal>mpath="/usr/lib/x86_64-linux-gnu/kamailio/modules"<o:p></o:p></p><p class=MsoNormal>tcp_connection_lifetime=30 # FLOW_TIMER + 10<o:p></o:p></p><p class=MsoNormal>auto_aliases=no<o:p></o:p></p><p class=MsoNormal>mhomed=0<o:p></o:p></p><p class=MsoNormal>listen=udp:X.X.X.X:531 advertise X.X.X.X:531<o:p></o:p></p><p class=MsoNormal>alias="X.X.X.X:531"<o:p></o:p></p><p class=MsoNormal>alias=X.X.X.X:531<o:p></o:p></p><p class=MsoNormal>alias="X.X.X.X:531"<o:p></o:p></p><p class=MsoNormal>alias=X.X.X.X:531<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>port=531<o:p></o:p></p><p class=MsoNormal>####### Modules Section ########<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>loadmodule "tm.so"<o:p></o:p></p><p class=MsoNormal>loadmodule "sl.so"<o:p></o:p></p><p class=MsoNormal>#loadmodule "outbound.so"<o:p></o:p></p><p class=MsoNormal>loadmodule "rr.so"<o:p></o:p></p><p class=MsoNormal>loadmodule "path.so"<o:p></o:p></p><p class=MsoNormal>loadmodule "pv.so"<o:p></o:p></p><p class=MsoNormal>loadmodule "maxfwd.so"<o:p></o:p></p><p class=MsoNormal>loadmodule "xlog.so"<o:p></o:p></p><p class=MsoNormal>loadmodule "sanity.so"<o:p></o:p></p><p class=MsoNormal>loadmodule "ctl.so"<o:p></o:p></p><p class=MsoNormal>loadmodule "mi_rpc.so"<o:p></o:p></p><p class=MsoNormal>loadmodule "mi_fifo.so"<o:p></o:p></p><p class=MsoNormal>loadmodule "textops.so"<o:p></o:p></p><p class=MsoNormal>loadmodule "siputils.so"<o:p></o:p></p><p class=MsoNormal>loadmodule "rtimer.so"<o:p></o:p></p><p class=MsoNormal>loadmodule "sqlops.so"<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal># ----------------- setting module-specific parameters ---------------<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal># ----- mi_fifo params -----<o:p></o:p></p><p class=MsoNormal>modparam("mi_fifo", "fifo_name", "/tmp/kamailio_fifo")<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal># ----- tm params -----<o:p></o:p></p><p class=MsoNormal>modparam("tm", "failure_reply_mode", 3)<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal># ----- rr params -----<o:p></o:p></p><p class=MsoNormal>modparam("rr", "append_fromtag", 0)<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>####### Routing Logic ########<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>request_route {<o:p></o:p></p><p class=MsoNormal>        route(REQINIT);<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>        if (is_method("CANCEL")) {<o:p></o:p></p><p class=MsoNormal>                if (t_check_trans()) {<o:p></o:p></p><p class=MsoNormal>                       route(RELAY);<o:p></o:p></p><p class=MsoNormal>                }<o:p></o:p></p><p class=MsoNormal>                exit;<o:p></o:p></p><p class=MsoNormal>        }<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>        route(WITHINDLG);<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>        t_check_trans();<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>        if (is_method("REGISTER")) {<o:p></o:p></p><p class=MsoNormal>                remove_hf("Route");<o:p></o:p></p><p class=MsoNormal>                add_path();<o:p></o:p></p><p class=MsoNormal>                $du = "sip:REGISTRAR_IP:REGISTRAR_PORT";<o:p></o:p></p><p class=MsoNormal>        } else {<o:p></o:p></p><p class=MsoNormal>                if (is_method("INVITE|SUBSCRIBE"))<o:p></o:p></p><p class=MsoNormal>                       record_route();<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>                if ($si == "REGISTRAR_IP" && $sp == "REGISTRAR_PORT") {<o:p></o:p></p><p class=MsoNormal>                       if (!loose_route()) {<o:p></o:p></p><p class=MsoNormal>                        switch($rc) {<o:p></o:p></p><p class=MsoNormal>                        case -2:<o:p></o:p></p><p class=MsoNormal>                         sl_send_reply("403", "Forbidden");<o:p></o:p></p><p class=MsoNormal>                         exit;<o:p></o:p></p><p class=MsoNormal>                        default:<o:p></o:p></p><p class=MsoNormal>                         sl_reply_error();<o:p></o:p></p><p class=MsoNormal>                         exit;<o:p></o:p></p><p class=MsoNormal>                        }<o:p></o:p></p><p class=MsoNormal>                       }<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>                       t_on_failure("FAIL_OUTBOUND");<o:p></o:p></p><p class=MsoNormal>                } else {<o:p></o:p></p><p class=MsoNormal>                       if ($rU == $null) {<o:p></o:p></p><p class=MsoNormal>                        sl_send_reply("484", "Address Incomplete");<o:p></o:p></p><p class=MsoNormal>                        exit;<o:p></o:p></p><p class=MsoNormal>                       }<o:p></o:p></p><p class=MsoNormal>                       remove_hf("Route");<o:p></o:p></p><p class=MsoNormal>                       $du = "sip:REGISTRAR_IP:REGISTRAR_PORT";<o:p></o:p></p><p class=MsoNormal>                }<o:p></o:p></p><p class=MsoNormal>        }<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>        route(RELAY);<o:p></o:p></p><p class=MsoNormal>}<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>route[RELAY] {<o:p></o:p></p><p class=MsoNormal>        if (!t_relay()) {<o:p></o:p></p><p class=MsoNormal>                sl_reply_error();<o:p></o:p></p><p class=MsoNormal>        }<o:p></o:p></p><p class=MsoNormal>        exit;<o:p></o:p></p><p class=MsoNormal>}<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>route[REQINIT] {<o:p></o:p></p><p class=MsoNormal>        if (!mf_process_maxfwd_header("10")) {<o:p></o:p></p><p class=MsoNormal>                sl_send_reply("483","Too Many Hops");<o:p></o:p></p><p class=MsoNormal>                exit;<o:p></o:p></p><p class=MsoNormal>        }<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>        if(!sanity_check("1511", "7"))<o:p></o:p></p><p class=MsoNormal>        {<o:p></o:p></p><p class=MsoNormal>                xlog("Malformed SIP message from $si:$sp\n");<o:p></o:p></p><p class=MsoNormal>                exit;<o:p></o:p></p><p class=MsoNormal>        }<o:p></o:p></p><p class=MsoNormal>}<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>route[WITHINDLG] {<o:p></o:p></p><p class=MsoNormal>        if (has_totag()) {<o:p></o:p></p><p class=MsoNormal>                if (!loose_route()) {<o:p></o:p></p><p class=MsoNormal>                       switch($rc) {<o:p></o:p></p><p class=MsoNormal>                       case -2:<o:p></o:p></p><p class=MsoNormal>                        sl_send_reply("403", "Forbidden");<o:p></o:p></p><p class=MsoNormal>                        exit;<o:p></o:p></p><p class=MsoNormal>                       default:<o:p></o:p></p><p class=MsoNormal>                        if (is_method("ACK")) {<o:p></o:p></p><p class=MsoNormal>                         if ( t_check_trans() ) {<o:p></o:p></p><p class=MsoNormal>                          route(RELAY);<o:p></o:p></p><p class=MsoNormal>                          exit;<o:p></o:p></p><p class=MsoNormal>                         } else {<o:p></o:p></p><p class=MsoNormal>                          exit;<o:p></o:p></p><p class=MsoNormal>                         }<o:p></o:p></p><p class=MsoNormal>                        }<o:p></o:p></p><p class=MsoNormal>                        sl_send_reply("404","Not Found");<o:p></o:p></p><p class=MsoNormal>                       }<o:p></o:p></p><p class=MsoNormal>                } else {<o:p></o:p></p><p class=MsoNormal>                       if (is_method("NOTIFY")) {<o:p></o:p></p><p class=MsoNormal>                        record_route();<o:p></o:p></p><p class=MsoNormal>                       }<o:p></o:p></p><p class=MsoNormal>                       route(RELAY);<o:p></o:p></p><p class=MsoNormal>                }<o:p></o:p></p><p class=MsoNormal>                exit;<o:p></o:p></p><p class=MsoNormal>        }<o:p></o:p></p><p class=MsoNormal>}<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>onreply_route {<o:p></o:p></p><p class=MsoNormal>        if (!t_check_trans()) {<o:p></o:p></p><p class=MsoNormal>                drop;<o:p></o:p></p><p class=MsoNormal>        }<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>        if ($rm == "REGISTER" && $rs >= 200 && $rs <= 299) {<o:p></o:p></p><p class=MsoNormal>                remove_hf("Flow-Timer");<o:p></o:p></p><p class=MsoNormal>                if ($(hdr(Require)[*])=~"outbound")<o:p></o:p></p><p class=MsoNormal>                       insert_hf("Flow-Timer: FLOW_TIMER\r\n", "Call-ID");<o:p></o:p></p><p class=MsoNormal>        }<o:p></o:p></p><p class=MsoNormal>}<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>failure_route[FAIL_OUTBOUND]{<o:p></o:p></p><p class=MsoNormal>        if (t_branch_timeout() || !t_branch_replied()) {<o:p></o:p></p><p class=MsoNormal>                send_reply("430", "Flow Failed");<o:p></o:p></p><p class=MsoNormal>        }<o:p></o:p></p><p class=MsoNormal>}<o:p></o:p></p></div></body></html>