Hi all,
I'm running ser along with rtpproxy and the nathelper module. My layout is as
follows, I have a ser proxy running on the public Internet, and I have a bunch
of UAs behind a nat firewall. I'm currently having the problem that UAs behind
nats register successfully, and they can make calls to each other from inside
and outside nat. At this point all looks great.
I have been running the natping_interval at 30 seconds, and recently I have put
that down to 5 for testing purposes.
The following happens to all my UAs but I will detail just one.
The UA registers with ser at 14:26:39
It receives an invite, which gets canceled and a bye/ok is completed at
14:27:30
UDP pings cease to enter the private network via the nat router at at 14:32:36
The UA re-registers at 14:56:37, and the udp packets start again, and the above
cycle seems to be repeated.
I can still make outbound calls after the udp pings stop, but I can't receive
calls. I'm not sure if the udp pings are still being sent by ser, and they are
getting dropped at my router.
The routers I have been using; I have been using UAs behind a cheap D-Link
router, which I later switched to a Cisco router, I have also had UAs behind
two layers of NAT, and that also works great until the udp gets cut off.
Has anyone come across this issue before?
I will try and match my udp pings on both sides of NAT and try and see at what
point the udp pings stop at, be it ser that stops sending them, or nat that
just drops them silently or other.
Any help is greatly appreciated,
Thanks,
-Jev
modparam("nathelper", "natping_interval", 30)
Hi all,
I need to intercept the reply messages ("302 Moved Temporarily", "200
Accepted", "405 Method not allow" etc. ) and execute different actions for
different status codes (for example I could block all the "Moved Temporally"
messages or, in the Failure_route block, I could route the calls to
different destinations for each different failure reason : Busy, no
response, not available ...).
How can I do this thing with the ser.cfg file?
I have tried with the "method" operand and with the "search" function but
I'm not able to intercept the reply messages with these functions.
Hi Jiri,
I have a question.
I want to route all call start with 0026xxxxxxxxxxxxxxxxxxxx to the PSTN
gateway.
And I tried it with the command
if (uri=~"^sip:0026*@") {
forward(IP,5060);
break;
};
Is this correct?
Do I need to inculde this condition is the following condition statment:
if (method=="INVITE") {
if (uri=~"^sip:0026*@" {
forward(ip , 5060);
break;
};
};
Thanks for your help.
Regards
John
I am using asterisk as my voicemail system and ser as my sip server. It works fine for a specific called number(4243) by using append_branch() function. But I don't know how to setup ser to forward any called number to asterisk if no one answer the phone. I mean something like forward() function so I only need to specify the IP and port of asterisk.
Here is my 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 ------------------------
#debug=3 # debug level (cmd line: -dddddddddd)
#fork=yes
#log_stderror=no # (cmd line: -E)
/* Uncomment these lines to enter debugging mode
fork=no
log_stderror=yes
*/
debug=7
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"
# ------------------ module loading ----------------------------------
# Uncomment this if you want to use SQL database
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"
# Uncomment this if you want digest authentication
# mysql.so must be loaded !
loadmodule "/usr/lib/ser/modules/auth.so"
loadmodule "/usr/lib/ser/modules/auth_db.so"
# ----------------- setting module-specific parameters ---------------
# -- usrloc params --
modparam("usrloc", "db_mode", 0)
# Uncomment this if you want to use SQL database
# for persistent storage and comment the previous line
modparam("usrloc", "db_mode", 2)
# -- 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", "password_column", "password")
# -- rr params --
# add value to ;lr param to make some broken UAs happy
modparam("rr", "enable_full_lr", 1)
modparam("tm", "fr_inv_timer", 15)
modparam("tm", "fr_timer", 10)
# ------------------------- request routing logic -------------------
# main routing logic
route{
# 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;
};
# 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;
};
# 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") {
# Uncomment this if you want to use digest authentication
if (!www_authorize("seti", "subscriber")) {
www_challenge("seti", "0");
break;
};
save("location");
break;
};
# native SIP destinations are handled using our USRLOC DB
if (!lookup("location")) {
#Handle PSTN calls.
if (uri=~"^sip:8500@.*") #To asterisk voicemail admin.
{
record_route();
rewritehostport("Asterisk server IP:PORT");
forward(<Asterisk server IP:PORT>);
}
else
{
record_route();
rewritehostport("PSTN IP:PORT");
forward(PSTN IP:PORT);
};
};
};
t_on_failure("1");
# 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();
};
}
failure_route[1] {
append_branch("sip:4243@AsteriskIP:Port");
t_relay();
}
Dhiraj,
Mediaproxy is looking in From: and To: Make sure the domains of either
user is in ser domain table
Example: For user 1234(a)bt.com
serctl domain add bt.com
Adrian
--------
Hello List,
I am trying to set up the following senario -
[kphone A]-----------[ser/mediaproxy
A]---------------------[ser/mediaproxy B]-----------[kphone B]
When I try to set up a call between the two ends, proxydispatcher
complains that "none of the caller or called party is local. will not
use mediaproxy".
I am not using DNS SRV at the moment - instead will be using the
default unix socket.
Kphone A and B are registered respectively to ser/mediaproxy A and B
respectively. Anybody has any hint where this thing might be failing? I
tried to go through the code - but python is not one stronghold. How
does the dispatcher decide whether "caller or called" party is local?
Thanks for your help,
Dhiraj Bhuyan
Network Security Specialist,
BT Exact Business Assurance Solutions
Tel: +44 1473 643932
Mob: +44 7962 012145
Email: dhiraj.2.bhuyan at bt.com
I guess what I am not understanding is the authorize statement.
# Uncomment this if you want to use digest authentication
# if (!www_authorize("something.net", "subscriber")) {
# www_challenge("something.net", "0");
# break;
# };
Where is the domain coming from? The ata's are going to be on different
networks. Is there any good place for info for newbies here?
AJ Grinnell
Network Operations Technician
CRT/ Arialink Broadband
1223 Turner Street, Suite A
Lansing, MI 48906
517.346.5041
517.492.1321 direct
Hello List,
I am trying to set up the following senario -
[kphone A]-----------[ser/mediaproxy A]---------------------[ser/mediaproxy B]-----------[kphone B]
When I try to set up a call between the two ends, proxydispatcher complains that "none of the caller or called party is local. will not use mediaproxy".
I am not using DNS SRV at the moment - instead will be using the default unix socket.
Kphone A and B are registered respectively to ser/mediaproxy A and B respectively. Anybody has any hint where this thing might be failing? I tried to go through the code - but python is not one stronghold. How does the dispatcher decide whether "caller or called" party is local?
Thanks for your help,
Dhiraj Bhuyan
Network Security Specialist,
BT Exact Business Assurance Solutions
Tel: +44 1473 643932
Mob: +44 7962 012145
Email: dhiraj.2.bhuyan(a)bt.com
Hi all,
I've a problem with radius attribute Sip-Method. And this comes from a
difference between SER values for attributes and the
Draft-schulzrinne-sipping-radius-accounting-00.txt ones.
In the draft, attributes are defined this way :
0 INVITE
1 BYE
2 REGISTER
3 CANCEL
4 OPTIONS
5 ACK
6 SUBSCRIBE
7 NOTIFY
And you, you defined them :
METHOD_UNDEF=0
METHOD_INVITE=1
METHOD_CANCEL=2
METHOD_ACK=4
METHOD_BYE=8
METHOD_OTHER=16
So when I send this attributes to my radius server, the values are not coherent.
Why is it done like this. And what can I do to get some coherency?
Thanks all
Laurent