SIP zəngi VPN üzərində qeydiyyatdan keçir, amma niyə səs göndərmir
Qeydiyyat və səs fərqli yollar tutur. Bir zəngi tuneldən keçirərək PBX-in hansı ünvanlardan istifadə edə bildiyini və RTP-nin harada dayandığını izləyin.
Uğurlu qeydiyyat səs barədə demək olar ki, heç nə demir. Proqram telefonu saatlarla ofis PBX-i ilə etibarlı rabitə saxlaya və yenə də səssizlik verə bilər. Tunel yalnız kiminsə qəsdən ona göndərdiyi paketləri daşıyır, zəng isə üç ayrı yoldan istifadə edir: rabitə, dialoq qurulması və RTP axını. Bunları ayırdıqdan sonra nasazlıq VPN sözünün deyil, bir yolun üzərinə düşür.
Ev Wi-Fi şəbəkəsində oturan noutbuku təsəvvür edin: təsdiqlənmiş tunel vasitəsilə ofis nömrəsini yığır. PBX istifadəçini doğrular, REGISTER-i qəbul edir və nömrə mövcud görünür, amma zəng bir istiqamətdə səssiz bağlanır.
Qeydiyyat media yolunu deyil, kontaktı bağlayır
REGISTER sorğusu qeydiyyatçıdan ünvan-qeyd ilə bir və ya bir neçə kontakt URI arasında uyğunluğu saxlamağı xahiş edir. Bu uyğunluq yeni dialoqun indi hara göndərilməsi ilə bağlı dar bir suala cavab verir. Media ilə heç bir əlaqəsi yoxdur və qəbul edilmiş qeydiyyat sonrakı INVITE-in əlçatan media ünvanı daşıdığını sübut etmir. Qeydiyyatlar taymerlə bitir, ona görə yeniləməni dayandıran telefon gələn zəngləri itirir, tunel isə hələ də sağlam görünür. Tunel statusuna deyil, kontaktın bitmə müddətinə baxın.
Proqram telefonu tunelin arxasında olduqda kontakt başlığı şəxsi ünvan daşıya bilər. Onu başqa son nöqtəyə yönəldən PBX, çağırılan tərəfin çata bilmədiyi şəbəkəyə yönəlmiş dialoq yaradır. PJSIP son nöqtəsində rewrite_contact=yes ayarını vermək PBX-in müşahidə etdiyi mənbə ünvanını əvəz etməsinə səbəb olur və bu, çox vaxt zəng səsi ilə fasilə arasındakı fərqdir.
INVITE nə təklif edir və kim ondan istifadə edə bilər
SDP gövdəli INVITE zəng edənin medianı harada almaq istədiyini təklif edir: ünvan, port və kodek siyahısı. Çağırılan tərəf öz ünvanı və portu ilə cavab verir, sonra hər tərəf digərinin təklif etdiyinə RTP göndərir. Əgər zəng edən yalnız ev şəbəkəsində mövcud olan 192.168.x.x ünvanını təklif edibsə, siqnal nə qədər təmiz olsa da, çağırılan tərəfin səs göndərəcəyi yer yoxdur. Maskaradlaşdırma paketlər marşrutlaşdırıcıdan çıxarkən IP başlıqlarını yenidən yazır, lakin SDP gövdəsindəki mətni heç vaxt yenidən yazmır.
Bu boşluq klassik birtərəfli zəngi izah edir: siqnal işləyir, çünki hər iki son nöqtə PBX-ə çata bilir, səs isə uğursuz olur, çünki bir son nöqtəyə yalnız başqa NAT-ın arxasında mövcud olan ünvana göndərmək tapşırılıb.
| 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 |
Səsi kimin daşıması konfiqurasiya seçimidir
Siqnal və media ayrı rollardır. Proxy bütün zəng boyu siqnal yolunda qala və bir dənə də RTP paketinə toxunmaya bilər. PBX-in media rölesinə çevrilməsi tunelin varlığından deyil, konfiqurasiyadan asılıdır.
Birbaşa media ilə son nöqtələr RTP-ni özləri mübadilə edir; bu bir LAN-da yaxşı işləyir, bir tərəf dar port aralığının arxasında olduqda isə pis.
direct_media=no ayarı PBX-i media yoluna məcbur edir ki, hər iki qol onun nəzarət etdiyi ünvanda bitsin; bu, proqnozlaşdırıla bilən ünvanlaşdırma üçün bant genişliyi və prosessoru dəyişir. Rölə keçəndə PBX yenə də əlçatan ünvan elan etməlidir. Çoxşəbəkəli hostda external_media_address və external_signaling_address pjsip.conf faylında SDP-də və Via başlıqlarında nə görünəcəyini müəyyən edir. Onları təyin etməsəniz, PBX yeganə yolu tunelin uzaq tərəfi olan zəng edənə yerli şəbəkə ünvanını təklif edə bilər.
Ayaralara toxunmadan əvvəl hər istiqaməti izləyin
Zəng davam edərkən PBX-də soket cədvəlindən başlayın: ss -uanp | grep -E '5060|10000' RTP portlarının bağlı olub-olmadığını və hansı yerli ünvandan istifadə etdiyini göstərir. Media aralığında heç nə bağlı deyilsə, röle iştirak etmir və son nöqtələr birbaşa danışır. Sonra proqram telefonu tərəfində tcpdump -ni any -s0 udp portrange 10000-20000 -w rtp.pcap ilə qeyd aparın. Gələn paket olmadan gedən paketlər problemi qayıdış yoluna və ya uzaq tərəfə istifadə etməsi deyilən ünvana daraldır, boş qeyd isə medianın tunel interfeysinə heç çatmadığını göstərir. sngrep ilə siqnal qeydi digər yarısını SDP bağlantı sətrini göndərildiyi kimi göstərməklə cavablandırır.
Həmin bağlantı sətrindəki ünvanı uzaq tərəfin həqiqətən marşrutlaşa bildiyi ünvanla müqayisə edin. Bu tək müqayisə birtərəfli səs hesabatlarının çoxunu istənilən konfiqurasiya baxışından tez həll edir.
Şifrələmə tunelin kənarında dayanır
TLS üzərindən SIP konfiqurasiya olunduğu siqnal addımını, SRTP hər iki tərəf razılaşdıqda medianı, tunel isə öz son nöqtələri arasındakı trafiki qoruyur. Bunların heç biri digərini vermir. Tunel içində şifrələnmiş zəng şlüzü PBX-ə doğru açıq mətnlə tərk edə bilər və bu, qüsur deyil, dizayn qərarıdır.
Bileti bağlamazdan əvvəl üç şeyi ardıcıllıqla təsdiqləyin: qeydiyyat təzədir, SDP uzaq tərəfin çata bildiyi ünvanı daşıyır və paketlər media portlarında hər iki istiqamətdə axır. Bunlardan hər hansı biri yanlışdırsa, problem tuneldə deyil. Uğursuz olan yolu düzəldin, sonra dəyişikliyi təsdiqləmək üçün eyni qeydi təkrarlayın. Əvvəlki və sonrakı qeydləri saxlamaq növbəti birtərəfli hesabatı bütün günorta yerinə beş dəqiqəlik yoxlamaya çevirir.