SER Multi-domain support
Satish patel
I am working on SER since last 3 month and i have good knowledge of SER functionality finaly i have decide to implement Multi-domain because I have many VOIP customer and i have configure domain name base on users like john@example.com can call to eric@example.com , also there is one more domain satish@linuxbug.org and priya@linuxbug.org can call to each other not inter-domain.
Now i am going in detail configuration Now configure Mysql Server on your SER server and run database script to create mysql tables
This is my working configuration
cat /usr/local/etc/ser/ser.cfg
# $Id: nat-mediaproxy.cfg 51 2006-01-31 13:28:04Z /CN=Paul Hazlett/[email protected] $
debug=6
fork=yes
log_stderror=yes
listen=XXX.XXX.XXX.XXX # INSERT YOUR SERVER IP ADDRESS HERE
port=5060
children=4
dns=no
rev_dns=no
fifo="/tmp/ser_fifo"
fifo_db_url="mysql://ser:[email protected]/ser"
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/auth.so"
loadmodule "/usr/local/lib/ser/modules/auth_db.so"
loadmodule "/usr/local/lib/ser/modules/uri.so"
loadmodule "/usr/local/lib/ser/modules/uri_db.so"
loadmodule "/usr/local/lib/ser/modules/domain.so"
loadmodule "/usr/local/lib/ser/modules/mediaproxy.so"
loadmodule "/usr/local/lib/ser/modules/nathelper.so"
loadmodule "/usr/local/lib/ser/modules/textops.so"
loadmodule "/usr/local/lib/ser/modules/xlog.so"
modparam("auth_db|domain|uri_db|usrloc", "db_url", "mysql://ser:[email protected]/ser")
modparam("auth_db", "calculate_ha1", 1)
modparam("auth_db", "password_column", "password")
modparam("nathelper", "rtpproxy_disable", 1)
modparam("nathelper", "natping_interval", 0)
modparam("mediaproxy","natping_interval", 30)
modparam("mediaproxy","mediaproxy_socket", "/var/run/mediaproxy.sock")
#modparam("mediaproxy","sip_asymmetrics","/usr/local/etc/ser/sip-clients")
#modparam("mediaproxy","rtp_asymmetrics","/usr/local/etc/ser/rtp-clients")
modparam("usrloc", "db_mode", 2)
modparam("domain", "domain_table", "domain")
modparam("domain", "domain_col", "domain")
modparam("usrloc|registrar|auth_db|avpops|group", "use_domain", 1)
modparam("uri_db", "use_domain", 1)
modparam("uri_db", "use_uri_table", 1)
modparam("registrar", "nat_flag", 6)
modparam("rr", "enable_full_lr", 1)
route {
# -----------------------------------------------------------------
# Sanity Check Section
# -----------------------------------------------------------------
if (!mf_process_maxfwd_header("10")) {
sl_send_reply("483", "Too Many Hops");
break;
};
if (msg:len > max_len) {
sl_send_reply("513", "Message Overflow");
break;
};
# -----------------------------------------------------------------
# Record Route Section
# -----------------------------------------------------------------
xlog("L_NOTICE","$rm from $si at $Tf\n");
if (method=="INVITE" && client_nat_test("3")) {
# INSERT YOUR IP ADDRESS HERE
record_route_preset("203.124.16.109:5060;nat=yes");
} else if (method!="REGISTER") {
record_route();
};
# -----------------------------------------------------------------
# Call Tear Down Section
# -----------------------------------------------------------------
if (method=="BYE" || method=="CANCEL") {
end_media_session();
};
# -----------------------------------------------------------------
# Loose Route Section
# -----------------------------------------------------------------
if (loose_route()) {
if ((method=="INVITE" || method=="REFER") && !has_totag()) {
sl_send_reply("403", "Forbidden");
break;
};
if (method=="INVITE") {
if (!proxy_authorize("","subscriber")) {
proxy_challenge("","0");
break;
} else if (!check_from()) {
sl_send_reply("403", "Use From=ID");
break;
};
consume_credentials();
if (client_nat_test("3") || search("^Route:.*;nat=yes")) {
setflag(6);
use_media_proxy();
};
};
route(1);
break;
};
# -----------------------------------------------------------------
# Call Type Processing Section
# -----------------------------------------------------------------
if (uri==myself) {
route(4);
route(1);
break;
};
if (method=="ACK") {
route(1);
break;
} else if (method=="CANCEL") {
route(1);
break;
} else
if (method=="INVITE") {
route(3);
break;
}
else
if (method=="REGISTER") {
route(2);
break;
};
lookup("aliases");
if (uri==myself) {
route(4);
route(1);
break;
};
if (!lookup("location")) {
sl_send_reply("404", "User Not Found");
break;
};
route(1);
}
route[1] {
# -----------------------------------------------------------------
# Default Message Handler
# -----------------------------------------------------------------
t_on_reply("1");
if (!t_relay()) {
if (method=="INVITE" || method=="ACK") {
end_media_session();
};
sl_reply_error();
};
}
# REGISTER Message Handling
# -------------------------
route[2] {
sl_send_reply("100", "Trying");
if (!search("^Contact:[ ] *\*") && client_nat_test("7")) {
setflag(6);
fix_nated_register();
force_rport();
};
if (!www_authorize("","subscriber")) {
www_challenge("","0");
break;
};
if (!check_to()) {
sl_send_reply("401", "Unauthorized");
break;
};
consume_credentials();
if (!save("location")) {
sl_reply_error();
};
}
route[3] {
# -----------------------------------------------------------------
# INVITE Message Handler
# -----------------------------------------------------------------
if (client_nat_test("3")) {
setflag(7);
force_rport();
fix_nated_contact();
};
if (!proxy_authorize("","subscriber")) {
xlog("L_NOTICE","Unable to verify the credentials\n");
proxy_challenge("","0");
break;
} else if (!check_from()) {
sl_send_reply("403", "Use From=ID");
break;
};
consume_credentials();
lookup("aliases");
if (uri==myself) {
route(4);
route(1);
break;
};
if (!lookup("location")) {
sl_send_reply("404", "User Not Found");
break;
};
route(4);
route(1);
}
route[4] {
# -----------------------------------------------------------------
# NAT Traversal Section
# -----------------------------------------------------------------
if (isflagset(6) || isflagset(7)) {
if (!isflagset(8)) {
setflag(8);
use_media_proxy();
};
};
}
onreply_route[1] {
if ((isflagset(6) || isflagset(7)) && (status=~"(180)|(183)|2[0-9][0-9]")) {
if (!search("^Content-Length:[ ]*0")) {
use_media_proxy();
};
};
if (client_nat_test("1")) {
fix_nated_contact();
};
}
#------------------END CONFIGURATION---------------------------#
Create Domain & Users with the help or serctl
My mysql databse table look like
mysql> select * from subscriber;
+----------------------------------+----------+-------------+----------+------------+-----------+-------+-----------------+---------------------+---------------------+------------------------------------------+------+------------------+----------+----------------------------------+----------------------------------+------------+----------+------+------+------+
| phplib_id | username | domain | password | first_name | last_name | phone | email_address | datetime_created | datetime_modified | confirmation | flag | sendnotification | greeting | ha1 | ha1b | allow_find | timezone | rpid | domn | uuid |
+----------------------------------+----------+-------------+----------+------------+-----------+-------+-----------------+---------------------+---------------------+------------------------------------------+------+------------------+----------+----------------------------------+----------------------------------+------------+----------+------+------+------+
| 57ee3d1fdf7d16fd37d41830759fbe6a | admin | localhost | heslo | Initial | Admin | 123 | root@localhost | 2002-09-04 19:37:45 | 0000-00-00 00:00:00 | 57DaSIPuCm52UNe54LF545750cfdL48OMZfroM53 | o | | | ef14cbde69e0092442ec28b3cb611d84 | f3472771d405eb701f1f21ffa31fa005 | 0 | NULL | NULL | NULL | NULL |
| 89c28d38392ccbb118a8693a30171f85 | 123 | example.com | pass | | | | 123 | 2007-12-18 13:16:11 | 0000-00-00 00:00:00 | | o | | | 89c28d38392ccbb118a8693a30171f85 | 6ad3743010d98287aecf3ea89a35277b | 0 | NULL | NULL | NULL | NULL |
| fbc20273a61f0e15176d18f8c7241cd2 | 111 | example.com | tulip | | | | [email protected] | 2007-12-18 14:51:40 | 0000-00-00 00:00:00 | | o | | | fbc20273a61f0e15176d18f8c7241cd2 | 79ac655037e6292ed95f6c5c296aab4b | 0 | NULL | NULL | NULL | NULL |
mysql> select * from domain;
+-------------+---------------------+
| domain | last_modified |
+-------------+---------------------+
| example.com | 0000-00-00 00:00:00 |
| abc.com | 0000-00-00 00:00:00 |
+-------------+---------------------+
2 rows in set (0.04 sec)
Now you can configure your users in Xlite and connect to or call to each othere …..Best of luck ….
Feel free to contact me is there any mistake ….or problem ….
Homp page :- http://www.linuxbug.org
satish.lx@gmail.com
+91-9818875535