Hello Travis,
Here is my '/etc/opensips/opensips.cfg', which I've generated with
'osipsconfig' and edited just a bit:
#
# $Id$
#
# OpenSIPS residential configuration script
# by OpenSIPS Solutions <[email protected]>
#
# This script was generated via "make menuconfig", from
# the "Residential" scenario.
# You can enable / disable more features / functionalities by
# re-generating the scenario with different options.#
#
# Please refer to the Core CookBook at:
# http://www.opensips.org/Resources/DocsCookbooks
# for a explanation of possible statements, functions and parameters.
#
####### Global Parameters #########
debug=3
log_stderror=no
log_facility=LOG_LOCAL0
fork=yes
children=4
/* uncomment the following lines to enable debugging */
# debug=6
# fork=no
# log_stderror=yes
/* uncomment the next line to enable the auto temporary blacklisting of
not available destinations (default disabled) */
#disable_dns_blacklist=no
/* uncomment the next line to enable IPv6 lookup after IPv4 dns
lookup failures (default disabled) */
#dns_try_ipv6=yes
/* comment the next line to enable the auto discovery of local aliases
based on revers DNS on IPs */
auto_aliases=no
listen=udp:127.0.0.1:5060 # CUSTOMIZE ME
listen=tcp:127.0.0.1:5060 # CUSTOMIZE ME
listen=tls:127.0.0.1:5061 # CUSTOMIZE ME
####### Modules Section ########
#set module path
mpath="/usr/lib/opensips/modules/"
#### SIGNALING module
loadmodule "signaling.so"
#### StateLess module
loadmodule "sl.so"
#### Transaction Module
loadmodule "tm.so"
modparam("tm", "fr_timeout", 5)
modparam("tm", "fr_inv_timeout", 30)
modparam("tm", "restart_fr_on_each_reply", 0)
modparam("tm", "onreply_avp_mode", 1)
#### Record Route Module
loadmodule "rr.so"
/* do not append from tag to the RR (no need for this script) */
modparam("rr", "append_fromtag", 0)
#### MAX ForWarD module
loadmodule "maxfwd.so"
#### SIP MSG OPerationS module
loadmodule "sipmsgops.so"
#### FIFO Management Interface
loadmodule "mi_fifo.so"
modparam("mi_fifo", "fifo_name", "/tmp/opensips_fifo")
modparam("mi_fifo", "fifo_mode", 0666)
#### URI module
loadmodule "uri.so"
modparam("uri", "use_uri_table", 0)
#### PGSQL module
loadmodule "db_postgres.so"
#### HTTPD module
# loadmodule "httpd.so"
# modparam("httpd", "port", 8888)
#### USeR LOCation module
loadmodule "usrloc.so"
modparam("usrloc", "nat_bflag", "NAT")
modparam("usrloc", "db_mode", 2)
modparam("usrloc", "db_url",
"postgres://opensips:$@localhost/opensips") # CUSTOMIZE ME
#### REGISTRAR module
loadmodule "registrar.so"
modparam("registrar", "tcp_persistent_flag", "TCP_PERSISTENT")
modparam("registrar", "received_avp", "$avp(received_nh)")
/* uncomment the next line not to allow more than 10 contacts per AOR */
#modparam("registrar", "max_contacts", 10)
#### ACCounting module
loadmodule "acc.so"
/* what special events should be accounted ? */
modparam("acc", "early_media", 0)
modparam("acc", "report_cancels", 0)
/* by default we do not adjust the direct of the sequential requests.
if you enable this parameter, be sure the enable "append_fromtag"
in "rr" module */
modparam("acc", "detect_direction", 0)
modparam("acc", "failed_transaction_flag", "ACC_FAILED")
/* account triggers (flags) */
modparam("acc", "db_flag", "ACC_DO")
modparam("acc", "db_missed_flag", "ACC_MISSED")
modparam("acc", "db_url",
"postgres://opensips:$@localhost/opensips") # CUSTOMIZE ME
#### AUTHentication modules
loadmodule "auth.so"
loadmodule "auth_db.so"
modparam("auth_db", "calculate_ha1", yes)
modparam("auth_db", "password_column", "password")
modparam("auth_db|uri", "db_url",
"postgres://opensips:$@localhost/opensips") # CUSTOMIZE ME
modparam("auth_db", "load_credentials", "")
#### PRESENCE modules
loadmodule "xcap.so"
loadmodule "presence.so"
loadmodule "presence_xml.so"
modparam("xcap|presence", "db_url",
"postgres://opensips:$@localhost/opensips") # CUSTOMIZE ME
# modparam("presence|presence_xml", "db_url",
"postgres://opensips:$@localhost/opensips")
# modparam("presence", "db_url",
"postgres://opensips:$@localhost/opensips")
modparam("presence_xml", "force_active", 1)
modparam("presence", "server_address", "sip:127.0.0.1:5060") # CUSTOMIZE
ME
#### DIALOG module
loadmodule "dialog.so"
modparam("dialog", "dlg_match_mode", 1)
modparam("dialog", "default_timeout", 21600) # 6 hours timeout
modparam("dialog", "db_mode", 2)
modparam("dialog", "db_url", "postgres://opensips:$@localhost/opensips")
# CUSTOMIZE ME
#### NAT modules
loadmodule "nathelper.so"
modparam("nathelper", "natping_interval", 10)
modparam("nathelper", "ping_nated_only", 1)
modparam("nathelper", "sipping_bflag", "SIP_PING_FLAG")
modparam("nathelper", "sipping_from", "sip:[email protected]") #CUSTOMIZE
ME
modparam("nathelper", "received_avp", "$avp(received_nh)")
# loadmodule "rtpproxy.so"
# modparam("rtpproxy", "rtpproxy_sock", "udp:localhost:12221") #
CUSTOMIZE ME
#### MI_HTTP module
# loadmodule "mi_http.so"
loadmodule "proto_udp.so"
loadmodule "proto_tcp.so"
loadmodule "proto_tls.so"
modparam("proto_tls","verify_cert", "1")
modparam("proto_tls","require_cert", "0")
modparam("proto_tls","tls_method", "TLSv1")
modparam("proto_tls","certificate",
"/etc/opensips/tls/user/user-cert.pem")
modparam("proto_tls","private_key",
"/etc/opensips/tls/user/user-privkey.pem")
modparam("proto_tls","ca_list",
"/etc/opensips/tls/user/user-calist.pem")
####### Routing Logic ########
# main request routing logic
route{
force_rport();
if (nat_uac_test("23")) {
if (is_method("REGISTER")) {
fix_nated_register();
setbflag(NAT);
} else {
fix_nated_contact();
setflag(NAT);
}
}
if (!mf_process_maxfwd_header("10")) {
sl_send_reply("483","Too Many Hops");
exit;
}
if (has_totag()) {
# sequential request withing a dialog should
# take the path determined by record-routing
if (loose_route()) {
# validate the sequential request against dialog
if ( $DLG_status!=NULL && !validate_dialog() ) {
xlog("In-Dialog $rm from $si
(callid=$ci) is not valid according to dialog\n");
## exit;
}
if (is_method("BYE")) {
setflag(ACC_DO); # do accounting ...
setflag(ACC_FAILED); # ... even if the
transaction fails
} else if (is_method("INVITE")) {
# even if in most of the cases is
useless, do RR for
# re-INVITEs alos, as some buggy clients
do change route set
# during the dialog.
record_route();
}
if (check_route_param("nat=yes"))
setflag(NAT);
# route it out to whatever destination was set
by loose_route()
# in $du (destination URI).
route(relay);
} else {
if (is_method("SUBSCRIBE") && $rd ==
"127.0.0.1:5060") { # CUSTOMIZE ME
# in-dialog subscribe requests
route(handle_presence);
exit;
}
if ( is_method("ACK") ) {
if ( t_check_trans() ) {
# non loose-route, but stateful
ACK; must be an ACK after
# a 487 or e.g. 404 from
upstream server
t_relay();
exit;
} else {
# ACK without matching
transaction ->
# ignore and discard
exit;
}
}
sl_send_reply("404","Not here");
}
exit;
}
# CANCEL processing
if (is_method("CANCEL"))
{
if (t_check_trans())
t_relay();
exit;
}
t_check_trans();
if ( !(is_method("REGISTER") ) ) {
if (from_uri==myself)
{
# authenticate if from local subscriber
# authenticate all initial non-REGISTER request
that pretend to be
# generated by local subscriber (domain from
FROM URI is local)
if (!proxy_authorize("", "subscriber")) {
proxy_challenge("", "0");
exit;
}
if (!db_check_from()) {
sl_send_reply("403","Forbidden auth
ID");
exit;
}
consume_credentials();
# caller authenticated
} else {
# if caller is not local, then called number
must be local
if (!uri==myself) {
send_reply("403","Rely forbidden");
exit;
}
}
}
# preloaded route checking
if (loose_route()) {
xlog("L_ERR",
"Attempt to route with preloaded Route's
[$fu/$tu/$ru/$ci]");
if (!is_method("ACK"))
sl_send_reply("403","Preload Route denied");
exit;
}
# record routing
if (!is_method("REGISTER|MESSAGE"))
record_route();
# account only INVITEs
if (is_method("INVITE")) {
# create dialog with timeout
if ( !create_dialog("B") ) {
send_reply("500","Internal Server Error");
exit;
}
setflag(ACC_DO); # do accounting
}
if (!uri==myself) {
append_hf("P-hint: outbound\r\n");
# if you have some interdomain connections via TLS
## CUSTOMIZE IF NEEDED
##if ($rd=="tls_domain1.net"
## || $rd=="tls_domain2.net"
##) {
## force_send_socket(tls:127.0.0.1:5061); # CUSTOMIZE
##}
route(relay);
}
# requests for my domain
if( is_method("PUBLISH|SUBSCRIBE"))
route(handle_presence);
if (is_method("REGISTER"))
{
# authenticate the REGISTER requests
if (!www_authorize("", "subscriber"))
{
www_challenge("", "0");
exit;
}
if (!db_check_to())
{
sl_send_reply("403","Forbidden auth ID");
exit;
}
if ( proto==TCP || proto==TLS || 0 )
setflag(TCP_PERSISTENT);
if (isflagset(NAT)) {
setbflag(SIP_PING_FLAG);
}
if (!save("location"))
sl_reply_error();
exit;
}
if ($rU==NULL) {
# request with no Username in RURI
sl_send_reply("484","Address Incomplete");
exit;
}
# do lookup with method filtering
if (!lookup("location","m")) {
if (!db_does_uri_exist()) {
send_reply("420","Bad Extension");
exit;
}
t_newtran();
t_reply("404", "Not Found");
exit;
}
if (isbflagset(NAT)) setflag(NAT);
# when routing via usrloc, log the missed calls also
setflag(ACC_MISSED);
route(relay);
}
route[relay] {
# for INVITEs enable some additional helper routes
if (is_method("INVITE")) {
# if (isflagset(NAT)) {
# rtpproxy_offer("ro");
# }
t_on_branch("per_branch_ops");
t_on_reply("handle_nat");
t_on_failure("missed_call");
}
if (isflagset(NAT)) {
add_rr_param(";nat=yes");
}
if (!t_relay()) {
send_reply("500","Internal Error");
};
exit;
}
# Presence route
route[handle_presence]
{
if (!t_newtran())
{
sl_reply_error();
exit;
}
if(is_method("PUBLISH"))
{
handle_publish();
}
else
if( is_method("SUBSCRIBE"))
{
handle_subscribe();
}
exit;
}
branch_route[per_branch_ops] {
xlog("new branch at $ru\n");
}
onreply_route[handle_nat] {
if (nat_uac_test("1"))
fix_nated_contact();
# if ( isflagset(NAT) )
# rtpproxy_answer("ro");
xlog("incoming reply\n");
}
failure_route[missed_call] {
if (t_was_cancelled()) {
exit;
}
# uncomment the following lines if you want to block client
# redirect based on 3xx replies.
##if (t_check_status("3[0-9][0-9]")) {
##t_reply("404","Not found");
## exit;
##}
}
local_route {
if (is_method("BYE") && $DLG_dir=="UPSTREAM") {
acc_db_request("200 Dialog Timeout", "acc");
}
}
I've added 2 subscribers like so:
sudo opensipsctl add 1234 1234
sudo opensipsctl add 5678 5678
By the way, I start 'opensips' with the corresponding 'systemd' service,
and in total there are 16 processes running. I guess it's because 4
children for each UDP, TCP, and TLS, but what are the rest 4?
Furthermore, which protocol should I actually prefer for this test with
Ekiga?
If you could review this configuration file and answer these question
that would be great! In the meantime I will try your suggestions
regarding 'tcpdump' and Wireshark.
Regards,
Alexander
On 29.10.2015 20:25, Travis Manson-Drake wrote:
Hey Alexander,
new comer to Opensips here as well.
What's probably happening is its looping through your routing logic,
because it doesn’t match on any of the routes in your logic.
Can you send me a copy of your opensips.cfg file?
Also the UAC you're trying to register, did you create an account for
it in the DB?
As Rodrigo had mentioned to best debug this you're going to want to
get a packet capture and look at the registration request coming into
the proxy from your UAC. You can also do this with tcpdump on the
server your running your proxy off of.
Assuming its CentOS you can get it by doing a yum install tcpdump
Then simply running a tcpdump -i yourinterface -w filename.pcap
Once the capture is running on the servers interface, have your UAC
try and register with the proxy
After it fails, stop the capture with ctrl + c, retrieve the file and
open it in wireshark
From there you can filter for sip and inspect each REGISTER request
packet as it hits the proxy. Which may give you some idea as to why
your UAC isn’t registering with the proxy.
If you're not aware of wire suggest I strong suggest you download it
and play around (such an amazing tool!)
cheers!
-----Original Message-----
From: [email protected]
[mailto:[email protected]] On Behalf Of Alexander
Shukaev
Sent: Thursday, October 29, 2015 11:56 AM
To: OpenSIPS users mailling list <[email protected]>
Subject: Re: [OpenSIPS-Users] Bare Bones
Hello Rodrigo,
Unfortunately, I have no idea what Wireshark is and how to use it.
How to log OpenSIPS I also don't know. If you could provide any
assistance with this, it would be greatly appreciated.
Regards,
Alexander
On 29.10.2015 17:32, Rodrigo Pimenta Carvalho wrote:
Sorry.
Where I wrote SIP INVITE I wanted to mean SIP REGISTER....
RODRIGO PIMENTA CARVALHO
Inatel Competence Center
Software
Ph: +55 35 3471 9200 RAMAL 979
________________________________________
De: Rodrigo Pimenta Carvalho
Enviado: quinta-feira, 29 de outubro de 2015 14:31
Para: OpenSIPS users mailling list
Assunto: Re: [OpenSIPS-Users] Bare Bones
Hi.
I´m not expert in SIP neither OpenSIPS. But I guess the message SIP
INVITE has an attribute that shows the max allowed number of hops that
the message will reach before being refused.
Do you know how to use Wireshark? Try to check if the SIP INVITE is
really traveling by too many hops before being refused or check if
that attribute has a low value.
You also can check the OpenSIPS log to see if something is wrong. I´m
not in my linux now, so I can´t check how to run with log. But if you
need it, tell me and I will check for you.
Best regards.
RODRIGO PIMENTA CARVALHO
Inatel Competence Center
Software
Ph: +55 35 3471 9200 RAMAL 979
________________________________________
De: [email protected]
<[email protected]> em nome de Alexander Shukaev
<[email protected]>
Enviado: quinta-feira, 29 de outubro de 2015 01:38
Para: OpenSIPS Users
Assunto: [OpenSIPS-Users] Bare Bones
Hello,
Complete VoIP, SIP, and OpenSIPS newbie here. So far, I've been able
to build OpenSIPS, establish PostgreSQL server, run both, and add 2
subscribers into DB. Unfortunately, testing from Ekiga, gives me the
"Could not register (Too many hops)" error when I try to register one
of those subscribers in it. Could anybody lend a hand here and guide
me through this process. The goal is to at least be able to send a
message between those 2 subscribers and at most to establish a phone
call between them. I know that this can be a misconfiguration issue
from my side and that the information I provide here is brief, but I
am ready to expand any point if that's needed for progress; just let
me know which logs, configurations, etc. I should post. Thank you in
advance for your assistance.
Kind regards,
Alexander
_______________________________________________
Users mailing list
[email protected]
http://lists.opensips.org/cgi-bin/mailman/listinfo/users
_______________________________________________
Users mailing list
[email protected]
http://lists.opensips.org/cgi-bin/mailman/listinfo/users
_______________________________________________
Users mailing list
[email protected]
http://lists.opensips.org/cgi-bin/mailman/listinfo/users
_______________________________________________
Users mailing list
[email protected]
http://lists.opensips.org/cgi-bin/mailman/listinfo/users
_______________________________________________
Users mailing list
[email protected]
http://lists.opensips.org/cgi-bin/mailman/listinfo/users