Имеется 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
