Mengapa panggilan SIP berdaftar melalui VPN tetapi tidak menghantar audio
Pendaftaran dan audio mengikut laluan berbeza. Ikuti satu panggilan melalui terowong untuk melihat alamat mana yang boleh digunakan oleh PBX dan di mana RTP benar-benar berhenti.
Pendaftaran yang berjaya hampir tidak memberitahu apa-apa tentang audio. Softphone boleh mengekalkan pengikatan yang sah dengan PBX pejabat selama berjam-jam dan masih menghantar kesenyapan. Terowong hanya membawa paket yang sengaja dihantar oleh seseorang ke dalamnya, dan panggilan menggunakan tiga laluan berasingan: pengikatan, persediaan dialog dan aliran RTP. Sebaik anda memisahkannya, kegagalan jatuh pada satu laluan dan bukan pada perkataan VPN.
Bayangkan sebuah komputer riba di Wi-Fi rumah mendail sambungan pejabat melalui terowong yang diluluskan. PBX mengesahkan pengguna, menerima REGISTER, dan sambungan itu kelihatan tersedia, namun panggilan bersambung dengan kesenyapan total dalam satu arah.
Pendaftaran mengikat kenalan, bukan laluan media
Permintaan REGISTER meminta pendaftar menyimpan pemetaan antara alamat rakaman dan satu atau lebih URI kenalan. Pemetaan itu menjawab soalan sempit tentang ke mana dialog baharu perlu dihantar sekarang. Ia tidak berkata apa-apa tentang di mana media tergolong, dan pendaftaran yang diterima tidak membuktikan bahawa INVITE kemudiannya membawa alamat media yang boleh dicapai. Pendaftaran juga luput mengikut pemasa, jadi telefon yang berhenti menyegarkan kehilangan panggilan masuk sedangkan terowongnya masih kelihatan sihat. Perhatikan luput kenalan dan bukan status terowong.
Apabila softphone berada di belakang terowong, pengepala kenalan mungkin membawa alamat peribadi. PBX yang memajukannya ke titik akhir lain mencipta dialog yang menuju ke rangkaian yang tidak dapat dicapai oleh pihak yang dipanggil. Menetapkan rewrite_contact=yes pada titik akhir PJSIP menyebabkan PBX menggantikan alamat sumber yang diperhatikannya, dan itulah sering kali perbezaan antara deringan dan tamat masa.
Apa yang ditawarkan INVITE dan siapa yang boleh menggunakannya
INVITE dengan badan SDP mencadangkan tempat pemanggil mahu menerima media: alamat, port dan senarai codec. Pihak yang dipanggil menjawab dengan alamat dan portnya sendiri, kemudian setiap pihak menghantar RTP ke tempat yang dicadangkan oleh pihak lain. Jika pemanggil mencadangkan alamat 192.168.x.x yang hanya wujud dalam rangkaian rumahnya, pihak yang dipanggil tiada tempat untuk menghantar audio, sesuci mana pun isyaratnya. Penyamaran menulis semula pengepala IP apabila paket meninggalkan penghala, tetapi ia tidak pernah menulis semula teks di dalam badan SDP.
Jurang itulah yang menerangkan panggilan sehala klasik: isyarat berfungsi kerana kedua-dua titik akhir dapat mencapai PBX, dan audio gagal kerana satu titik akhir diberitahu supaya menghantar ke alamat yang hanya wujud di belakang NAT yang lain.
| 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 |
Siapa yang membawa audio ialah pilihan konfigurasi
Isyarat dan media ialah peranan berasingan. Proksi boleh kekal di laluan isyarat sepanjang panggilan dan tidak pernah menyentuh satu paket RTP pun. Sama ada PBX menjadi geganti media bergantung pada konfigurasi, bukan pada kehadiran terowong.
Dengan media terus, titik akhir bertukar RTP sendiri, yang berfungsi baik pada satu LAN dan buruk apabila satu pihak berada di belakang julat port yang sempit.
Menetapkan direct_media=no memaksa PBX masuk ke laluan media supaya kedua-dua kaki berakhir pada alamat yang dikawalnya, menukar lebar jalur dan CPU dengan pengalamatan yang boleh diramal. Apabila ia mengganti, PBX masih perlu mengumumkan alamat yang boleh dicapai. Pada hos berbilang rangkaian, external_media_address dan external_signaling_address dalam pjsip.conf menentukan apa yang muncul dalam SDP dan dalam pengepala Via. Biarkan ia tidak ditetapkan dan PBX mungkin menawarkan alamat LAN-nya kepada pemanggil yang satu-satunya laluan ialah bahagian jauh terowong.
Jejaki setiap arah sebelum menyentuh tetapan
Mulakan dengan jadual soket pada PBX semasa panggilan aktif: ss -uanp | grep -E '5060|10000' menunjukkan sama ada port RTP terikat dan alamat tempatan mana yang digunakan. Jika tiada apa-apa terikat dalam julat media, geganti tidak aktif dan titik akhir bercakap terus. Kemudian tangkap di bahagian softphone dengan tcpdump -ni any -s0 udp portrange 10000-20000 -w rtp.pcap. Paket keluar tanpa paket masuk menyempitkan masalah kepada laluan balik atau alamat yang diberitahu kepada pihak jauh untuk digunakan, dan tangkapan kosong bermakna media tidak pernah sampai ke antara muka terowong. Tangkapan isyarat dengan sngrep menjawab separuh lagi dengan menunjukkan baris sambungan SDP seperti yang dihantar.
Bandingkan alamat dalam baris sambungan itu dengan alamat yang benar-benar boleh dilalui oleh pihak jauh. Perbandingan tunggal itu menyelesaikan kebanyakan laporan audio sehala lebih cepat daripada mana-mana semakan konfigurasi.
Penyulitan berhenti di tepi terowong
SIP melalui TLS melindungi lonjakan isyarat yang dikonfigurasikannya, SRTP melindungi media apabila kedua-dua hujung berunding, dan terowong melindungi trafik antara titik akhirnya sendiri. Tiada satu pun memberikan yang lain. Panggilan yang disulitkan di dalam terowong boleh meninggalkan gerbang dalam teks biasa menuju PBX, dan itu keputusan reka bentuk, bukan kecacatan.
Sebelum menutup tiket, sahkan tiga perkara mengikut urutan: pendaftaran masih segar, SDP membawa alamat yang boleh dicapai oleh pihak jauh, dan paket mengalir kedua-dua arah pada port media. Jika salah satu daripadanya palsu, terowong bukan tempat masalah itu berada. Betulkan laluan yang gagal, kemudian jalankan semula tangkapan yang sama untuk mengesahkan perubahan. Menyimpan tangkapan sebelum dan selepas menjadikan laporan sehala seterusnya pemeriksaan lima minit dan bukannya satu petang.