Имеется Opensips 1.6.2/Asterisk 11 cert2/MysqlDB/Openvpn Server. Всего 4 сервера.
Opensips Регистрир, Агент присутствия и сообщений/ Asterisk Транки и диалплан/ MysqlDB Самособой держит базы для Opensips и Asterisk.
Openvpn из названия - Вход в локальную сеть где все эти сип сервера крутятся.
При подключении пользователей через впн на Opensips нет возможности звонить друг другу на короткие номера. По дебагу сипа звонки уходят на айпиадрес точки подключения клиента а дальше тишина. Звонки на ружу через транки идут успешно. Если подключаться к сети напрямую (вайфай) то звонки между собой на внутренние короткие номера проходят. Если убрать из схемы Opensisp и оставить чистый астериск то через впн и напрямую внутренние звонки совершаются. и при дебаге сипа точно так же звонок уходит на айпиадрес точки подключения клиента.
Внутренние звонки обрабатывает и отправляет на asterisk через функцию rewritehostport opensips.
Серия номеров 5 значная
192.168.5.16 - opensisp
192.168.5.8 - asterisk
192.168.5.4 MysqlDB
conf opensips
Код: Выделить всё
route
{
######## количество прыжков
if (!mf_process_maxfwd_header("10"))
{
sl_send_reply("483","Too Many Hops");
exit;
}
######## слишком большое сообщение
if (msg:len >= 2048 )
{
sl_send_reply("513", "Message too big");
exit;
}
if (has_totag())
{
if (loose_route())
{
if (is_method("BYE"))
{
setflag(1); # do accounting ...
setflag(3); # ... even if the transaction fails
}
else if (is_method("INVITE"))
{
record_route();
}
route(1);
}
if ( is_method("ACK") )
{
if ( t_check_trans() )
{
t_relay();
exit;
}
else
{
exit;
}
}
sl_send_reply("404","Not here");
}
exit;
}
######## обработка отмены
# CANCEL processing
if (is_method("CANCEL"))
{
if (t_check_trans())
t_relay();
exit;
}
t_check_trans();
#initial requests
if (!method=="REGISTER")
record_route();
if (loose_route()) {
append_hf("P-hint: rr-enforced\r\n");
route(1);
}
if (!is_uri_host_local())
{
if(is_from_local())
{
append_hf("P-hint: outbound\r\n");
route(1);
}
else
{
sl_send_reply("403","Not here");
}
}
if (!uri==myself)
{
if(from_uri==myself) {
append_hf("P-hint: outbound\r\n");
route(1);
}
else
{
sl_send_reply("403","You are not here");
}
}
if (uri==myself)
{
######## Пуликация присутсвтия
if(is_method("PUBLISH|SUBSCRIBE"))
route(presence);
######## Авторизация по логину паролю взятые простым тесктом из базы и запись
if (method=="REGISTER")
{
# Uncomment this if you want to use digest authentication
if (!www_authorize("", "subscriber")) {
www_challenge("", "1");
exit;
}
if (!db_check_to())
{
sl_send_reply("403","forbidden auth ID");
}
if(!save("location"))
sl_reply_error();
exit;
}
if (is_method("INVITE"))
{
setflag(1); # do accounting
if (!uri=~"sip:\*\*")
{
route(toasterisk);
}
else
{
strip(2);
}
}
alias_db_lookup("dbaliases");
if (!lookup("location","m"))
{
switch ($retcode)
{
case -1:
case -3:
t_newtran();
t_reply("404", "Not Found");
exit;
case -2:
sl_send_reply("405","Method not Allowed");
exit;
}
}
append_hf("P-hint: usrloc applied\r\n");
} ### конец if (uri==myself) ########
######## обработка неполных адресов
if ($rU==NULL) {
sl_send_reply("484","Address Incomplite");
}
setflag(2);
t_on_failure("1");
route(1);
}
route[1]
{
if (!t_relay())
{
sl_reply_error();
}
exit;
}
# presence handling route
route[presence]
{
# absorb retransmissions
if (! t_newtran())
{
sl_reply_error();
exit;
}
#handle presence requests
if(is_method("PUBLISH"))
{
if($hdr(Sender)!= NULL)
{
handle_publish("$hdr(Sender)");
}
else
{
handle_publish();
#t_release();
}
}
else
if(is_method("SUBSCRIBE"))
{
handle_subscribe();
#t_release();
}
exit;
}
# asterisk services
route[toasterisk]
{
xlog("forwarding to asterisk\n");
# to asterisk
rewritehostport("192.168.5.8:5060");
if (!t_relay())
{
sl_reply_error();
}
exit;
}
failure_route[1]
{
if (t_was_cancelled())
{
exit;
}
# if the failure code is "408 - timeout" or "486 - busy",
# forward the calls to voicemail recording
if (t_check_status("486|408"))
{
xlog("L_INFO", "failure_route - call forward to Voice Mail - M=$rm RURI=$ru F=$fu T=$tu IP=$si ID=$ci\n");
rewritehostport("192.168.5.8:5060");
#prefix("VMR_");
#t_relay();
exit;
}
}
конфиг asterisk
Код: Выделить всё
exten => _1XXXX,1,Dial(SIP/**${EXTEN}@192.168.5.16,25)
same => n,Macro(voicemail,${$EXTEN}@jewy)
same => n,HangUp