Starter du en VPN-klient over SSH? Fastgør først din egen rute
En klient med fuld tunnel omskriver den tabel, der bærer dit SSH-svar. Fastgør én værtsrute gennem den gamle gateway, eller kør klienten i sit eget navnerum.
Du SSH'er ind på en build-vært, starter VPN-klienten på den, og sessionen holder op med at svare. Intet er styrtet, og intet ser forkert konfigureret ud i den oplagte forstand. Klienten installerede en standardrute, så svar til din arbejdsstation forlader nu gennem tunnelen, hvor din arbejdsstations adresse ikke er rutbar. Det interessante er, at dette udfald var forudsigeligt, og rettelsen er én rute, der skrives, før klienten starter. Antag en server med ét netværkskort, en gateway på 192.0.2.254 og en administrator, der forbinder fra 203.0.113.9.
Notér stien, før du starter
ip route show default angiver den aktuelle gateway og grænseflade, mens ip route get 203.0.113.9 viser, hvilken grænseflade og kildeadresse kernen ville bruge til din session. Gem begge output. Når tunnelen er oppe, bør de to kommandoer stadig beskrive den fysiske sti, og hvis de i stedet beskriver tunnelen, lever sessionen allerede på lånt tid.
Det er den etablerede forbindelse, der betyder noget, så validér ikke kun med et nyt login. En ny session kan kortvarigt lykkes gennem tilstand, som den gamle ikke længere har.
Fastgør adressen i klientens egen konfiguration
En håndtilføjet rute forsvinder ved genstart og kaper med klientens egne tabelopdateringer, så læg undtagelsen der, hvor tabellen styres. Under OpenVPN opløses nøgleordet net_gateway til den gateway, der fandtes før tunnelen, så route 203.0.113.9 255.255.255.255 net_gateway holder præcis én adresse uden for den. WireGuard kræver en anden tilgang, fordi wg-quick selv styrer ruterne: sæt Table = off og tilføj undtagelsen i PostUp, med en matchende PostDown, der fjerner den. Begge former udtrykker den samme hensigt, og begge begrænser undtagelsen til én adresse i stedet for at svække tunnelen for alt.
For IPv6 tager den samme idé et enkeltværts-præfiks, og tilfældet med indpakket transport er værd at huske: hvis tunnelens egen ydre forbindelse lever på en fast adresse, skal den adresse blive uden for den tunnel, den bærer, ellers ruter klienten sin egen transport ind i sig selv.
Eller tag hovedtabellen ud af ligningen
Når flere tjenester på værten skal beholde deres normale sti, skal du stoppe med at redigere hovedtabellen og give klienten sin egen. Et netværksnavnerum med et veth-par gør det rent: klientens standardrute lever i en anden stak, og kun processer startet indeni bruger tunnelen. Policy routing når et lignende sted for én destination ved at sende matchende trafik til en dedikeret tabel, hvis standard stadig peger på den fysiske gateway. Begge tilgange efterlader værtens hovedtabel uden en ny standardrute, og det er den egenskab, der holder SSH svarande.
Begge er mere maskineri end en enkelt værtsrute, og begge er værd at gøre, når mere end én ting på maskinen skal overleve tunnelen.
Antag, at fastgørelsen kan fejle
En rute, der er bundet til din nuværende offentlige adresse, brækker i det øjeblik, din udbyder tildeler den igen. En fjernserver har så brug for en sti, der ikke afhænger af den adresse: en konsol, en anden administrationsgrænseflade eller en jump host, der bliver uden for tunnelen.
To sikkerhedsforanstaltninger koster ti minutter. En watchdog, der stopper klienten, hvis et bekræftelseslogin ikke viser sig inden for et par minutter, gør en udelåsning til en forsinkelse, og en anden SSH-session, der holdes åben under ændringen, beviser, at undtagelsen virker, mens tunnelen er oppe. Keepalives alene hjælper ikke her, fordi stien er væk snarere end inaktiv; de gør bare døden lettere at bemærke.
Verificér i den rækkefølge, der betyder noget
Forbind tunnelen, bekræft, at ruten til din adresse stadig forlader gennem den fysiske gateway, og åbn derefter en ny session. Hvis den nye session virker, og den gamle alligevel dør, er årsagen forbindelsessporing eller en stateful firewall snarere end routing, hvilket er en anden rettelse.
Skriv den fastgjorte adresse og den kommando, der beviste den, i ændringsloggen. Den næste person, der starter en klient på den vært, får brug for begge, og adressen kan være ændret inden da.