ВидеоКонф(ВКС)  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

Не проходят внутренние звонки между пирами Opensips

Использование и настройка других открытых VoIP PBX

Модераторы: april22, Zavr2008

Не проходят внутренние звонки между пирами Opensips

Сообщение shaverdoff » 28 фев 2015, 11:42

Всем коллегам доброго дня.
Имеется 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
shaverdoff
 
Сообщений: 197
Зарегистрирован: 04 апр 2011, 15:39

Re: Не проходят внутренние звонки между пирами Opensips

Сообщение Samael28 » 01 мар 2015, 13:15

Лучше перенаправлять через $du.
Потом смотрите... У Вас все юзеры имеют адрес <username>@<opensips>. Но реальные адреса же другие. Почитайте, что такое usrloc и registrar, точнее функция location.
Вообще, при работе с opensips рекомендую вооружаться wireshark и смотреть-смотреть трейсы. Ну и увешать скрипт логированием.
Мой профайл на Upwork
Samael28
 
Сообщений: 1057
Зарегистрирован: 08 янв 2011, 19:32
Откуда: Киев

Re: Не проходят внутренние звонки между пирами Opensips

Сообщение shaverdoff » 01 мар 2015, 20:17

странность то вся в том что в локальной сети если клиенты то внутренние звонки осуществляются..... а через впн нет

что за $du?
я как то не правильно location использую??
shaverdoff
 
Сообщений: 197
Зарегистрирован: 04 апр 2011, 15:39

Re: Не проходят внутренние звонки между пирами Opensips

Сообщение Vlad1983 » 01 мар 2015, 21:07

смотрите что в заголовках SIP
ЛС: @rostel
Vlad1983
 
Сообщений: 4251
Зарегистрирован: 09 авг 2011, 11:51

Re: Не проходят внутренние звонки между пирами Opensips

Сообщение shaverdoff » 20 июн 2015, 21:18

#osipsconsole вот что говорит..... первый юзер 10000 с адресом точки впн... а должен быть айпи адрес впн сервера... не пойму как так получается.... если обычный астериск показывает адреса впн сервера при sip show peers

Domain:: location table=512 records=2
AOR:: 10000
Contact:: sip:10000@10.10.200.14:60119;ob Q=
Expires:: 889
Callid:: PRZv-i9gfuOv0cZ3KsjQFkmGNkPVI8pX
Cseq:: 49126
User-agent:: Bria iOS 3.3.4
State:: CS_DIRTY
Flags:: 0
Cflag:: 0
Socket:: udp:192.168.5.16:5060
Methods:: 8063
AOR:: 10001
Contact:: sip:10001@192.168.5.100:50884;ob Q=
Expires:: 575
Callid:: gJ8zxmAqh91u2-GjGG8MIMTgfsApwWOt
Cseq:: 1860
User-agent:: Bria iOS 3.3.4
State:: CS_SYNC
Flags:: 0
Cflag:: 0
Socket:: udp:192.168.5.16:5060
Methods:: 8063
shaverdoff
 
Сообщений: 197
Зарегистрирован: 04 апр 2011, 15:39

Re: Не проходят внутренние звонки между пирами Opensips

Сообщение shaverdoff » 20 июн 2015, 22:20

Код: выделить все
U 192.168.5.31:14232 -> 192.168.5.16:5060
SUBSCRIBE sip:10000@opensips.jewy.me SIP/2.0.
Via: SIP/2.0/UDP 10.10.200.14:58649;rport;branch=z9hG4bKPjVTb6LSMvoWHB2yOE2McCO90UChvFzrGC.
Max-Forwards: 70.
From: "Gerasim" <sip:10000@opensips.jewy.me>;tag=Tda6dROCVytF43LuNwlwXUgJSo702bd9.
To: "Gerasim" <sip:10000@opensips.jewy.me>.
Contact: "Gerasim" <sip:10000@10.10.200.14:58649;ob>.
Call-ID: svFcTaNCjkP2gKo88kJCHnBIn-BXeQfn.
CSeq: 1558 SUBSCRIBE.
Event: message-summary.
Expires: 3600.
Supported: replaces, 100rel, timer, norefersub.
Accept: application/simple-message-summary.
Allow-Events: presence, message-summary, refer.
User-Agent: Bria iOS 3.3.4.
Content-Length:  0.


