SER Multi-domain support

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/emailAddress=paul@onsip.org $
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:mypasswd@192.168.104.20/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:mypasswd@192.168.104.20/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    |            |           |       | 111@example.com | 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

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/emailAddress=paul@onsip.org $
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:mypasswd@192.168.104.20/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:mypasswd@192.168.104.20/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    |            |           |       | 111@example.com | 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

Created by: satish.lx, Last modification: Wed 02 of May, 2012 (23:54 UTC) by admin
Please update this page with new information, just login and click on the "Edit" or "Discussion" tab. Get a free login here: Register Thanks! - Find us on Google+