Proč se SIP hovor zaregistruje přes VPN, ale neposílá zvuk
Registrace a zvuk jdou různými cestami. Projděte jeden hovor tunelem a zjistěte, které adresy může PBX použít a kde se RTP skutečně zastaví.
Úspěšná registrace vám o zvuku neřekne téměř nic. Softphone může hodiny udržovat platnou vazbu s kancelářským PBX a přesto přenášet ticho. Tunel nese jen pakety, které do něj někdo záměrně pošle, a hovor používá tři oddělené cesty: vazbu, navázání dialogu a proud RTP. Jakmile je oddělíte, porucha padne na jednu cestu místo na slovo VPN.
Představte si notebook na domácí Wi-Fi, který vytáčí kancelářskou linku přes schválený tunel. PBX ověří uživatele, přijme REGISTER a linka se zobrazí jako dostupná, přesto se hovor spojí s mrtvým tichem v jednom směru.
Registrace váže kontakt, ne cestu pro média
Požadavek REGISTER žádá registrátor, aby uložil mapování mezi adresou záznamu a jedním nebo více kontaktními URI. Toto mapování odpovídá na úzkou otázku, kam se má nový dialog právě teď poslat. Neříká nic o tom, kam patří média, a přijatá registrace nedokazuje, že pozdější INVITE nese dosažitelnou adresu pro média. Registrace také vyprší podle časovače, takže telefon, který přestane obnovovat, ztrácí příchozí hovory, zatímco jeho tunel stále vypadá zdravě. Sledujte expiraci kontaktu, ne stav tunelu.
Když softphone sedí za tunelem, může hlavička kontaktu nést privátní adresu. PBX, který ji přepošle jinému koncovému bodu, vytvoří dialog namířený do sítě, kam volaný nemůže dosáhnout. Nastavení rewrite_contact=yes na koncovém bodu PJSIP přiměje PBX nahradit pozorovanou zdrojovou adresu, což je často rozdíl mezi zvoněním a vypršením.
Co INVITE nabízí a kdo ho může použít
INVITE s tělem SDP navrhuje, kde chce volající přijímat média: adresu, port a seznam kodeků. Volaný odpovídá vlastní adresou a portem a každá strana pak posílá RTP tomu, co navrhla druhá. Pokud volající navrhl adresu 192.168.x.x, která existuje jen v jeho domácí síti, volaný nemá kam zvuk posílat, ať byla signalizace sebelépe čistá. Maskování přepisuje IP hlavičky, když pakety opouštějí router, ale nikdy nepřepisuje text uvnitř těla SDP.
Tato mezera vysvětluje klasický jednosměrný hovor: signalizace funguje, protože oba koncové body dosáhnou na PBX, a zvuk selhává, protože jednomu koncovému bodu bylo řečeno, aby posílal na adresu, která existuje jen za jiným 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 |
Kdo nese zvuk, je volba konfigurace
Signalizace a média jsou oddělené role. Proxy může zůstat na cestě signalizace celý hovor a nikdy se nedotknout jediného paketu RTP. Zda se PBX stane mediálním relé, závisí na konfiguraci, ne na přítomnosti tunelu.
Při přímých médiích si koncové body vyměňují RTP samy, což funguje dobře v jedné LAN a špatně, když jedna strana sedí za úzkým rozsahem portů.
Nastavení direct_media=no vtlačí PBX do cesty médií, takže obě nohy končí na adrese, kterou ovládá, výměnou za předvídatelné adresování a za cenu šířky pásma a procesoru. Když přeposílá, musí PBX stále inzerovat dosažitelnou adresu. Na hostiteli s více rozhraními external_media_address a external_signaling_address v pjsip.conf určují, co se objeví v SDP a v hlavičkách Via. Ponecháte-li je nenastavené, PBX může nabídnout svou LAN adresu volajícímu, jehož jediná cesta je vzdálená strana tunelu.
Projděte každý směr, než sáhnete na nastavení
Začněte tabulkou socketů na PBX, dokud hovor běží: ss -uanp | grep -E '5060|10000' ukáže, zda jsou porty RTP svázané a kterou místní adresu používají. Pokud v mediálním rozsahu není nic svázáno, relé není zapojené a koncové body mluví přímo. Potom zachyťte na straně softphonu pomocí tcpdump -ni any -s0 udp portrange 10000-20000 -w rtp.pcap. Odchozí pakety bez příchozích zužují problém na zpáteční cestu nebo na adresu, kterou má vzdálená strana použít, a prázdný záznam znamená, že média vůbec nedosáhla rozhraní tunelu. Zachycení signalizace pomocí sngrep odpovídá na druhou polovinu tím, že ukáže řádek spojení SDP tak, jak byl odeslán.
Porovnejte adresu v tomto řádku spojení s adresou, na kterou vzdálená strana skutečně umí směrovat. Toto jediné srovnání vyřeší většinu hlášení o jednosměrném zvuku rychleji než jakákoli revize konfigurace.
Šifrování končí na okraji tunelu
SIP přes TLS chrání signální skok, pro který byl nastaven, SRTP chrání média, když se na tom oba konce dohodnou, a tunel chrání provoz mezi svými koncovými body. Žádné z toho nedává to ostatní. Hovor šifrovaný uvnitř tunelu může opustit bránu v otevřeném textu směrem k PBX, což je rozhodnutí o návrhu, ne závada.
Než zavřete tiket, potvrďte tři věci v pořadí: registrace je čerstvá, SDP nese adresu, na kterou vzdálená strana dosáhne, a pakety proudí oběma směry na mediálních portech. Pokud je některá z toho nepravdivá, problém není v tunelu. Opravte cestu, která selhala, a potom zopakujte stejné zachycení, abyste změnu potvrdili. Uchování zachycení před a po dělá z příštího hlášení o jednosměrném zvuku pětiminutovou kontrolu místo celého odpoledne.