почему обращение идет с нужного айпи а в поле VIA: SIP идет айпи адрес точки впн? куда ж еще капнуть то можно о usrloca почитал.. сайт опенсипс не изобилует подробностями.... модуля location вообще в описании не нашел 192.168.5.31 это локальный адрес впн сервера который наружу смотрит :(((
Последний раз редактировалось shaverdoff 20 июн 2015, 22:22, всего редактировалось 1 раз.
shaverdoff
 
Сообщений: 197
Зарегистрирован: 04 апр 2011, 15:39

Re: Не проходят внутренние звонки между пирами Opensips

Сообщение shaverdoff » 20 июн 2015, 22:21

а вот локальный клиент стучится
Код: выделить все
U 192.168.5.100:50884 -> 192.168.5.16:5060
SUBSCRIBE sip:10001@opensips.jewy.me SIP/2.0.
Via: SIP/2.0/UDP 192.168.5.100:50884;rport;branch=z9hG4bKPj815M2yncTvyilFutcAggA4c6IeQ2Bb5y.
Max-Forwards: 70.
From: "Gerasim" <sip:10001@opensips.jewy.me>;tag=lMG28.L1syDQrrlP0j1iA5UHzKf2QDrN.
To: "Gerasim" <sip:10001@opensips.jewy.me>.
Contact: "Gerasim" <sip:10001@192.168.5.100:50884;ob>.
Call-ID: 04OcG1zGmBl268KH2t71qvk3fDn7a6Rn.
CSeq: 11935 SUBSCRIBE.
Event: message-summary.
Expires: 3600.
Supported: replaces, 100rel, timer, norefersub.
Accept: application/simple-message-summary.
Allow-Events: presence, message-summary, refer.
User-Agent: Bria iOS 3.3.4.
Content-Length:  0.
shaverdoff
 
Сообщений: 197
Зарегистрирован: 04 апр 2011, 15:39

Re: Не проходят внутренние звонки между пирами Opensips

Сообщение shaverdoff » 20 июн 2015, 22:42

вот выхлоп обычной астериск и двух клиентов - так же один локально другой по опенвпн сидит и цепляется... звонки туда обратно идут.

Код: выделить все
U 192.168.5.31:52203 -> 192.168.5.7:5060                                                                               
REGISTER sip:sip.jewy.me SIP/2.0.                                                                                     
Via: SIP/2.0/UDP 10.10.200.14:58649;rport;branch=z9hG4bKPjJbYL9U9QpA97UuNUf0MCCo8vRkcBmRHZ.                           
Max-Forwards: 70.                                                                                                     
From: "gerasim" <sip:1000@sip.jewy.me>;tag=YGiLWt68EMpLjyLKTVGb-vuxO3mglLZo.                                           
To: "gerasim" <sip:1000@sip.jewy.me>.                                                                                 
Call-ID: UxC..o3ZNNnR-h0Y8BW3u-g4x6l4YooG.                                                                             
CSeq: 29886 REGISTER.                                                                                                 
User-Agent: Bria iOS 3.3.4.                                                                                           
Supported: outbound, path.                                                                                             
Contact: "gerasim" <sip:1000@10.10.200.14:58649;ob>;reg-id=1;+sip.instance="<urn:uuid:67D3EDBD59AF84F60A0D1A49366369F4E
Expires: 900.                                                                                                         
Allow: PRACK, INVITE, ACK, BYE, CANCEL, UPDATE, INFO, SUBSCRIBE, NOTIFY, REFER, MESSAGE, OPTIONS.                     
Content-Length:  0.


Код: выделить все
U 192.168.5.100:50884 -> 192.168.5.7:5060                                                                             
REGISTER sip:sip.jewy.me SIP/2.0.                                                                                     
Via: SIP/2.0/UDP 192.168.5.100:50884;rport;branch=z9hG4bKPjSTqIhzoCdZ05MY61dF3IQszDWS.oVVMr.                           
Max-Forwards: 70.                                                                                                     
From: <sip:1003@sip.jewy.me>;tag=MSklStH7CV8AUTZQvV9eru1AcB5xEMZd.                                                     
To: <sip:1003@sip.jewy.me>.                                                                                           
Call-ID: J3QTMOECTSUZigdQLCCLD5khwQIbSg.z.                                                                             
CSeq: 10182 REGISTER.                                                                                                 
User-Agent: Bria iOS 3.3.4.                                                                                           
Supported: outbound, path.                                                                                             
Contact: <sip:1003@192.168.5.100:50884;ob>;reg-id=1;+sip.instance="<urn:uuid:30732414-CF28-412D-A87B-3B2918B4FA39>".   
Expires: 900.                                                                                                         
Allow: PRACK, INVITE, ACK, BYE, CANCEL, UPDATE, INFO, SUBSCRIBE, NOTIFY, REFER, MESSAGE, OPTIONS.                     
Content-Length:  0.                                                                                                   
shaverdoff
 
Сообщений: 197
Зарегистрирован: 04 апр 2011, 15:39

Re: Не проходят внутренние звонки между пирами Opensips

Сообщение ded » 20 июн 2015, 22:48

Resume: на Астериске клиенты NAT обрабатываются правильно, а на OpenSIPS - неправильно.
ded
 
Сообщений: 15803
Зарегистрирован: 26 авг 2010, 19:00

Re: Не проходят внутренние звонки между пирами Opensips

Сообщение shaverdoff » 21 июн 2015, 00:23

как быть в той ситуации. поднять на опенсипсе натхелпер? или переходить на 2/0 версию? не ужели ни у кого подобных типов подключений и таких ситуаций не происходило?
shaverdoff
 
Сообщений: 197
Зарегистрирован: 04 апр 2011, 15:39

След.

Вернуться в FreeSwitch, SER, Yate и другие

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10

© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH