Неге SIP қоңырауы VPN арқылы тіркеледі, бірақ дыбыс жібермейді
Тіркелу мен дыбыс әртүрлі жолдармен жүреді. Бір қоңырауды туннельден өткізіп, PBX қандай мекенжайларды пайдалана алатынын және RTP шынымен қайда тоқтайтынын көріңіз.
Сәтті тіркелу дыбыс туралы ешнәрсе дерлік айтпайды. Бағдарламалық телефон офистік PBX-пен сағаттап жарамды байланыс ұстап, бәрібір тыныштық жібере алады. Туннель тек біреу әдейі жіберген пакеттерді ғана тасымалдайды, ал қоңырау үш бөлек жолды пайдаланады: байланыс, диалог орнату және RTP ағыны. Оларды бөлгенде, ақау VPN сөзіне емес, бір жолға түседі.
Үй Wi-Fi желісіндегі ноутбуктің мақұлданған туннель арқылы кеңсе ішкі нөмірін тергенін елестетіңіз. PBX пайдаланушыны аутентификациялайды, REGISTER-ді қабылдайды және ішкі нөмір қолжетімді болып көрінеді, бірақ қоңырау бір бағытта толық тыныштықпен қосылады.
Тіркелу контактіні байланыстырады, медиа жолын емес
REGISTER сұранысы тіркеушіден жазба мекенжайы мен бір немесе бірнеше контактілік URI арасындағы сәйкестікті сақтауды сұрайды. Бұл сәйкестік жаңа диалогты дәл қазір қайда жіберу керек деген тар сұраққа жауап береді. Ол медианың қайда тиесілі екені туралы ештеңе айтпайды, және қабылданған тіркелу кейінгі INVITE қолжетімді медиа мекенжайын алып жүретінін дәлелдемейді. Тіркелулер таймермен де аяқталады, сондықтан жаңартуды тоқтатқан телефон туннелі әлі сау көрінгенімен кіріс қоңырауларын жоғалтады. Туннель күйіне емес, контактінің мерзіміне назар аударыңыз.
Бағдарламалық телефон туннельдің артында болғанда, контакт тақырыбы жеке мекенжайды алып жүруі мүмкін. Оны басқа соңғы нүктеге жіберетін PBX шақырылған тарап жете алмайтын желіге бағытталған диалог жасайды. PJSIP соңғы нүктесінде rewrite_contact=yes параметрін қою PBX-ті байқаған бастапқы мекенжайымен алмастыруға мәжбүр етеді, және бұл көбінесе қоңырау мен уақыт біту арасындағы айырмашылық.
INVITE не ұсынады және оны кім пайдалана алады
SDP денесі бар INVITE қоңырау шалушының медианы қайда қабылдағысы келетінін ұсынады: мекенжай, порт және кодектер тізімі. Шақырылған тарап өз мекенжайы мен портымен жауап береді, содан кейін әр тарап екіншісі ұсынған жерге RTP жібереді. Егер шалушы тек үй желісінде ғана болатын 192.168.x.x мекенжайын ұсынса, сигнал қаншалықты таза болса да, шақырылған тараптың дыбыс жіберетін жері жоқ. Маскировка пакеттер маршрутизатордан шыққанда IP тақырыптарын қайта жазады, бірақ SDP денесінің ішіндегі мәтінді ешқашан қайта жазбайды.
Бұл алшақтық классикалық бір бағытты қоңырауды түсіндіреді: сигнал екі соңғы нүкте де PBX-ке жететіндіктен жұмыс істейді, ал дыбыс бір соңғы нүктеге тек басқа NAT артында болатын мекенжайға жіберу айтылғандықтан істен шығады.
| Path | Who picks the address | Typical failure |
|---|---|---|
| REGISTER | Softphone, rewritten by the registrar if configured | Binding expires or points at a private address |
| INVITE and SDP | Each endpoint in its own offer or answer | Offer names a media address nobody can route to |
| RTP | PBX relay policy or the two endpoints | Port range blocked, or no return path |
Дыбысты кім тасымалдайтыны конфигурация таңдауы
Сигнал мен медиа бөлек рөлдер. Прокси бүкіл қоңырау бойы сигнал жолында қалып, бірде-бір RTP пакетін ұстамауы мүмкін. PBX медиа релесіне айнала ма, бұл конфигурацияға байланысты, туннельдің болуына емес.
Тікелей медиа кезінде соңғы нүктелер RTP-ні өздері алмастырады, бұл бір LAN-да жақсы жұмыс істейді, ал бір жақ тар порт диапазонының артында болса, нашар.
direct_media=no параметрін қою PBX-ті медиа жолына итереді, осылайша екі аяқ та ол басқаратын мекенжайға аяқталады, бұл болжамды мекенжайлау үшін өткізу қабілеті мен процессорды айырбастайды. Ол реле жасағанда, PBX әлі де қолжетімді мекенжайды жариялауы керек. Көп желілі хостта pjsip.conf ішіндегі external_media_address және external_signaling_address SDP-де және Via тақырыптарында не көрінетінін анықтайды. Оларды орнатпай қалдырсаңыз, PBX өзінің LAN мекенжайын жалғыз жолы туннельдің алыс жағы болып табылатын шалушыға ұсынуы мүмкін.
Параметрлерге тимес бұрын әр бағытты қадағалаңыз
Қоңырау белсенді кезде PBX сокет кестесінен бастаңыз: ss -uanp | grep -E '5060|10000' RTP порттарының байланыстырылғанын және қандай жергілікті мекенжайды пайдаланатынын көрсетеді. Медиа диапазонында ештеңе байланыстырылмаған болса, реле қосылмаған және соңғы нүктелер тікелей сөйлеседі. Содан кейін бағдарламалық телефон жағында tcpdump -ni any -s0 udp portrange 10000-20000 -w rtp.pcap көмегімен түсіріңіз. Кіріс пакеттерсіз шығыс пакеттер мәселені қайтару жолына немесе алыс тарапқа пайдалану айтылған мекенжайға тарылтады, ал бос түсіру медианың туннель интерфейсіне мүлдем жетпегенін білдіреді. sngrep көмегімен сигнал түсірісі екінші жартысына SDP қосылым жолын жіберілген күйінде көрсету арқылы жауап береді.
Сол қосылым жолындағы мекенжайды алыс тарап шын мәнінде маршруттай алатын мекенжаймен салыстырыңыз. Осы бір салыстыру бір бағытты дыбыс туралы есептердің көпшілігін кез келген конфигурация тексерісінен тезірек шешеді.
Шифрлау туннельдің шетінде тоқтайды
TLS үстіндегі SIP ол конфигурацияланған сигнал секірісін қорғайды, SRTP екі жақ келіскенде медианы қорғайды, ал туннель өз соңғы нүктелері арасындағы трафикті қорғайды. Олардың ешқайсысы қалғандарын бермейді. Туннель ішінде шифрланған қоңырау шлюзден PBX-ке қарай ашық мәтінмен шығуы мүмкін, және бұл ақау емес, дизайн шешімі.
Тикетті жаппас бұрын үш нәрсені ретімен растаңыз: тіркелу жаңа, SDP алыс тарап жете алатын мекенжайды алып жүр және пакеттер медиа порттарында екі бағытта да ағып жатыр. Осылардың біреуі жалған болса, мәселе туннельде емес. Сәтсіз болған жолды түзетіңіз, содан кейін өзгерісті растау үшін сол түсірісті қайта іске қосыңыз. Алдыңғы және кейінгі түсірістерді сақтау келесі бір бағытты есепті тұтас түстен кейін емес, бес минуттық тексеріске айналдырады.