Hi,
I am new to SER and I am looking for how to determine whether the caller and the callee are behind NAT. I found some example code from Zeus. But I do not understand how I can distinguished whether the caller is the caller and the callee is the callee. Here is the code:
/**************************************************************************************************************************/
Jan,
See below. Also, always CC the list so that other people can help you.
Zeus
> >
> > Flag 4 is set when the caller is behind NAT.
> > Flag 5 is set when the callee is behind NAT.
> Would you be so kind and tell me how do you test messages to
> set these
> flags?
/*
Check for UAC behind NAT
This is done by nat_uac_test("7") which checks for
1. RFC 1918 address in Contact - 01
2. different src_ip and Via header - 02
3. RFC1918 in Top Via - 04
*/
/*********************************************************************************************************************1. Right here - it seems to me that if both the caller and the callee are behind NAT. It will be flag as (4) and do the force_rport.*********************************************************************************************************************/ if (nat_uac_test("3")) { /* 1 + 2 = 3 */
xlog("L_NOTICE", "%rm: Client is behind NAT\n");
setflag(4); /* Flag it's a nated R-URI */
if (method=="REGISTER" || !search("^Record-Route:")) {
force_rport();
if (!method=="MESSAGE") { /* MESSAGE has no Contact header, see RFC 3428 */
fix_nated_contact();
};
};
} else {
xlog("L_NOTICE", "%rm: Client is not behind a NAT\n");
};... Other checking .../********************************************************************************************************************2. Then down here - it seems to me that the caller and the callee will be mark as flag 5. Then save into the location. Later on, how can I tell ifthe packet comes to SER is a caller or the callee ????. I could not understand this.********************************************************************************************************************/
if (method=="REGISTER") {
if (isflagset(4)) {
setflag(5); /* Turn on NAT Ping and flag it as a NAT callee */
};
if (!save("location")) {
xlog("L_ERR", "%rm: Failed\n");
sl_reply_error();
};
break;
};
/********************************************************************************************************************/
I am trying to make SER works with two UAs behind a same NAT. Any help would be very appreciated. Regards,Trong
Using 8.14 compiled from source with acc enabled
I found what I think is either a bug or maybe I am missing something .
I am have found that if a PSTN conection terminates the call first that the
BYE's are not logged to MSQL db however if the SIP Phone terminates the call
it is then logged.
The ser debug comes up first with the a 481 response . Call Leg /Transaction
Does Not Exist . which makes sense
The SIP phone when hung up does send a BYE with the proper tag ID but this
is not logged to the db ?
Posted my ser.cfg in January 2005 as a mini howto .. Lol . just when you
think you have it done hahahah .
INVITE's are logged and so are ACK's to the db.
Has anyone else had this problem ?
I am using a Sipura 2000 if it makes a difference . and a Cisco For PSTN
termination.
Thanks
Peter
Hello List:
I am trying to install ser-0.8.14 from source.
I ran make and got the lines below:
Makefile.rules:77: action.d: No such file or directory
Makefile.rules:77: crc.d: No such file or directory
Makefile.rules:77: data_lump.d: No such file or directory
Makefile.rules:77: data_lump_rpl.d: No such file or directory
Makefile.rules:77: dprint.d: No such file or directory
Makefile.rules:77: dset.d: No such file or directory
Makefile.rules:77: error.d: No such file or directory
Makefile.rules:77: fifo_server.d: No such file or directory
Makefile.rules:77: flags.d: No such file or directory
Makefile.rules:77: forward.d: No such file or directory
Any idea, how to fix it.
Thanks,
--
Mohammad Khan
Hello.
I have an "if" statement for a trusted IP, for which i don't ask for
Proxy-Auth. This is what i have.
if (method=="INVITE" && src_ip!=my.trusted.addr.ip) {
if ( !radius_proxy_authorize("")) {
proxy_challenge("", "1");
break;
};
};
Hope this helps.
Cheers.
Ricardo.-
> -----Mensaje original-----
> De: Doug Eubanks [mailto:admin@dougware.net]
> Enviado el: Martes, 01 de Febrero de 2005 15:31
> Para: serusers(a)lists.iptel.org
> Asunto: [Serusers] Trusted IP
>
>
> Does anyone have an example cfg with a call forwarded from a
> trusted ip (ie, no registration is ever sent)?
>
> This is what I am trying, but with no luck...
>
> if (src_ip==DIALINGATEAY && method=="ACK" ) {
> record_route();
> use_media_proxy();
> setflag(1);
> log(1, "Prepaid Call ACK Detected\n");
> rewritehostport("TERMGATEWAY:5060");
> forward(uri:host, uri:port);
> break;
> };
>
> Thanks,
> Doug
>
> _______________________________________________
> Serusers mailing list
> serusers(a)lists.iptel.org
> http://lists.iptel.org/mailman/listinfo/serusers
>
Does anyone have an example cfg with a call forwarded from a trusted ip (ie, no registration is ever sent)?
This is what I am trying, but with no luck...
if (src_ip==DIALINGATEAY && method=="ACK" ) {
record_route();
use_media_proxy();
setflag(1);
log(1, "Prepaid Call ACK Detected\n");
rewritehostport("TERMGATEWAY:5060");
forward(uri:host, uri:port);
break;
};
Thanks,
Doug
Hello,
This is partially linked to my post this morning regarding having no
audio between clients on different nats. I have spent the whole day
trying different configurations and at this stage I think the reason
its not working is coming down to the rtp errors (ERROR:
send_rtpp_command etc). My problem as such is exactly the same
detailed in the below thread (see below) which I found in the
archives. However whilst suggestions were made regarding this
problems (check that the versions are up to date and that you have
sufficient permissions to rtp.sock etc)...no actual definitive
solution was given. I have tried all the recommendations and none
work. My deadline is looming so if someone (anybody) who has
experience this problem and solved it, or just someone who has ideas,
could give me pointers, I would be VERY appreciative.
Kindest Regards,
Aisling.
Hello,
I am have having difficulty getting rtpproxy and ser
to work together correctly. Each time I start ser
(after first starting rtpproxy) I get the following
errors:
textops - initializing
stateless - initializing
Maxfwd module- initializing
0(0) INFO: udp_init: SO_RCVBUF is initially 42080
0(0) INFO: udp_init: SO_RCVBUF is finally 231808
0(0) INFO: udp_init: SO_RCVBUF is initially 42080
0(0) INFO: udp_init: SO_RCVBUF is finally 231808
5(2195) 4(2194) 2(2192) 1(2191) ERROR:
send_rtpp_command: can't read reply from a RTP proxy
ERROR: send_rtpp_command: can't read reply from a RTP
proxy 13(2203) 14(2204) 15(2205) 16(2206) 17(2207)
ERROR: send_rtpp_command: can't read reply from a RTP
proxy 3(2193)
ERROR: send_rtpp_command: can't read reply from a RTP
proxy 5(2195) 4(2194)
ERROR: send_rtpp_command: can't connect to RTP proxy
<rest of errors removed; more of the same>
Looking through the list I thought it was an incorrect
rtpproxy version and downloaded and installed the
stable 0.8.14 ser version and latest rtpproxy from
CVS. But I still see the same errors. I can see the
rtpproxy process running and rtpproxy.sock is present.
Currently I have ser 0.8.14 and rtpproxy 1.21
2004/08/13 running on freebsd 4.10. Aside from these
errors the calls set up fine but with no audio.
I have been searching through the list and google for
a couple of days but still seem to be missing
something.
Any thoughts on what I should try next?
Regards,
Allan
-------------------Legal Disclaimer---------------------------------------
The above electronic mail transmission is confidential and intended only for the person to whom it is addressed. Its contents may be protected by legal and/or professional privilege. Should it be received by you in error please contact the sender at the above quoted email address. Any unauthorised form of reproduction of this message is strictly prohibited. The Institute does not guarantee the security of any information electronically transmitted and is not liable if the information contained in this communication is not a proper and complete record of the message as transmitted by the sender nor for any delay in its receipt.
Hi Everybody,
I'm trying to make SER work with ASTERISK, ser as a proxy server and SIP terminator, and asterisk for other services like voicemail and International calls like an UAC (thing that I know SER is not able to do). I've configured SER with the following forward route, to forward all "1" beggining call phones to forward to my asterisk for international calls:
if (uri=~"^sip:8[0-9]{7}.*") {
forward( 10.0.18.3, 5061 );
break;
}
When I restart SER, it gives me this errors:
Jul 22 12:49:54 sipproxy /usr/local/sbin/ser[479]: ERROR: send_rtpp_command: can't connect to RTP proxy
Jul 22 12:49:54 sipproxy /usr/local/sbin/ser[479]: WARNING: rtpp_test: can't get version of the RTP proxy
Jul 22 12:49:54 sipproxy /usr/local/sbin/ser[479]: WARNING: rtpp_test: support for RTP proxyhas been disabled temporarily
I've also tried with the following rewritehost but it gives me the same error:
if (uri=~"^sip:8[0-9]{7}.*") {
rewritehost("10.0.18.3, 5061");
break;
}
I know that i'm missing something with RTP that i'm still working on.
I've tried to look for it at google, but find nothing interesting.
Do anyone know what is going on ? My ser.cfg is attached.
--
Felipe Martins
Linux System Administrator
Tep Solution Provider
Mundivox Communications
Rua Lauro Muller, 116/Sala 505
RJ - Brasil - 22290-906
Tel.: 55 21 3820-8839
Fax.: 55 21 3820-8844
Sorry for sending this mail again, we've had a e-mail server problem and i'm not sure if that arrived at list cause I have no log due to the problem.
Hi Everybody,
I'm trying to make SER work with ASTERISK, ser as a proxy server and SIP terminator, and asterisk for other services like voicemail and International calls like an UAC (thing that I know SER is not able to do). I've configured SER with the following forward route, to forward all "1" beggining call phones to forward to my asterisk for international calls:
if (uri=~"^sip:8[0-9]{7}.*") {
forward( 10.0.18.3, 5061 );
break;
}
When I restart SER, it gives me this errors:
Jul 22 12:49:54 sipproxy /usr/local/sbin/ser[479]: ERROR: send_rtpp_command: can't connect to RTP proxy
Jul 22 12:49:54 sipproxy /usr/local/sbin/ser[479]: WARNING: rtpp_test: can't get version of the RTP proxy
Jul 22 12:49:54 sipproxy /usr/local/sbin/ser[479]: WARNING: rtpp_test: support for RTP proxyhas been disabled temporarily
I've also tried with the following rewritehost but it gives me the same error:
if (uri=~"^sip:8[0-9]{7}.*") {
rewritehost("10.0.18.3, 5061");
break;
}
I know that i'm missing something with RTP that i'm still working on.
I've tried to look for it at google, but find nothing interesting.
I've trie to download and install rtpproxy from http://www.portaone.com/~sobomax/rtpproxy.tar but inside the tar there is no configure, nothing to install it but main.c and myqueue.c code files ...
Do anyone know what is going on, or how to compile that ? My ser.cfg is attached.
I don't know what kind of error is that 'cause all the errors like this mentioned at google where just another questions about the same error ...
--------------- ser.cfg ----------------------
#
# $Id: ser.cfg,v 1.21.4.1 2003/11/10 15:35:15 andrei Exp $
#
# simple quick-start config script
#
# ----------- global configuration parameters ------------------------
# Uncomment these lines to enter debugging mode
debug=9
fork=yes
log_stderror=no
listen=192.168.4.10
port=5060
# hostname matching an alias will satisfy the condition "uri==myself".
alias="mundivox.com"
alias="sipserver.com"
# sip_warning - Should replies include extensive warnings? By default
# yes, it is good for trouble-shooting
#sip_warnings=yes
# server_signature - Should locally-generated messages include server's
# signature? By default yes, it is good for trouble-shooting.
server_signature=yes
# reply_to_via - A hint reply modules whether they should send reply
# to IP advertised in Via. Turned off by default, which means that
# replies are sent to IP address from which requests came.
# reply_to_via=no
# mhomed -- enable calculation of outbound interface; useful on
# multihomed servers.
# mhomed=0
check_via=no # (cmd. line: -v)
dns=no # (cmd. line: -r)
rev_dns=no # (cmd. line: -R)
children=4
fifo_mode=0666
fifo="/tmp/ser_fifo"
# ------------------ 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/domain.so"
loadmodule "/usr/local/lib/ser/modules/acc.so"
loadmodule "/usr/local/lib/ser/modules/textops.so"
loadmodule "/usr/local/lib/ser/modules/uri.so"
loadmodule "/usr/local/lib/ser/modules/group.so"
loadmodule "/usr/local/lib/ser/modules/msilo.so"
loadmodule "/usr/local/lib/ser/modules/enum.so"
loadmodule "/usr/local/lib/ser/modules/nathelper.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"
# ----------------- setting module-specific parameters ---------------
# -- usrloc params --
# 0 = disable
# 1 = write-through
# 2 = write-back
# MySQL Based User Authentication
modparam("auth_db", "db_url", "sql://ser:heslo@localhost/ser")
# Checking for Username Column
#modparam("auth_db", "user_column", "username")
# Checking for Domain Column
#modparam("auth_db", "domain_column", "domain")
# Checking for Password Column
modparam("auth_db", "password_column", "password")
# Uncomment this if you want to use SQL database
# for persistent storage and comment the previous line
modparam("usrloc", "db_mode", 2)
modparam("usrloc", "timer_interval", 60)
modparam("usrloc", "desc_time_order", 1)
# ----- Acc Params ------
modparam("acc", "log_level", 1)
modparam("acc", "log_flag", 1)
# ----- auth params -----
# Uncomment if you are using auth module
# Permite tambem clear text passwords no mysql
modparam("auth_db", "calculate_ha1", yes)
#
# If you set "calculate_ha1" parameter to yes (which true in this config),
# uncomment also the following parameter)
#
# ------ rr params ------
# add value to ;lr param to make some broken UAs happy
modparam("rr", "enable_full_lr", 1)
# ------------------------- request routing logic -------------------
# main routing logic
route {
# ----------------------------------------------------------------------------
# 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;
};
# ------------------------------------------------------------
# OPTIONS Section
#
# This is used by sipsak to monitor the heath of our sip proxy
#-------------------------------------------------------------
# if (search("^From: sip:sipsak@") &&
# (method=="OPTIONS") && (!uri=~"sip:.*[@]+.*")) {
# options_reply();
# break;
# };
# ------------------------------------------------------------
# Registration Section
# ------------------------------------------------------------
# if (method=="REGISTER") {
#
# if (!is_from_local()) {
#
# sl_send_reply("403", "Unknown Domain");
# break;
# };
#
# if (is_user_in("Request-URI", "disabled")) {
#
# sl_send_reply("403", "Your evaluation period has expired");
# break;
# };
#
# if (!www_authorize("", "subscriber")) {
#
# www_challeng("", "0");
# break;
# };
#
# if (!check_to()) {
#
# sl_send_reply("401", "Unauthorized");
# break;
# };
#
# if (!save("location")) {
#
# sl_reply_error();
# };
#
# break;
#
# };
# -----------------------------------------------------------------
# Open Relay Section
# -----------------------------------------------------------------
# if (method=="INVITE") {
#
# if (!(is_from_local() || is_uri_host_local())) {
# sl_send_reply("403", "Please register to use our service");
# break;
# };
# };
# -----------------------------------------------------------------
# Accounting Section
# -----------------------------------------------------------------
# if (method=="INVITE" || method=="BYE") {
# setflag(1);
# };
# -----------------------------------------------------------------
# Record Route Section
#
# we record-route all messages -- to make sure that subsequent messages
# will go through our proxy; that's particularly good if upstream and
# donwstream entities use different transport protocol
# -----------------------------------------------------------------
if (method=="INVITE") record_route();
# -----------------------------------------------------------------
# Loose Route Section
#
# Grant route routing if route headers present
# -----------------------------------------------------------------
if (loose_route()) {
route(2);
break;
};
# -----------------------------------------------------------------
# Alias Routing Section
# -----------------------------------------------------------------
lookup("aliases");
if (!uri==myself) {
route(2);
break;
};
# 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
record_route();
# loose-route processing
if (loose_route()) {
t_relay();
break;
};
# Rota usada para guardar Logs no CDRTool - Billing
# if (method=="REGISTER" || method=="INVITE" || method=="BYE" || method=="CANCEL") {
# # Salvar mensagens no myslq para o CDRTool
# exec_msg("/var/www/html/serweb/sertrace.py; exit 1");
# };
# 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)
# uri==myself retorna true se o nome de dominio URI for igual ao nome do
# host ao qual SER esta rodando. Para configurar quais domain names o ser
# aceita, deve-se configurar os ALIASES do sistema para tais nomes.
if (uri==myself) {
######### Repassando chamadas comecando por 1 para o Asterisk
# if (uri =~ "sip:2[0-9]*@192.168.4.4"){
# log(1, "Forwarding to Asterisk\n");
# rewritehostport("192.168.4.10:5061");
# t_relay();
# break;
# }
# Repassando Chamadas Internacionais para Asterisk
if (uri=~"^sip:1[0-9].*") {
# forward( 192.168.4.10, 5061 );
rewritehostport("192.168.4.10:5061");
break;
}
if (method=="REGISTER") {
# Uncomment this if you want to use digest authentication
if (!www_authorize("192.168.4.10", "subscriber")) {
www_challenge("192.168.4.10", "0");
break;
};
save("location");
break;
};
# native SIP destinations are handled using our USRLOC DB
if (!lookup("location")) {
sl_send_reply("404", "Not Found");
break;
};
};
# forward to current uri now; use stateful forwarding; that
# works reliably even if we forward from TCP to UDP
if (!t_relay()) {
sl_reply_error();
};
}
------------------------- ser.cfg EOF -------------------------------
On Mon, 31 Jan 2005 16:00:18 +0100
Alexander Hoffmann <alexander.hoffmann(a)netgenius.de> wrote:
> Hello Felipe,
>
> I don't think that the error msg you saw is related to the forwarding block
> you pasted in your mail. It just tells you that SER cannot connect to SRR.
> Since I can NOT see the attached ser.cfg file, I cannot give you any more
> details.
>
> -alex
>
> On Monday 31 January 2005 15:13, Felipe Martins wrote:
> > Hi Everybody,
> >
> > I'm trying to make SER work with ASTERISK, ser as a proxy server and SIP
> > terminator, and asterisk for other services like voicemail and
> > International calls like an UAC (thing that I know SER is not able to do).
> > I've configured SER with the following forward route, to forward all "1"
> > beggining call phones to forward to my asterisk for international calls:
> >
> > if (uri=~"^sip:8[0-9]{7}.*") {
> > forward( 10.0.18.3, 5061 );
> > break;
> > }
> >
> >
> > When I restart SER, it gives me this errors:
> >
> > Jul 22 12:49:54 sipproxy /usr/local/sbin/ser[479]: ERROR:
> > send_rtpp_command: can't connect to RTP proxy Jul 22 12:49:54 sipproxy
> > /usr/local/sbin/ser[479]: WARNING: rtpp_test: can't get version of the RTP
> > proxy Jul 22 12:49:54 sipproxy /usr/local/sbin/ser[479]: WARNING:
> > rtpp_test: support for RTP proxyhas been disabled temporarily
> >
> >
> > I've also tried with the following rewritehost but it gives me the same
> > error:
> >
> > if (uri=~"^sip:8[0-9]{7}.*") {
> > rewritehost("10.0.18.3, 5061");
> > break;
> > }
> >
> >
> > I know that i'm missing something with RTP that i'm still working on.
> > I've tried to look for it at google, but find nothing interesting.
> > Do anyone know what is going on ? My ser.cfg is attached.
>
--
Felipe Martins
Linux System Administrator
Tep Solution Provider
Mundivox Communications
Rua Lauro Muller, 116/Sala 505
RJ - Brasil - 22290-906
Tel.: 55 21 3820-8839
Fax.: 55 21 3820-8844
--
Felipe Martins
Linux System Administrator
Tep Solution Provider
Mundivox Communications
Rua Lauro Muller, 116/Sala 505
RJ - Brasil - 22290-906
Tel.: 55 21 3820-8839
Fax.: 55 21 3820-8844
As you know there are (at least) two options to resolve the symmetric NAT
traversal with SIP/RTP:
1. nathelper module and rtpproxy server
2. mediaproxy module and dispatcher/mediaproxy server
However during our test we discovered that in terms of efficiency there
is a big difference between these two approaches.
Using mediaproxy and rtp generator tool (comes with mediaproxy server)
on 1G RAM 3000 MHZ cpu machine, server was able to handle about 200
calls at the same time (rtpgenerator rate parameter set to 100).
To be able to compare mediaproxy result to rtpproxy I made
some modifications inside the rtpproxy server code and used
the same rtpgenerator (there is different communication interface
that I modified) and the result of the same test was quit different.
Using the same environment I was able to generate 900 calls, I also
made additional normal call (SER/mediaproxy/proxydispatcher/rtpproxy)
thru this rtprpoxy to test quality of voice.
So, my question is why there is not compatibility between these servers?
There would be useful to implement these small changes into the rtp proxy
code (I can send my version) and take all advantages of mediaproxy
load balancing and rtpproxy efficiency.
Darek