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.

PathWho picks the addressTypical failure
REGISTERSoftphone, rewritten by the registrar if configuredBinding expires or points at a private address
INVITE and SDPEach endpoint in its own offer or answerOffer names a media address nobody can route to
RTPPBX relay policy or the two endpointsPort 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.

Relaterede artikler