Hvorfor et SIP-opkald registrerer sig over en VPN, men ikke sender lyd
Registrering og lyd følger forskellige veje. Følg et opkald gennem tunnelen for at se, hvilke adresser PBX'en kan bruge, og hvor RTP faktisk stopper.
En vellykket registrering fortæller næsten intet om lyd. En softphone kan i timevis holde en gyldig binding til kontorets PBX og alligevel levere tavshed. Tunnelen bærer kun de pakker, nogen bevidst sender ind i den, og et opkald bruger tre separate veje: binding, dialogopsætning og RTP-strømmen. Når du skiller dem ad, lander fejlen på én vej i stedet for på ordet VPN.
Forestil dig en bærbar på hjemmets Wi-Fi, der ringer til en kontorudvidelse gennem en godkendt tunnel. PBX'en autentificerer brugeren, accepterer REGISTER, og udvidelsen vises som tilgængelig, men alligevel forbindes opkaldet med død luft i én retning.
Registrering binder en kontakt, ikke en medievej
En REGISTER-anmodning beder registraren om at gemme en mapping mellem en adresse-på-post og en eller flere kontakt-URI'er. Den mapping besvarer et snævert spørgsmål om, hvor en ny dialog skal sendes hen lige nu. Den siger intet om, hvor medier hører hjemme, og en accepteret registrering beviser ikke, at en senere INVITE bærer en tilgængelig medieadresse. Registreringer udløber også på en timer, så en telefon, der stopper med at forny, mister indgående opkald, mens dens tunnel stadig ser sund ud. Hold øje med kontaktens udløb frem for tunnelens status.
Når softphonen sidder bag tunnelen, kan kontakt-headeren bære en privat adresse. En PBX, der videresender den til et andet endpoint, skaber en dialog rettet mod et netværk, den opkaldte ikke kan nå. Indstillingen rewrite_contact=yes på PJSIP-endpointet får PBX'en til at erstatte den kildeadresse, den observerede, og det er ofte forskellen på en ringetone og en timeout.
Hvad INVITE tilbyder, og hvem der kan bruge det
En INVITE med en SDP-body foreslår, hvor den kaldende vil modtage medier: en adresse, en port og en kodekliste. Den opkaldte svarer med sin egen adresse og port, og derefter sender hver side RTP til det, den anden foreslog. Hvis den kaldende foreslog en 192.168.x.x-adresse, der kun findes på hjemmenetværket, har den opkaldte intet sted at sende lyd hen, uanset hvor ren signaleringen var. Maskering omskriver IP-headere, når pakker forlader en router, men den omskriver aldrig teksten inde i en SDP-body.
Det hul forklarer det klassiske envejsopkald: signaleringen virker, fordi begge endpoints kan nå PBX'en, og lyden fejler, fordi det ene endpoint fik besked om at sende til en adresse, der kun findes bag en anden 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 |
Hvem der bærer lyden, er et konfigurationsvalg
Signalering og medier er adskilte roller. En proxy kan blive på signaleringsvejen gennem et helt opkald og aldrig røre en enkelt RTP-pakke. Om PBX'en bliver en medierelay, afhænger af konfigurationen, ikke af om der er en tunnel.
Med direkte medier udveksler endpoints selv RTP, hvilket fungerer godt på et LAN og dårligt, når den ene side sidder bag et snævert portområde.
Indstillingen direct_media=no tvinger PBX'en ind på medievejen, så begge ben terminerer på en adresse, den kontrollerer, hvilket bytter båndbredde og CPU for forudsigelig adressering. Når den relayer, skal PBX'en stadig annoncere en tilgængelig adresse. På en multi-homed host afgør external_media_address og external_signaling_address i pjsip.conf, hvad der vises i SDP og i Via-headere. Lader du dem være tomme, kan PBX'en tilbyde sin LAN-adresse til en kaldende, hvis eneste rute er tunnelens fjernside.
Følg hver retning, før du rører indstillinger
Start med socket-tabellen på PBX'en, mens et opkald er aktivt: ss -uanp | grep -E '5060|10000' viser, om RTP-porte er bundet, og hvilken lokal adresse de bruger. Hvis intet er bundet i medieområdet, er relayet ikke aktiveret, og endpoints taler direkte sammen. Optag derefter på softphone-siden med tcpdump -ni any -s0 udp portrange 10000-20000 -w rtp.pcap. Udgående pakker uden indgående pakker indsnævrer problemet til returvejen eller til den adresse, fjernenden fik besked om at bruge, og en tom optagelse betyder, at medier aldrig nåede tunnelinterfacet. En signaleringoptagelse med sngrep besvarer den anden halvdel ved at vise SDP-forbindelseslinjen som sendt.
Sammenlign adressen i den forbindelseslinje med den adresse, fjernenden faktisk kan route til. Sammenligningen alene løser de fleste envejs-lydrapporter hurtigere end nogen konfigurationsgennemgang.
Kryptering stopper ved tunnelkanten
SIP over TLS beskytter det signaleringshop, det er konfigureret til, SRTP beskytter medier, når begge ender forhandler det, og tunnelen beskytter trafik mellem sine egne endpoints. Ingen af dem giver de andre. Et opkald, der er krypteret inde i tunnelen, kan forlade gatewayen i klartekst mod PBX'en, og det er et designvalg, ikke en fejl.
Før du lukker sagen, bekræft tre ting i rækkefølge: registreringen er frisk, SDP'en bærer en adresse, fjernenden kan nå, og pakker flyder begge veje på medieportene. Hvis noget af det er falsk, er tunnelen ikke der, hvor problemet bor. Ret den vej, der fejlede, og kør derefter den samme optagelse igen for at bekræfte ændringen. Gemmer du optagelserne fra før og efter, bliver den næste envejsrapport et femminutters tjek i stedet for en hel eftermiddag.