VIDEOCHAT  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

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

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

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

shaverdoff
Сообщения: 197
Зарегистрирован: 04 апр 2011, 15:39
Контактная информация:

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

Сообщение shaverdoff »

Всем коллегам доброго дня.
Имеется 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
Samael28
Сообщения: 1057
Зарегистрирован: 08 янв 2011, 18:32
Откуда: Киев
Контактная информация:

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

Сообщение Samael28 »

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

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

Сообщение shaverdoff »

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

что за $du?
я как то не правильно location использую??
Vlad1983
Сообщения: 4251
Зарегистрирован: 09 авг 2011, 11:51

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

Сообщение Vlad1983 »

смотрите что в заголовках SIP
ЛС: @rostel
shaverdoff
Сообщения: 197
Зарегистрирован: 04 апр 2011, 15:39
Контактная информация:

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

Сообщение shaverdoff »

#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 »

Код: Выделить всё

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, 21:22, всего редактировалось 1 раз.
shaverdoff
Сообщения: 197
Зарегистрирован: 04 апр 2011, 15:39
Контактная информация:

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

Сообщение shaverdoff »

а вот локальный клиент стучится

Код: Выделить всё

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 »

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

Код: Выделить всё

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.                                                                                                    
ded
Сообщения: 15621
Зарегистрирован: 26 авг 2010, 19:00

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

Сообщение ded »

Resume: на Астериске клиенты NAT обрабатываются правильно, а на OpenSIPS - неправильно.
shaverdoff
Сообщения: 197
Зарегистрирован: 04 апр 2011, 15:39
Контактная информация:

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

Сообщение shaverdoff »

как быть в той ситуации. поднять на опенсипсе натхелпер? или переходить на 2/0 версию? не ужели ни у кого подобных типов подключений и таких ситуаций не происходило?
Ответить
© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH