[OpenSIPS-Users] Help regarding Opensips Proxy

Răzvan Crainea razvan at opensips.org
Thu Oct 22 08:55:04 EST 2020


What does "connect an agent" mean? Register on a specific asterisk 
server? If so, you should be using the Path module[1] to add OpenSIPS as 
an extra hop between the agent and Asterisk. An alternative is the Mid 
registrar module[2], which can itself store the location of the agent, 
and relay calls to it.

[1] https://opensips.org/docs/modules/3.1.x/path.html
[2] https://opensips.org/docs/modules/3.1.x/mid_registrar.html

Răzvan Crainea
OpenSIPS Core Developer
http://www.opensips-solutions.com

On 10/22/20 11:37 AM, Mihai wrote:
> Any hints about this?
> 
> On Tue, Sep 29, 2020 at 4:46 PM Mihai <m at mokalife.ro 
> <mailto:m at mokalife.ro>> wrote:
> 
>     Hi all,
> 
>     I need some help on getting to work my scenario:
> 
>     I have 3 asterisk servers, and, every agent is connecting  to which
>     server they need by contacting the PublicIP. (the problem is that I
>     need to reuse the IP address on others servers) . I want if is
>     possible to use Opensips as proxy, so that agents can connect to
>     those asterisk servers by virtualhost (example.
>     asterisk1.behindproxy.example, asterisk2.behindproxy.example ).
>     Basically I want to proxy everything thru OpenSIPs.
> 
> 
>     I am using centos 7 with the following packages installed:
>     opensips-dialplan-module-3.1.0-1.el7.x86_64
>     opensips-yum-releases-3.1-5.el7.noarch
>     opensips-b2bua-module-3.1.0-1.el7.x86_64
>     opensips-regex-module-3.1.0-1.el7.x86_64
>     opensips-mysql-module-3.1.0-1.el7.x86_64
>     opensips-3.1.0-1.el7.x86_64
> 
> 
> 
>     What I tried so far is this config, it dose send my users to
>     required Asterisk servers, but on the asterisk server I don't see
>     their IP ( i see the IP of the proxy) and that's it ....
>     the dispatcher list is  this from mysql:
> 
>     Any help is apreciated.
>     +----+-------+----------------+--------+-------+--------+----------+-------+-------------+
>     | id | setid | destination    | socket | state | weight | priority |
>     attrs | description |
>     +----+-------+----------------+--------+-------+--------+----------+-------+-------------+
>     |  1 |     1 | sip:172.16.0.2 | NULL   |     2 | 1      |        0
>     |       | sip1        |
>     |  2 |     2 | sip:172.16.0.3 | NULL   |     2 | 1      |        0
>     |       | sip2        |
>     |  3 |     3 | sip:172.16.0.4 | NULL   |     2 | 1      |        0
>     |       | sip3        |
>     +----+-------+----------------+--------+-------+--------+----------+-------+-------------+
> 
> 
>     ####### Global Parameters #########
>     #debug_mode=yes
>     log_level=4
>     log_stderror=no
>     log_facility=LOG_LOCAL0
>     udp_workers=4
>     socket=udp:0.0.0.0:5060 <http://0.0.0.0:5060>
>     ####### Modules Section ########
> 
>     #set module path
>     mpath="/usr/lib64/opensips/modules"
> 
>     #### SIGNALING module
>     loadmodule "signaling.so"
> 
>     loadmodule "db_mysql.so"
>     loadmodule "db_text.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"
>     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)
> 
>     #### USeR LOCation module
>     loadmodule "usrloc.so"
>     modparam("usrloc", "nat_bflag", "NAT")
>     modparam("usrloc", "working_mode_preset", "single-instance-no-db")
> 
>     #### REGISTRAR module
>     loadmodule "registrar.so"
>     modparam("registrar", "retry_after", 30)
> 
>     #### DIALOG module
>     loadmodule "dialog.so"
>     modparam("dialog", "enable_stats", 0)
>     modparam("dialog", "hash_size", 1024)
>     modparam("dialog", "log_profile_hash_size", 4)
>     modparam("dialog", "default_timeout", 21600) # 6h
>     modparam("dialog", "dlg_extra_hdrs", "Hint: credit expired\r\n")
>     modparam("dialog", "dlg_match_mode", 0)
>     modparam("dialog", "options_ping_interval", 20)
>     modparam("dialog", "reinvite_ping_interval", 600)
> 
>     ### nat_traversal
>     loadmodule "nat_traversal.so"
>     modparam("nat_traversal", "keepalive_interval", 60)
>     modparam("nat_traversal", "keepalive_method", "OPTIONS")
>     modparam("nat_traversal", "keepalive_from",
>     "sip:keepalive at opensips.proxy")
>     modparam("nat_traversal", "keepalive_extra_headers", "User-Agent:
>     OpenSIPS\r\nX-NAT: yes\r\n")
>     modparam("nat_traversal", "keepalive_state_file",
>     "/var/run/opensips/keepalive_state")
> 
> 
>     ######################################################################
>     ## Dispatcher Module Parameters
>     ######################################################################
>     loadmodule "dispatcher.so"
>     #modparam("dispatcher", "list_file", "/etc/opensips/dispatcher.list")
>     modparam("dispatcher", "db_url",
>     "mysql://opensips:opensipsrw@localhost/opensips")
>     modparam("dispatcher", "dst_avp", "$avp(271)")
>     modparam("dispatcher", "attrs_avp", "$avp(272)")
>     modparam("dispatcher", "grp_avp", "$avp(273)")
>     modparam("dispatcher", "cnt_avp", "$avp(274)")
>     modparam("dispatcher", "hash_pvar", "$avp(273)")
>     modparam("dispatcher", "ds_ping_method", "OPTIONS")
>     modparam("dispatcher", "ds_ping_from", "sip:sipcheck at opensips.proxy")
>     modparam("dispatcher", "ds_ping_interval", 10)
>     modparam("dispatcher", "ds_probing_threshhold", 3)
>     modparam("dispatcher", "ds_probing_mode", 1)
>     modparam("dispatcher", "options_reply_codes", "501,403,404,400,200")
> 
>     loadmodule "proto_udp.so"
> 
>     ####### Routing Logic ########
>     # main request routing logic
> 
>     route{
> 
>     if (!mf_process_maxfwd_header(10)) {
>     send_reply(483,"Max hops reached");
>     exit;
>     }
> 
>     if (has_totag()) {
> 
>     # handle hop-by-hop ACK (no routing required)
>     if ( is_method("ACK") && t_check_trans() ) {
>     t_relay();
>     exit;
>     }
> 
>     # sequential request within a dialog should
>     # take the path determined by record-routing
>     if ( !loose_route() ) {
>     # we do record-routing for all our traffic, so we should not
>     # receive any sequential requests without Route hdr.
>     send_reply(404,"Not here");
>     exit;
>     }
> 
>     # route it out to whatever destination was set by loose_route()
>     # in $du (destination URI).
>     route(relay);
>     exit;
>     }
> 
>     # CANCEL processing
>     if (is_method("CANCEL")) {
>     if (t_check_trans())
>     t_relay();
>     exit;
>     }
> 
>     # absorb retransmissions, but do not create transaction
>     t_check_trans();
> 
>     if ( !(is_method("REGISTER")  ) ) {
>     if (is_myself("$fd")) {
>     # do nothing
>     } else {
>     # if caller is not local, then called number must be local
>     if (!is_myself("$rd")) {
>     send_reply(403,"Relay Forbidden On: $si ");
>     #send_reply(200,"Relay $fd ");
>     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"))
>     send_reply(403,"Preload Route denied");
>     exit;
>     }
> 
>     # record routing
>     if (!is_method("REGISTER|MESSAGE"))
>     record_route();
> 
>     if (!is_myself("$rd")) {
>     append_hf("P-hint: outbound\r\n");
>     route(relay);
>     }
> 
>     # requests for my domain
>     if (is_method("PUBLISH|SUBSCRIBE")) {
>     send_reply(503, "Service Unavailable");
>     exit;
>     }
> 
>     if (is_method("REGISTER")) {
>     if (!save("location"))
>     sl_reply_error();
> 
>     exit;
>     }
> 
>     if ($rU==NULL) {
>     # request with no Username in RURI
>     send_reply(484,"Address Incomplete");
>     exit;
>     }
> 
>     # do lookup with method filtering
>     if (!lookup("location","m")) {
>     t_reply(404, "Not Found");
>     exit;
>     }
> 
>     route(relay);
>     }
> 
> 
>     route[relay] {
>     # for INVITEs enable some additional helper routes
>     if (is_method("INVITE")) {
>     t_on_branch("per_branch_ops");
>     t_on_reply("handle_nat");
>     t_on_failure("missed_call");
>     }
> 
>     if (!t_relay()) {
>     send_reply(500,"Internal Error");
>     }
>     exit;
> 
> 
>     switch ($fd){
>     case "asterisk1.example.com <http://asterisk1.example.com>":
>     if (!ds_select_dst(1, 0)) {
>     log("ERROR: no active destinations found!\n");
>     send_reply(503, "Service Unavailable");
>     exit;
>     }
>     ds_select_dst(1, 8, "ud", "default", 1);
>     break;
>     case "asterisk1.example.com <http://asterisk1.example.com>":
>     if (!ds_select_dst(2, 0)) {
>     log("ERROR: no active destinations found!\n");
>     send_reply(503, "Service Unavailable");
>     exit;
>     }
>     ds_select_dst(2, 8, "ud", "default", 1);
>     break;
>     case "asterisk1.example.com <http://asterisk1.example.com>":
>     if (!ds_select_dst(3, 0)) {
>     log("ERROR: no active destinations found!\n");
>     send_reply(503, "Service Unavailable");
>     exit;
>     }
>     ds_select_dst(3, 8, "ud", "default", 1);
>     log("---- flag value is $dd -- branch $fd \n");
>     break;
>     default:
>          log("unknow destination");
>          exit;
>     }
>     }
> 
> 
> 
> 
>     branch_route[per_branch_ops] {
>     xlog("new branch at $ru\n");
>     }
> 
> 
>     onreply_route[handle_nat] {
>     xlog("incoming reply\n");
>     }
> 
> 
>     failure_route[missed_call] {
>     if (t_was_cancelled()) {
>     exit;
>     }
>     }
> 
> 
> _______________________________________________
> Users mailing list
> Users at lists.opensips.org
> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
> 



More information about the Users mailing list