Hvorfor traceroute dør i én retning gennem en VPN-tunnel
Et spor, der fuldføres den ene vej og udskriver stjerner den anden, er som regel et diagnostisk problem. Sammenlign probe-metoder, returveje og en rigtig anmodning.
Traceroute-output, der fuldføres i én retning og udskriver rækker af stjerner i den anden, ligner asymmetrisk videresendelse, og det er det som regel ikke. Hvert viste hop kræver, at proben ankommer, at en router beslutter at svare, og at svaret rejser tilbage og matches med proben. Bryd et af disse led, og rækken bliver en stjerne, mens tunnelen fortsat bærer data.
Sporet er bevis om diagnostik, før det er bevis om transport. Spørgsmålet, der er værd at stille, er hvilket af de tre led der fejlede, og svaret kommer fra pakkerne, ikke fra outputtets form.
En stjerne er et manglende svar, ikke et manglende hop
Traceroute bevæger sig udad ved at sende prober, hvis TTL udløber en router længere væk i hver runde. En router, der kasserer en udløbet probe, bør returnere en ICMP Time Exceeded-meddelelse, der navngiver sig selv, og værktøjet udskriver det navn. Det, værktøjet faktisk venter på, er at den meddelelse ankommer inden for en timeout. Hvis routeren svarer fra en anden kildeadresse, begrænser hvor ofte den genererer fejl, eller dropper proben uden et ord, giver runden intet, der kan udskrives.
Ingen af disse udfald siger, at den fremadgående vej er brudt. En stjerne er en rapport om ubesvaret post, ikke om en tom vej.
Probe-metoden afgør, hvilket filter du møder
Standardmetoden på Linux er som regel en UDP-destinationsport med et højt nummer, tracert i Windows sender ICMP-ekkoer, og Linux kan få besked om at bruge ICMP eller TCP i stedet. Hver af dem ser ud som en anden slags trafik for en stateful firewall eller en sky-sikkerhedsgruppe. At sammenligne et UDP-spor fra den ene side med et ICMP-spor fra den anden sammenligner to forskellige eksperimenter. Fastlås metoden, adressefamilien, kildeadressen og timeouten, før du kalder resultaterne en forskel.
For en retfærdig sammenligning skal du køre sporet fra de værter, der faktisk bærer trafikken, i stedet for fra en gateway, der videresender på deres vegne. Et router-genereret spor bruger routerens egen kildeadresse og outputpolitik, som kan være strengere end noget, en klient ser. Notér den præcise kommando, så den næste person kan gentage den.
Timeoutværdien er den anden halvdel af eksperimentet, og den er let at udelade af noterne. En ventetid på to sekunder på en overbelastet vej rapporterer stjerner, hvor en ventetid på fem sekunder rapporterer hop. Hold værdien identisk på tværs af kørsler, så sammenligningen bliver ved med at handle om netværket.
Returvejen er sin egen rute
En ICMP-fejl er en almindelig pakke med sin egen kilde og destination, og den har brug for en rute tilbage til traceren. Hvis tunnelpolitikken bærer LAN-præfikserne, men ikke routeradressen, der genererede fejlen, forlader meddelelsen ad en vej, der ikke kan nå dig. Svarfiltrering kan droppe den, selv når ruten findes, fordi pakken ankommer fra en uventet adresse på et uventet interface. Det er en uoverensstemmelse i det diagnostiske plan, ikke en applikationsfejl.
At udvide hver selector, indtil sporet fuldføres, gør billedet pænere og politikken dårligere. Reparer den specifikke diagnostiske adresse, eller accepter stjernen og test applikationen på en anden måde.
Bekræft tunnelen med en rigtig anmodning
Et TCP-handshake på tjenestens egen port afprøver videresendelse, returrouting og filtrering i den retning, der betyder noget. Kommandoerne nedenfor kører i begge ender og sammenligner, hvad hver side kan åbne. Erstat tjenesteporten og tunnelinterfacets navn med dine egne indstillinger.
traceroute -I -n -w 2 203.0.113.40
traceroute -T -p 443 -n -w 2 203.0.113.40
curl -sS -o /dev/null -w '%{http_code} %{time_total}\n' --max-time 5 http://203.0.113.40:8080/health
ss -tan state established
Læs de to traceroute-kørsler først: hvis ICMP-kørslen viser hop, og TCP-kørslen ikke gør, er forskellen metode, ikke vej. Tag derefter curl-resultatet som svaret på applikationsniveau, fordi en fuldført udveksling med en fornuftig statuskode betyder, at både den fremadgående og den tilbagegående vej virker for rigtig trafik. Socketlisten viser, om forbindelsen overhovedet er etableret, hvilket intet spor kan fortælle dig.
En tunnel, der bærer en interaktiv session i begge retninger, mens ét traceroute udskriver stjerner, er sund og blot ufotogen. Gem kommandooutputtet fra hver side som registreringen, og behandl manglende hop som et åbent spørgsmål om diagnostik i stedet for en dom om VPN'en.