Wanneer de tunnel op de router woont, heeft de machine die de browser draait helemaal geen tunnelinterface. Vraag die machine naar zijn lokale adressen en je krijgt een privé-LAN-adres en een loopback, niets dat op een VPN-adres lijkt. Toch kan een STUN-server aan de andere kant nog steeds iets zinvols over het pad melden, en wat hij meldt hangt volledig af van hoe dat specifieke verzoek is gerouteerd en vertaald.

Dat is het deel waar het de moeite loont om langzamer te gaan. ‘De browser bezit het VPN-adres niet’ beantwoordt een vraag over interfaces, terwijl een gereflecteerd adres een antwoord is over een pad door vertaling. De twee verwarren levert zelfverzekerde conclusies op over onthulling die het bewijs niet ondersteunt.

Twee apparaten, twee sets interfaces

In een routergebaseerde opstelling eindigt de tunnel op de router en de LAN-client stuurt gewoon verkeer naar zijn standaardgateway. De interfacelijst van de client blijft kort: één privéadres, misschien een tweede voor een ander netwerk, en loopback. Het risico is niet dat een daarvan toevallig het tunneladres is; het is dat het verzoek via een pad naar buiten gaat dat u niet hebt gekozen.

Vraag de client welke route een specifieke bestemming zou nemen in plaats van te vragen welke interfaces er bestaan. Het antwoord noemt een gateway en het bronadres dat de kernel zou gebruiken, en dat is al informatiever dan welke adressenlijst dan ook.

ip route get 198.51.100.20
ip -6 route get 2001:db8::20
wg show wg0 allowed-ips

Documentatieranges zijn goede testbestemmingen omdat ze nooit naar een echte dienst worden omgezet. Vergelijk wat de client zegt met wat de router zegt, en behandel elke onenigheid als bewijs dat beleidsroutering, een split-tunnelregel of een tweede standaardroute iets doet waarmee u geen rekening hebt gehouden.

Wat een Binding-antwoord mag zeggen

RFC 8489 definieert het Binding-verzoek en -antwoord, waarbij de server het waargenomen brontransportadres voor dat verzoek meldt. Het is een uitspraak over één vijfvoud op één moment, geen volkstelling van de interfaces van de client. Alles wat interessant is gebeurt dus tussen de client en het observatiepunt.

Die kloof wordt gevuld door routering en vertaling. Een router die uitgaand verkeer bron-NAT, vervangt de privébron van de client door zijn eigen adres op de uitgaande interface. Is die interface de tunnel, dan ziet de reflector het tunneladres. Is het pakket van de tunnel uitgesloten, dan ziet de reflector wat de WAN-vertaling opleverde. Dezelfde client, dezelfde reflector, een ander antwoord.

Drie gevallen die op elkaar lijken en dat niet zijn

Het nuttige onderscheid is niet openbaar versus privé, maar welk handhavingspunt het pakket heeft behandeld. Werk de gevallen door met de eigen tabellen van de router open, want één browser kan alle drie produceren, afhankelijk van een regel die u vergat dat u hem had geschreven.

Where the request leavesWhat rewrites the sourceWhat the reflector reports
Tunnel interface on the routerRouter NAT towards the tunnel addressThe tunnel address as seen on that path
WAN interface, excluded by policyOrdinary WAN translationThe public WAN address
Private reflector reached through the tunnel routeRouter NAT towards the tunnel addressAn internal identifier valid only inside that path

Alleen het tweede geval schendt de eis dat bepaald verkeer nooit rechtstreeks naar buiten gaat, en alleen het eerste en het derde onthullen een identificatie aan de tunnelzijde. Geen van de drie rijen is een bewering over het gedrag van een specifieke aanbieder: of een privé-reflector überhaupt bereikbaar is, hangt af van routering, van de toegestane IP-adressen van de tegenpartij en van het firewallbeleid aan beide uiteinden.

Een account hebben bij dezelfde aanbieder bewijst daar niets van. Het is ook de moeite waard te onthouden dat een gerouteerd verzoek de LAN-bron van de client kan behouden als niets die vertaalt, dus het bronveld moet worden gevolgd in plaats van aangenomen uit het topologiediagram.

Verzamelen is geen selecteren

WebRTC verzamelt kandidaatadressen om te proberen, en een kandidaat die in een diagnostische lijst verschijnt, draagt misschien nooit media. De lijst lezen als ‘dit is wat de tegenpartij heeft geleerd’ overschat het bewijs. Het geselecteerde paar is wat de sessie werkelijk heeft gedragen, en dat staat in een ander veld.

Een HTTPS-uitgangscontrole beantwoordt nog een andere vraag: het bronadres dat een webserver voor dat verzoek zag. Het is een nuttige kruiscontrole juist omdat het een ander protocol en vaak een andere bestemming gebruikt dan een UDP-reflector, en onenigheid tussen de twee wijst meestal op een routeringsregel en niet op een fout.

Bepaal het beleid en lees dan het antwoord

Schrijf de bedoeling op voordat u test: welk verkeer de tunnel moet gebruiken, welk rechtstreeks naar buiten mag, welke adresfamilies binnen bereik zijn en wat er moet gebeuren als de tunnel wegvalt. Zonder die basislijn is elke waarneming dubbelzinnig, omdat u een lek niet kunt scheiden van een pad dat u bewust hebt toegestaan.

Stel dan één vraag tegelijk. Welke route neemt deze bestemming. Welk adres meldt deze reflector. Welk kandidaatpaar heeft de sessie gekozen. Bewaar de antwoorden naast het beleid en dateer ze, want een firmware-update kan het standaardgedrag veranderen op manieren die de conclusie van vorig jaar stilzwijgend ongeldig maken.

De router blijft een sterk handhavingspunt, omdat hij verkeer ziet dat een client niet kan omzeilen zonder de client zelf opnieuw te configureren. Het is geen belofte dat elk veld in elk applicatieprotocol niets onthult, en het is geen vervanging voor het opschrijven van de paden die u hebt toegestaan.

Gerelateerde artikelen