Tilføj en standardrute gennem tunnelen, og tunnelens egne pakker følger den. Tabellen indeholder så en regel, der besejrer sig selv. Den krypterede forbindelse til serveren forsøger at rejse inde i den forbindelse, den forsøger at oprette.

To mekanismer forhindrer den løkke. Den ene er synlig i rutetabellen, den anden lever inde i applikationen.

Indre og ydre trafik er forskellige beslutninger

En applikationspakke går ind i det virtuelle interface og bliver indkapslet. Resultatet er en ny pakke adresseret til serverens offentlige adresse. Den pakke har brug for en rute på det fysiske netværk, for intet ved den må gå ind i tunnelen.

Begge er rutebeslutninger, og kun den første hører til tunnelen. Når klienten installerer en standardrute, der også dækker serveren, bliver den ydre pakke også fanget.

Symptomerne er øjeblikkelige og totale. Handshaket fuldføres, og derefter flyder intet, eller forbindelsen falder i det øjeblik, ruten installeres. I begge tilfælde kan keepalive ikke længere komme ud.

Mulighed et: en værtsrute til slutpunktet

Den direkte tilgang tilføjer en rute til serverens adresse gennem den oprindelige gateway. Det kræver én linje. Den er synlig for alle, der læser tabellen. Den er også nem at forklare i en ændringsrecord.

Dens svaghed viser sig, når den underliggende vej ændres. Den gemte rute angiver en gateway og et interface fra det gamle netværk. Efter et Wi-Fi-skift findes den gateway måske ikke, og ruten bliver tilbage, ser korrekt ud og gør intet.

# before the tunnel: which path reaches the endpoint?
ip route get 198.51.100.7

# pin it through the current gateway
ip route add 198.51.100.7/32 via 192.168.1.1 dev wlan0

# after the tunnel is up, confirm the pin survived
ip route get 198.51.100.7

Et værtsnavn gør dette sværere. Hvis slutpunktet er et navn, der opløses til flere adresser, skal undtagelsen dække den adresse, der faktisk bruges. Et senere opslag kan returnere noget, som ruten aldrig dækkede.

Mulighed to: beskyt socketen

Den anden tilgang rører aldrig rutetabellen. Klienten markerer eller beskytter den socket, der bærer tunnelen, så styresystemet sender den sockets trafik uden om tunnelen efter politik. Android eksponerer mekanismen direkte for VPN-applikationer. Desktopklienter implementerer ækvivalenter med firewall-markeringer eller bind-til-enhed-kald.

Fordelen er, at undtagelsen følger forbindelsen i stedet for en gemt gateway. Et netværksskift omskriver den underliggende vej, og den beskyttede socket flytter med, fordi den aldrig blev fastgjort til en adresse. Rutetabellen forbliver ren.

Prisen er synlighed. Intet i rutetabellen viser undtagelsen, så en anmelder, der leder efter en værtsrute, finder intet og kan konkludere, at designet er usikkert. Beskyttelsen lever i klientens kode og i de politikregler, som koden installerer.

At vælge mellem dem

Vælg socket-mekanismen, når klienten understøtter den, fordi den overlever de netværksskift, der ødelægger en fastgjort rute. Vælg værtsruten, når undtagelsen skal være synlig for andre værktøjer, eller når klienten ikke tilbyder noget bedre.

Ingen af mekanismerne fjerner behovet for, at serveradressen overhovedet kan nås. En privat gateway har en offentlig lytteradresse, og det er den adresse, der skal blive uden for tunnelen. De interne netværk bag den bliver først tilgængelige, når tunnelen findes.

Uanset hvad du vælger, så hold det hos den komponent, der ejer tunnelen. En løs værtsrute tilføjet i hånden virker indtil det næste netværk, og så bliver den morgendagens mystiske nedbrud.

Relaterede artikler