Per què una trucada SIP es registra per una VPN però no envia àudio
El registre i l’àudio segueixen camins diferents. Seguiu una trucada pel túnel per veure quines adreces pot fer servir el PBX i on s’atura realment l’RTP.
Un registre correcte no diu gairebé res sobre l’àudio. Un softphone pot mantenir una vinculació vàlida amb el PBX de l’oficina durant hores i, tot i així, lliurar silenci. El túnel només transporta els paquets que algú hi envia deliberadament, i una trucada fa servir tres camins separats: la vinculació, la configuració del diàleg i el flux RTP. Quan els separeu, la fallada recau en un camí i no en la paraula VPN.
Imagini un portàtil en una Wi-Fi domèstica que marca una extensió de l’oficina a través d’un túnel aprovat. El PBX autentica l’usuari, accepta el REGISTER i l’extensió apareix com a disponible, però la trucada es connecta amb un silenci absolut en una direcció.
El registre vincula un contacte, no un camí de mitjans
Una sol·licitud REGISTER demana al registrador que desi una correspondència entre una adreça de registre i un o més URIs de contacte. Aquesta correspondència respon una pregunta estreta sobre on s’ha d’enviar ara un diàleg nou. No diu res sobre on pertanyen els mitjans, i un registre acceptat no demostra que un INVITE posterior porti una adreça de mitjans abastable. Els registres també caduquen amb un temporitzador, de manera que un telèfon que deixa d’actualitzar-se perd trucades entrants mentre el seu túnel encara sembla sa. Vigileu la caducitat del contacte i no l’estat del túnel.
Quan el softphone se situa darrere del túnel, la capçalera de contacte pot portar una adreça privada. Un PBX que la reenvia a un altre extrem crea un diàleg adreçat a una xarxa a la qual el receptor no pot arribar. Establir rewrite_contact=yes a l’extrem PJSIP fa que el PBX substitueixi l’adreça d’origen que ha observat, i això sovint és la diferència entre un toc i un temps d’espera esgotat.
Què ofereix l’INVITE i qui el pot fer servir
Un INVITE amb un cos SDP proposa on vol rebre mitjans el qui truca: una adreça, un port i una llista de còdecs. El receptor respon amb la seva pròpia adreça i port, i després cada costat envia RTP al que l’altre ha proposat. Si el qui truca ha proposat una adreça 192.168.x.x que només existeix dins de la seva xarxa domèstica, el receptor no té on enviar àudio, per neta que hagi estat la senyalització. L’emmascarament reescriu les capçaleres IP quan els paquets surten d’un encaminador, però mai no reescriu el text dins d’un cos SDP.
Aquesta bretxa explica la clàssica trucada unidireccional: la senyalització funciona perquè els dos extrems poden arribar al PBX, i l’àudio falla perquè a un extrem se li ha dit que enviï a una adreça que només existeix darrere d’un altre 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 |
Qui transporta l’àudio és una decisió de configuració
La senyalització i els mitjans són papers separats. Un proxy pot romandre al camí de senyalització durant tota una trucada i no tocar mai un sol paquet RTP. Que el PBX es converteixi en repetidor de mitjans depèn de la configuració, no de la presència d’un túnel.
Amb mitjans directes, els extrems intercanvien ells mateixos l’RTP, cosa que funciona bé en una LAN i malament quan un costat se situa darrere d’un rang de ports estret.
Establir direct_media=no força el PBX a entrar al camí de mitjans perquè les dues potes acabin en una adreça que ell controla, intercanviant amplada de banda i processador per un adreçament previsible. Quan fa de repetidor, el PBX encara ha d’anunciar una adreça abastable. En un host amb diverses interfícies, external_media_address i external_signaling_address a pjsip.conf decideixen què apareix a l’SDP i a les capçaleres Via. Si els deixeu sense definir, el PBX pot oferir la seva adreça LAN a un qui truca l’únic camí del qual és el costat llunyà del túnel.
Seguiu cada direcció abans de tocar la configuració
Comenceu per la taula de sockets del PBX mentre una trucada està activa: ss -uanp | grep -E '5060|10000' mostra si els ports RTP estan vinculats i quina adreça local fan servir. Si no hi ha res vinculat al rang de mitjans, el repetidor no participa i els extrems parlen directament. Després captureu al costat del softphone amb tcpdump -ni any -s0 udp portrange 10000-20000 -w rtp.pcap. Els paquets sortints sense paquets entrants estrenyen el problema al camí de tornada o a l’adreça que s’ha dit a l’altre extrem que faci servir, i una captura buida vol dir que els mitjans no han arribat mai a la interfície del túnel. Una captura de senyalització amb sngrep respon l’altra meitat mostrant la línia de connexió SDP tal com es va enviar.
Compareu l’adreça d’aquesta línia de connexió amb l’adreça a la qual l’altre extrem pot encaminar realment. Aquesta única comparació resol la majoria d’informes d’àudio unidireccional més de pressa que qualsevol revisió de configuració.
El xifratge s’atura a la vora del túnel
SIP sobre TLS protegeix el salt de senyalització per al qual es va configurar, SRTP protegeix els mitjans quan tots dos extrems el negocien, i el túnel protegeix el trànsit entre els seus propis extrems. Cap d’aquests concedeix els altres. Una trucada xifrada dins del túnel pot sortir de la passarel·la en text clar cap al PBX, i això és una decisió de disseny, no un defecte.
Abans de tancar el tiquet, confirmeu tres coses per ordre: el registre és fresc, l’SDP porta una adreça a la qual l’altre extrem pot arribar i els paquets flueixen en tots dos sentits pels ports de mitjans. Si alguna d’aquestes és falsa, el túnel no és on viu el problema. Arregleu el camí que ha fallat i torneu a executar la mateixa captura per confirmar el canvi. Conservar les captures d’abans i després fa que el proper informe unidireccional sigui una comprovació de cinc minuts en lloc d’una tarda.