Zakaj se klic SIP registrira prek VPN, a ne pošilja zvoka
Registracija in zvok gresta po različnih poteh. Sledite enemu klicu skozi tunel, da vidite, katere naslove lahko uporabi PBX in kje se RTP v resnici ustavi.
Uspešna registracija skoraj nič ne pove o zvoku. Softphone lahko ure in ure ohranja veljavno navezavo s pisarniškim PBX in vseeno pošilja tišino. Tunel prenaša le pakete, ki jih nekdo namerno pošlje vanj, klic pa uporablja tri ločene poti: navezavo, vzpostavitev dialoga in tok RTP. Ko jih ločite, napaka pade na eno pot in ne na besedo VPN.
Predstavljajte si prenosnik na domačem Wi-Fi, ki kliče pisarniški interni priključek skozi odobren tunel. PBX overi uporabnika, sprejme REGISTER in priključek se prikaže kot dosegljiv, vendar se klic poveže s popolno tišino v eni smeri.
Registracija veže stik, ne poti medijev
Zahteva REGISTER prosi registrarja, da shrani preslikavo med naslovom zapisa in enim ali več kontaktnimi URI-ji. Ta preslikava odgovarja na ozko vprašanje, kam je treba novi dialog prav zdaj poslati. Ne pove ničesar o tem, kam sodijo mediji, in sprejeta registracija ne dokazuje, da poznejši INVITE nosi dosegljiv naslov medijev. Registracije tudi potečejo po časovniku, zato telefon, ki preneha osveževati, izgublja dohodne klice, medtem ko njegov tunel še vedno izgleda zdrav. Spremljajte potek stika in ne stanja tunela.
Ko je softphone za tunelom, lahko glava stika nosi zasebni naslov. PBX, ki jo posreduje drugi končni točki, ustvari dialog, usmerjen v omrežje, do katerega klicani ne more priti. Nastavitev rewrite_contact=yes na končni točki PJSIP povzroči, da PBX nadomesti zaznani izvorni naslov, in to je pogosto razlika med zvonjenjem in potekom časa.
Kaj ponuja INVITE in kdo ga lahko uporabi
INVITE s telesom SDP predlaga, kje želi klicatelj prejemati medije: naslov, vrata in seznam kodekov. Klicani odgovori z lastnim naslovom in vrati, nato pa vsaka stran pošlje RTP tja, kar je predlagala druga. Če je klicatelj predlagal naslov 192.168.x.x, ki obstaja le v njegovem domačem omrežju, klicani nima kam poslati zvoka, ne glede na to, kako čista je bila signalizacija. Maskiranje prepiše glave IP, ko paketi zapustijo usmerjevalnik, nikoli pa ne prepiše besedila znotraj telesa SDP.
Ta vrzel pojasnjuje klasičen enosmerni klic: signalizacija deluje, ker oba končna dela dosežeta PBX, zvok pa odpove, ker je bilo enemu končnemu delu rečeno, naj pošilja na naslov, ki obstaja le za drugim 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 nosi zvok, je izbira konfiguracije
Signalizacija in mediji so ločene vloge. Posrednik lahko ostane na poti signalizacije ves klic in se nikoli ne dotakne niti enega paketa RTP. Ali PBX postane medijski posredovalnik, je odvisno od konfiguracije, ne od prisotnosti tunela.
Pri neposrednih medijih končna dela sama izmenjujeta RTP, kar dobro deluje v enem LAN in slabo, ko je ena stran za ozkim razponom vrat.
Nastavitev direct_media=no potisne PBX na pot medijev, da se oba kraka končata na naslovu, ki ga nadzoruje, in v zameno za predvidljivo naslavljanje žrtvuje pasovno širino ter procesor. Ko posreduje, mora PBX še vedno oglaševati dosegljiv naslov. Na gostitelju z več omrežji external_media_address in external_signaling_address v pjsip.conf določata, kaj se pojavi v SDP in v glavah Via. Če ju pustite nenastavljena, lahko PBX ponudi svoj naslov LAN klicatelju, katerega edina pot je oddaljena stran tunela.
Sledite vsaki smeri, preden se dotaknete nastavitev
Začnite s tabelo vtičnic na PBX, medtem ko je klic aktiven: ss -uanp | grep -E '5060|10000' pokaže, ali so vrata RTP vezana in kateri lokalni naslov uporabljajo. Če v obsegu medijev ni ničesar vezanega, posredovalnik ni vključen in končna dela se pogovarjata neposredno. Nato zajemite na strani softphona z tcpdump -ni any -s0 udp portrange 10000-20000 -w rtp.pcap. Odhodni paketi brez dohodnih zožijo težavo na povratno pot ali na naslov, ki ga je oddaljena stran dobila v uporabo, prazen zajem pa pomeni, da mediji nikoli niso dosegli vmesnika tunela. Zajem signalizacije z sngrep odgovori na drugo polovico tako, da pokaže vrstico povezave SDP, kot je bila poslana.
Primerjajte naslov v tej vrstici povezave z naslovom, do katerega lahko oddaljena stran v resnici usmerja. Ta ena primerjava reši večino poročil o enosmernem zvoku hitreje kot kateri koli pregled konfiguracije.
Šifriranje se ustavi na robu tunela
SIP prek TLS ščiti signalizacijski skok, za katerega je bil nastavljen, SRTP ščiti medije, ko se oba konca o tem dogovorita, tunel pa ščiti promet med svojimi končnimi točkami. Nobeno od tega ne daje ostalih. Klic, šifriran znotraj tunela, lahko zapusti prehod v čistem besedilu proti PBX, in to je oblikovalska odločitev, ne napaka.
Preden zaprete zahtevek, potrdite tri stvari po vrsti: registracija je sveža, SDP nosi naslov, do katerega lahko oddaljena stran doseže, in paketi tečejo v obe smeri na vratih medijev. Če je katera od tega napačna, težava ni v tunelu. Popravite pot, ki je odpovedala, nato znova zaženite isti zajem, da potrdite spremembo. Če zajeme pred in po shranite, naslednje poročilo o enosmernem zvoku postane petminutno preverjanje namesto celega popoldneva.