URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID6
Нить номер: 13436
[ Назад ]

Исходное сообщение
"OpenSER + FXO шлюз для выхода на АТС"

Отправлено Ded_MopozZz , 27-Апр-07 10:46 
Вот хочу сделать связку OpenSER+FXO-NSG+АТС. Но не могу понять как задать в OpenSER перенаправление звонков с префиксом (8-343-....) в направление NSG шлюза. Есть ли у кого  опыт настройки подобной конфигурации?

Содержание

Сообщения в этом обсуждении
"OpenSER + FXO шлюз для выхода на АТС"
Отправлено zaikini , 28-Апр-07 13:48 
>Вот хочу сделать связку OpenSER+FXO-NSG+АТС. Но не могу понять как задать в
>OpenSER перенаправление звонков с префиксом (8-343-....) в направление NSG шлюза. Есть
>ли у кого  опыт настройки подобной конфигурации?

Можно сделать:

        if (!lookup("location")) {
                if (uri=~"^sip:8343*@") {    
                        route(5);
                        return;
        };

И отдельно описать в роуте 5 маршрут к NSG
route[5] {
        # -----------------------------------------------------------------
        # PSTN Handler
        # -----------------------------------------------------------------
        rewritehostport("x.x.x.x:5060");
        # forward the request now
        route(1);
} # End of route[5]


А вот здесь есть хороший инструмент создания конфигов для ОпенСер

http://www.sipwise.com



"OpenSER + FXO шлюз для выхода на АТС"
Отправлено Ded_MopozZz , 28-Апр-07 14:23 
Ты бы знал как ты мне помог!!! Спасибо огромное!

"OpenSER + FXO шлюз для выхода на АТС"
Отправлено Ded_MopozZz , 03-Май-07 07:44 
Твой пример не проходит в конфиге с аутентификацией из базы :( Не могу понять где добавить эти строки так, что бы OpenSER не отвечал на набранный номер 8343.... что такой номер не существует...

debug=3
fork=yes
log_stderror=yes

listen=89.106.249.2
port=5060
children=4

dns=no
rev_dns=no
fifo="/tmp/ser_fifo"
fifo_db_url="postgres://openser:openserrw@127.0.0.1/openser"

loadmodule "/usr/lib/openser/modules/postgres.so"
loadmodule "/usr/lib/openser/modules/sl.so"
loadmodule "/usr/lib/openser/modules/tm.so"
loadmodule "/usr/lib/openser/modules/rr.so"
loadmodule "/usr/lib/openser/modules/maxfwd.so"
loadmodule "/usr/lib/openser/modules/usrloc.so"
loadmodule "/usr/lib/openser/modules/registrar.so"
loadmodule "/usr/lib/openser/modules/auth.so"
loadmodule "/usr/lib/openser/modules/auth_db.so"
loadmodule "/usr/lib/openser/modules/uri_db.so"

modparam("auth_db|uri_db|usrloc", "db_url", "postgres://openser:openserrw@127.0.0.1/openser")
modparam("auth_db", "calculate_ha1", 1)
modparam("auth_db", "password_column", "password")
modparam("usrloc", "db_mode", 2)
modparam("rr", "enable_full_lr", 1)

route {

  # -----------------------------------------------------------------
  # Sanity Check Section
  # -----------------------------------------------------------------
  if (!mf_process_maxfwd_header("10")) {
    sl_send_reply("483", "Too Many Hops");
    return;
  };

  if (msg:len > max_len) {
    sl_send_reply("513", "Message Overflow");
    return;
  };

  # -----------------------------------------------------------------
  # Record Route Section
  # -----------------------------------------------------------------
  if (method!="REGISTER") {
    record_route();
  };

  # -----------------------------------------------------------------
  # Loose Route Section
  # -----------------------------------------------------------------
  if (loose_route()) {
    route(1);
    return;
  };

  # -----------------------------------------------------------------
  # Call Type Processing Section
  # -----------------------------------------------------------------
  if (uri!=myself) {
    route(1);
    return;
  };

  if (method=="ACK") {
    route(1);
    return;
  } if (method=="INVITE") {
    route(3);
    return;
  } else  if (method=="REGISTER") {
    route(2);
    return;
  };

  lookup("aliases");
  if (uri!=myself) {
    route(1);
    return;
  };

  if (!lookup("location")) {

  if (uri=~"^sip:8343*@") {  
   route(5);
   return;
    };

    sl_send_reply("404", "User Not Found");
    return;


  };

  route(1);

}

route[1] {

  # -----------------------------------------------------------------
  # Default Message Handler
  # -----------------------------------------------------------------
  if (!t_relay()) {
    sl_reply_error();
  };
}

route[2] {

  # -----------------------------------------------------------------
  # REGISTER Message Handler
  # ----------------------------------------------------------------
  sl_send_reply("100", "Trying");
  
  if (!www_authorize("","subscriber")) {
    www_challenge("","0");
    return;
  };

  if (!check_to()) {
    sl_send_reply("401", "Unauthorized");
    return;
  };

  consume_credentials();

  if (!save("location")) {
    sl_reply_error();
  };
}

  route[3] {
  # -----------------------------------------------------------------
  # INVITE Message Handler
  # -----------------------------------------------------------------
  if (!proxy_authorize("","subscriber")) {
    proxy_challenge("","0");
    return;
  } else if (!check_from()) {
    sl_send_reply("403", "Use From=ID");
    return;
  };

  consume_credentials();

  lookup("aliases");
  if (uri!=myself) {
    route(1);
    return;
  };

    if (!lookup("location")) {
    sl_send_reply("404", "User Not Found");
    return;
  };

  route(1);
}

route[5] {
    # -----------------------------------------------------------------
    # PSTN Handler
    # -----------------------------------------------------------------
    rewritehostport("89.106.249.205:5060");
    # forward the request now
    route(1);
} # End of route[5]


"OpenSER + FXO шлюз для выхода на АТС"
Отправлено zaikini , 03-Май-07 09:11 
Тебе надо добавить эти строки в секцию route[3]

Для примера вот мой конфиг:
debug=9
fork=yes
log_stderror=yes
log_facility = LOG_DAEMON
listen=ч.ч.ч.ч                     # INSERT YOUR IP ADDRESS HERE
port=5060
children=4
#fifo="/tmp/openser_fifo"
#fifo_db_url="mysql://openser:openserrw@localhost/openser"
dns=no
rev_dns=no
# ------------------ module loading ----------------------------------

#set module path
mpath="/lib/openser/modules/"
loadmodule "sl.so"
loadmodule "tm.so"
loadmodule "acc.so"
loadmodule "rr.so"
loadmodule "maxfwd.so"
loadmodule "mysql.so"
loadmodule "auth.so"
loadmodule "auth_db.so"
loadmodule "group.so"
loadmodule "uri.so"
loadmodule "uri_db.so"
loadmodule "permissions.so"
loadmodule "usrloc.so"
loadmodule "mediaproxy.so"
loadmodule "domain.so"
loadmodule "registrar.so"
loadmodule "textops.so"
loadmodule "avpops.so"

# ----------------- setting module-specific parameters ---------------

# -- auth_db param --
modparam("auth_db|permissions|uri_db|usrloc",
        "db_url", "mysql://openser:openserrw@localhost/openser")
modparam("auth_db", "calculate_ha1", 1)
modparam("auth_db", "password_column", "password")

# -- usrloc param --
modparam("usrloc", "db_mode", 2)

# -- rr param --
modparam("rr", "enable_full_lr", 1)

# -- permissions param --
modparam("permissions", "db_mode", 1)
modparam("permissions", "trusted_table", "trusted")

# -- acc params --
modparam("acc", "log_level", 1)
# that is the flag for which we will account -- don't forget to
# set the same one :-)
modparam("acc", "log_flag", 1 )

# -- avpops param --
modparam("avpops", "avp_url", "mysql://openser:openserrw@localhost/openser")
modparam("avpops", "avp_table", "usr_preferences")

# -------------------------  request routing logic -------------------

# main routing logic

route {
        # -----------------------------------------------------------------
        # Sanity Check Section
        # -----------------------------------------------------------------
        if (!mf_process_maxfwd_header("10")) {
                sl_send_reply("483", "Too Many Hops");
                return;
        };
        if (msg:len > max_len) {
                sl_send_reply("513", "Message Overflow");
                return;
        };
        # -----------------------------------------------------------------
        # Record Route Section
        # -----------------------------------------------------------------
        if (method=="INVITE" /* && client_nat_test("3") */) {
                # INSERT YOUR IP ADDRESS HERE
                record_route_preset("ч.ч.ч.ч: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");
                        return;
                };
                if (method=="INVITE") {
                        if (!allow_trusted()) {
                                if (!proxy_authorize("","subscriber")) {
                                        proxy_challenge("","0");
                                        return;
                                } else if (!check_from()) {
                                        sl_send_reply("403", "Use From=ID");
                                        return;
                                };
                                consume_credentials();
                        };
                };
                route(1);
                return;
        }; #End of Loose Route Section
        # -----------------------------------------------------------------
        # Call Type Processing Section
        # -----------------------------------------------------------------
        if (!is_uri_host_local()) {
                if (is_from_local() || allow_trusted()) {
                        route(1);
                } else {
                        sl_send_reply("403", "Forbidden");
                };
                return;
        };
        if (method=="ACK") {
                route(1);
                return;
        } else if (method=="CANCEL") {
                route(1);
                return;
        } else if (method=="INVITE") {
                route(3);
                return;
        } else  if (method=="REGISTER") {
                route(2);
                return;
        };
        lookup("aliases");
        if (!is_uri_host_local()) {
                route(1);
                return;
        };
        if (!lookup("location")) {
                sl_send_reply("404", "User Not Found");
                return;
        };
        route(1);
} #End of main route
route[1] {
        # -----------------------------------------------------------------
        # Default Message Handler
        # -----------------------------------------------------------------
        t_on_reply("1");
        if (!t_relay()) {
                if (method=="INVITE" || method=="ACK") {
                        end_media_session();
                };
                sl_reply_error();
        };
}

route[2] {
        # -----------------------------------------------------------------
        # REGISTER Message Handler
        # -----------------------------------------------------------------
        sl_send_reply("100", "Trying");

        if (!search("^Contact:[ ]*\*") /* && client_nat_test("7") */) {
                setflag(6);
                force_rport();
        };
        if (!www_authorize("","subscriber")) {
                www_challenge("","0");
                return;
        };
        if (!check_to()) {
                sl_send_reply("401", "Unauthorized");
                return;
        };
        consume_credentials();
        if (!save("location")) {
                sl_reply_error();
        };
}

route[3] {

        # -----------------------------------------------------------------
        # INVITE Message Handler
        # -----------------------------------------------------------------
        if (!allow_trusted()) {
                if (!proxy_authorize("","subscriber")) {
                        proxy_challenge("","0");
                        return;
                } else if (!check_from()) {
                        sl_send_reply("403", "Use From=ID");
                        return;
                };
                consume_credentials();
        };
        lookup("aliases");
        if (!is_uri_host_local()) {
                route(1);
                return;
        };
        if (uri=~"^sip:[0-9]{2}@") {            # Call to MGTS SERVICES
                prefix("7495");
                route(5);
                return;
        };
        if (avp_db_load("$ru", "$avp(s:callfwd)/usr_preferences")) {
                setflag(22);
                avp_pushto("$ru", "$avp(s:callfwd)");
                route(6);
                return;
        };
        if (!lookup("location")) {
                if (uri=~"^sip:[0-9]{7}@") {    # Domestic PSTN
                        prefix("7495");
                        route(5);
                        return;
                } else
                if (uri=~"^sip:8[0-9]*@") {             # International PSTN
                        route(5);
                        return;
        };
                sl_send_reply("404", "User Not Found");
                return;
        };
        if (avp_db_load("$ru/username", "$avp(s:fwdbusy)/usr_preferences")) {
                if (!avp_check("$avp(s:fwdbusy)", "eq/$ru/i")) {
                        setflag(26);
                };
        };
        if (avp_db_load("$ru/username", "$avp(s:fwdnoanswer)/usr_preferences")) {
                if (!avp_check("$avp(s:fwdnoanswer)", "eq/$ru/i")) {
                setflag(27);
                };
        };
        t_on_failure("1");
        route(1);
}

route[5] {
        # -----------------------------------------------------------------
        # PSTN Handler
        # -----------------------------------------------------------------
        rewritehostport("х.х.х.х:5060");
        # forward the request now
        route(1);
} # End of route[5]

route[6] {

        # ------------------------------------------------------------------------
        # Call Forwarding Reply Route Handler
        #
        # This must be done as a route block because sl_send_reply() cannot be
        # called from the failure_route block
        # ------------------------------------------------------------------------

        lookup("aliases");
        if (!is_uri_host_local()) {
            if (!isflagset(22)) {
                append_branch();
            };
                route(1);
                return;
        };
        if (!lookup("location")) {
            if (uri=~"^sip:[0-9]{7}@") {    # Domestic PSTN
                    prefix("7495");
                    route(5);
                    return;
            } else
            if (uri=~"^sip:8[0-9]*@") {             # International PSTN
                    route(5);
                    return;
            };
            sl_send_reply("404", "User Not Found");
            return;
        };
}# End of route[6]
onreply_route[1] {


        if  (isflagset(6) &&
            (status=~"(180)|(183)|2[0-9][0-9]")) {
                if (!search("^Content-Length:[ ]*0")) {
                        use_media_proxy();
                };
        };
}

failure_route[1] {

        if (t_check_status("487")) {
                return;
        };

        if (isflagset(26) && t_check_status("486")) {
                if (avp_pushto("$ru", "$avp(s:fwdbusy)")) {
                    avp_delete("$avp(s:fwdbusy)");
                    resetflag(26);
                    route(6);
                    return;
                };
        };
        if (isflagset(27) && t_check_status("408")) {
                if (avp_pushto("$ru", "$avp(s:fwdnoanswer)")) {
                    avp_delete("$avp(s:fwdnoanswer)");
                    resetflag(27);
                    route(6);
                    return;
                };
        };

        end_media_session();
}



"OpenSER + FXO шлюз для выхода на АТС"
Отправлено Ded_MopozZz , 03-Май-07 15:11 
Спасибо за конфиг, очень поучительно. Но вот трабла с обработкой номера.

Т.е. если указать явно ^sip:8343555 то звонок уйдёт на шлюз
если выражением ^sip:8343*@ то эта строка игнорируется.


"OpenSER + FXO шлюз для выхода на АТС"
Отправлено zaikini , 03-Май-07 15:50 
>Спасибо за конфиг, очень поучительно. Но вот трабла с обработкой номера.
>
>Т.е. если указать явно ^sip:8343555 то звонок уйдёт на шлюз
>если выражением ^sip:8343*@ то эта строка игнорируется.

А других правил нет?


"OpenSER + FXO шлюз для выхода на АТС"
Отправлено Ded_MopozZz , 04-Май-07 07:04 
>А других правил нет?

Нет. Проблема решается, если убрать в конце @. И ещё вопрос (если не надоел:) ), есть функция prefix(), которая добавляет префикс... А есть ли функция обратная этой, которая вырезает подстроку?


"OpenSER + FXO шлюз для выхода на АТС"
Отправлено zaikini , 04-Май-07 09:20 
>>А других правил нет?
>
>Нет. Проблема решается, если убрать в конце @. И ещё вопрос (если
>не надоел:) ), есть функция prefix(), которая добавляет префикс... А есть
>ли функция обратная этой, которая вырезает подстроку?

Est', nazivaetsya - strip() (chto-to s raskladkoy u menya)


"OpenSER + FXO шлюз для выхода на АТС"
Отправлено Ded_MopozZz , 04-Май-07 10:59 
>Est', nazivaetsya - strip()
Ага... На wiki вижу...
>(chto-to s raskladkoy u menya)

:)