[Users] Help needed with mediaproxy and rewritehostport configuration

Klaus Darilion klaus.mailinglists at pernau.at
Mon Mar 12 08:30:36 CET 2007


Hi!

Start a packet sniffer on your SIP proxy and watch:
- if your SIP proxy rewrites the SDP in the INVITE and 200 OK correctly
- if maybe the SIP Proxy B also makes NAT traversal (which it should not 
as SIP proxy a does it already)
- if RTP packets are received

I use tcpdump on the SIP proxy server to capture the traffic and then I 
analyze it on my Windows PC with wireshark.

regards
klaus



> I’m trying to set up a SIP and RTP proxy server to provide sip trunks to
> other SIP servers and PABX. The trunk to the PSTN will be provided by an
> other SIP server. This server will only handle signaling and rtp streams
> from our server. To test the configuration I’m using a softphone (eyebeam
> 1.5), a cisco 7912 with SIP IOS, both logged in on my own SIP server, and a
> mobile phone as a PSTN client.
> 
> Above shown in a diagram….
> 
> http://praatpaal.com/images/sipdiagram.jpg
> 
> The following occurs:
> 
> 1. When I call from the softphone (eyebeam) the the Cisco 7912 the call is
> established correct. As far as I can debug the clients are forced to use the
> mediaproxy running on our server. This also works the other way around.
> 2. When I call from PSTN to a SIP client, I can only hear audio from the
> PSTN on the SIP client.
> 3. When I call from a SIP client to the PSTN, I can only hear audio from the
> SIP client on the PSTN client.
> 
> So, my conclusion is:
> 
> When a call is setup from or to the PSTN network, audio is only working from
> the client the call is originated.
> 
> Below is the configuration from our SIP server and The Mediaserver.
> 
> Please help me out here…. Let me know if you have any questions or need more
> information
> 
> Kind regards,
> 
> Berry Bartels
> RoutIT B.V.
> 
> OPENSER.CFG
> 
> listen=XXX.XXX.XXX.XXX
> alias=" XXX.XXX.XXX.XXX "
> alias="voipit.nl"
> alias="sip01.voipit.nl"
> alias="sipproxy01.voipit.nl"
> 
> debug=3
> fork=no
> log_stderror=yes
> 
> check_via=yes   # (cmd. line: -v)
> dns=no         # (cmd. line: -r)
> rev_dns=no      # (cmd. line: -R)
> 
> sip_warning=yes
> syn_branch=yes
> 
> server_signature=yes
> 
> port=5060
> children=4
> fifo="/tmp/openser_fifo"
> fifo_db_url="mysql://openser:********@localhost/openser"
> 
> # --- load modules
> mpath="/usr/lib/openser/modules/"
> loadmodule "mysql.so"
> loadmodule "auth.so"
> loadmodule "auth_db.so"
> loadmodule "sl.so"
> loadmodule "tm.so"
> loadmodule "rr.so"
> loadmodule "maxfwd.so"
> loadmodule "usrloc.so"
> loadmodule "registrar.so"
> loadmodule "textops.so"
> loadmodule "domain.so"
> loadmodule "nathelper.so"
> loadmodule "mediaproxy.so"
> loadmodule "xlog.so"
> loadmodule "acc.so"
> 
> # --- module params
> # rr
> # add value to ;lr param to make some broken UAs happy
> modparam("rr", "enable_full_lr", 1)
> 
> # mediaproxy
> modparam("mediaproxy", "mediaproxy_socket", "/var/run/mediaproxy.sock")
> modparam("mediaproxy", "natping_interval", 0)
> 
> modparam("nathelper", "rtpproxy_disable", 1)
> modparam("nathelper", "natping_interval", 30)
> modparam("nathelper", "sipping_from", "sip:ping at voipit.nl")
> 
> modparam("auth_db", "calculate_ha1", 1)
> modparam("auth_db", "password_column", "password")
> 
> modparam("usrloc", "db_mode", 2)
> 
> modparam("usrloc","db_url","mysql://openser:********@localhost/openser")
> 
> modparam("acc", "db_url", "mysql://openser:********@localhost/openser")
> modparam("acc", "log_level", 1)
> modparam("acc", "log_flag", 1)
> modparam("acc", "db_flag", 1)
> 
> # request routing logic
> route
> {
>                   xlog("L_NOTICE", "[$Ts]\t[$fu]\t[$tu]\t[$rm] :: ROUTE
> script\n");
>                   # sanity checks
>                   if (!mf_process_maxfwd_header("10")) 
>                   {
>                                                 xlog("L_NOTICE",
> "[$Ts]\t[$fu]\t[$tu]\t[$rm] :: Too many hops\n");
>                                                 sl_send_reply("483","Too
> Many Hops");
>                                                 exit;
>                   }
>                   if (msg:len >= max_len) 
>                   {
>                                                 xlog("L_NOTICE",
> "[$Ts]\t[$fu]\t[$tu]\t[$rm] :: Message too big\n");
>                                                 sl_send_reply("513",
> "Message too big");
>                                                 exit;
>                   }
> 
>                   if(loose_route()) {
>                                                 xlog("L_NOTICE",
> "[$Ts]\t[$fu]\t[$tu]\t[$rm] :: Loose Route -> route[1]\n");
>                                                 t_relay();
>                   }
> 
>                   if (!method=="INVITE")
>                   {
>                                                 record_route();
>                   }
> 
>                   lookup("aliases");
>                   
> 
>                   if (uri==myself)
>                   {
>                                                 xlog("L_NOTICE",
> "[$Ts]\t[$fu]\t[$tu]\t[$rm] :: Registration :: URI is myself\n");
>                                                 if (method=="REGISTER") {
>                                                               
> xlog("L_NOTICE", "[$Ts]\t[$fu]\t[$tu]\t[$rm] :: Registration\n");
>                                                                # Uncomment
> this if you want to use digest authentication
>                                                                if
> (!www_authorize("voipit.nl", "subscriber")) {
>                                                                             
>     www_challenge("voipit.nl", "0");
>                                                                             
>     xlog("L_NOTICE", "[$Ts]\t[$fu]\t[$tu]\t[$rm] :: Registration ::
> Failed\n");
>                                                                             
>     exit;
>                                                                } 
>                                                               
> xlog("L_NOTICE", "[$Ts]\t[$fu]\t[$tu]\t[$rm] :: Registration :: Success\n");
>                                                               
> save("location");
>                                                               
> xlog("L_NOTICE", "[$Ts]\t[$fu]\t[$tu]\t[$rm] :: Registration :: Location
> Saved\n");
>                                                                exit;
>                                                 }
>                                                 if
> (is_method("INVITE")||is_method("ACK"))
>                                                 {
>                                                               
> xlog("L_NOTICE", "[$Ts]\t[$fu]\t[$tu]\t[$rm] :: Invite\n");
> 
>                                                                if
> (lookup("location") && from_uri=~".*@voipit.nl")
>                                                                {
>                                                                             
>   xlog("L_NOTICE", "[$Ts]\t[$fu]\t[$tu]\t[$rm] :: Lookup Location :: Found
> :: Internal Call\n");
>                                                                             
>   xlog("L_NOTICE", "[$Ts]\t[$fu]\t[$tu]\t[$rm] :: Internal Call ->
> Route[1]\n");
>                                                                             
>   route(1);
>                                                                             
>   exit;
>                                                                } else if
> (lookup("location") && from_uri!=~".*@voipit.nl") {
>                               
>                                                xlog("L_NOTICE",
> "[$Ts]\t[$fu]\t[$tu]\t[$rm] :: Lookup Location :: Found :: Inbound Call\n");
>                                                                             
>   xlog("L_NOTICE", "[$Ts]\t[$fu]\t[$tu]\t[$rm] :: Inbound Call ->
> Route[1]\n");
>                                                                             
>   route(1);
>                                                                             
>   exit;
>                                                                } else {
>                                                                             
>   xlog("L_NOTICE", "[$Ts]\t[$fu]\t[$tu]\t[$rm] :: Lookup Location :: NOT
> Found :: Outbound Call\n");
> #                                                                           
> sl_send_reply("404","Not found :: Outbound Call");
>                                                                             
>   xlog("L_NOTICE", "[$Ts]\t[$fu]\t[$tu]\t[$rm] :: Outbound Call ->
> Route[2]\n");
>                                                                             
>   route(2);
>                                                                             
>   exit;
>                                                                }
>                                                 }
>                                                 if (is_method("SUBSCRIBE"))
>                                                 {
>                                                               
> xlog("L_NOTICE", "[$Ts]\t[$fu]\t[$tu]\t[$rm] :: Subscribe :: Subscribed in
> Database\n");
>                                                                exit;
>                                                 }
>                                                 append_hf("P-hint: usrloc
> applied\r\n"); 
>                   }
> 
>                   xlog("L_NOTICE", "[$Ts]\t[$fu]\t[$tu]\t[$rm] :: End of
> script -> Route[1]\n");
>                   route(1);
> }
> 
> route[1]
> {
>                 xlog("L_NOTICE", "[$Ts]\t[$fu]\t[$tu]\t[$rm] ::
> route[1]\n");
> 
>                 if (is_method("INVITE"))
>                 {
>                                xlog("L_NOTICE", "[$Ts]\t[$fu]\t[$tu]\t[$rm]
> :: route[1] :: INVITE\n");
>                                t_on_reply("1");
> #                             t_on_failure("1");
>                                use_media_proxy();
>                 } else if (is_method("BYE|CANCEL")) {
>                                xlog("L_NOTICE", "[$Ts]\t[$fu]\t[$tu]\t[$rm]
> :: route[1] :: BYE OR CANCEL\n");
>                                end_media_session();
>                 }
> 
>                   if (!t_relay()) 
>                   {
>                                                 xlog("L_NOTICE",
> "[$Ts]\t[$fu]\t[$tu]\t[$rm] :: Route[1] :: T_RELAY error\n");
>                                                 sl_reply_error();
>                                                 end_media_session();
>                   } else {
>                                                 xlog("L_NOTICE",
> "[$Ts]\t[$fu]\t[$tu]\t[$rm] :: Route[1] :: T_RELAY\n");
>                   }
>                   exit;
> }
> 
> route[2] 
> {
>                 xlog("L_NOTICE", "[$Ts]\t[$fu]\t[$tu]\t[$rm] ::
> route[2]\n");
>                 if (is_method("INVITE"))
>                 {
>                                xlog("L_NOTICE", "[$Ts]\t[$fu]\t[$tu]\t[$rm]
> :: route[2] :: INVITE\n");
>                                rewritehostport("YYY.YYY.YYY.YYY:5060");
>                                t_on_reply("2");
>                                use_media_proxy();
>                 } else if (is_method("BYE|CANCEL")) {
>                                xlog("L_NOTICE", "[$Ts]\t[$fu]\t[$tu]\t[$rm]
> :: route[2] :: BYE OR CANCEL\n");
>                                end_media_session();
>                 }
> 
>                   if (!t_relay())
>                   {
>                                                 xlog("L_NOTICE",
> "[$Ts]\t[$fu]\t[$tu]\t[$rm] :: Route[2] :: T_RELAY error\n");
>                                                 sl_reply_error();
>                                                 end_media_session();
>                   } else {
>                                                 xlog("L_NOTICE",
> "[$Ts]\t[$fu]\t[$tu]\t[$rm] :: Route[2] :: T_RELAY\n");
>                   }
>                   exit;
> }
> 
> onreply_route[1]
> {
>                   xlog("L_NOTICE", "[$Ts]\t[$fu]\t[$tu]\t[$rm] ::
> onreply_route[1]\n");
>                   if (status =~ "(183)|(2[0-9][0-9])")
>                   {
>                                                 xlog("L_NOTICE",
> "[$Ts]\t[$fu]\t[$tu]\t[$rm] :: onreply_route[1] :: Status is 183 or
> 200-299\n");
>                                                 if (client_nat_test("1"))
>                                                 {
>                                                               
> xlog("L_NOTICE", "[$Ts]\t[$fu]\t[$tu]\t[$rm] :: onreply_route[1] ::
> nat_test(1) :: TRUE\n");
>                                                               
> fix_contact();
>                                                 } else {
>                                                               
> xlog("L_NOTICE", "[$Ts]\t[$fu]\t[$tu]\t[$rm] :: onreply_route[1] ::
> nat_test(1) :: TRUE\n");
>                                                 }
>                                                 use_media_proxy();
>                   }
> }
> onreply_route[2]
> {
>                                xlog("L_NOTICE", "[$Ts]\t[$fu]\t[$tu]\t[$rm]
> :: onreply_route[2]\n");
>                                if (client_nat_test("1"))
>                                {
>                                                 xlog("L_NOTICE",
> "[$Ts]\t[$fu]\t[$tu]\t[$rm] :: onreply_route[2] :: nat_test(1) :: TRUE\n");
>                                                 fix_contact();
>                                } else {
>                                                 xlog("L_NOTICE",
> "[$Ts]\t[$fu]\t[$tu]\t[$rm] :: onreply_route[2] :: nat_test(1) :: TRUE\n");
>                                }
>                                use_media_proxy();
> }
> 
> MEDIAPROXY.INI
> 
> [Dispatcher]
> start = yes
> socket = /var/run/proxydispatcher.sock
> group = openser
> defaultProxy = /var/run/mediaproxy.sock
> 
> [MediaProxy]
> start = yes
> socket = /var/run/mediaproxy.sock
> group = openser
> listen = none
> allow = Any
> proxyIP = XXX.XXX.XXX.XXX
> portRange = 60000:65000
> TOS = 0xb8
> idleTimeout = 60
> holdTimeout = 180
> forceClose = 0
> 
> [Accounting]
> accounting = none
> 
> [Database]
> user = openser
> password = ********
> host = 127.0.0.1
> database = radius
> table = radacct
> 
> [Radius]
> secret = secret
> server = localhost
> authport = 1812
> acctport = 1813
> dictionaries = /etc/radiusclient-ng/dictionary,
> /etc/openser/radius/dictionary, /usr/local/mediaproxy/dictionary
> retries = 2
> timeout = 3
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> Users mailing list
> Users at openser.org
> http://openser.org/cgi-bin/mailman/listinfo/users


-- 
Klaus Darilion
nic.at





More information about the sr-users mailing list