To scripts, der kæmper om den samme rute, er den sædvanlige form for et Linux-VPN-problem, der bliver registreret som en routingfejl. Én komponent opretter tunnel-enheden, en anden tilføjer en standardrute, en tredje omskriver resolver-konfigurationen, og en fjerde genindlæser firewall-regler. Enhver af dem kan gøre en andens arbejde om, og vinderen er simpelthen den, der kørte sidst. Spørgsmålet, der er værd at besvare, er ikke, hvilken pakke der skal installeres, men hvilken komponent der har myndighed over hver del af tilstanden.

Skriv det kort én gang, og de fleste genopkoblingsfejl holder op med at være mystiske. Fire objekter betyder noget: enheden og dens adresser, ruterne og politikreglerne, DNS-konfigurationen og firewallen.

Enheden og dens adresser

En tunnel-enhed oprettes enten af en manager, der kender profilen, eller af en daemon, som nogen har startet i hånden. Begge arrangementer virker for sig selv; at blande dem gør ikke. Hvis NetworkManager ejer profilen, lad den også eje enheden, og start ikke en OpenVPN proces uden styring mod det samme tunnelnavn.

Notér, hvem der fjerner enheden, når sessionen slutter. En enhed, der overlever sin session, er den almindeligste kilde til forældede adresser og til den forvirring, der følger.

Ruter og politikregler

Det er på ruterne, at ejerskabskonflikter gør synlig skade. En forbindelsesmanager installerer en standardrute til tunnelen plus en mere specifik rute til fjernnetværket; et håndskrevet script tilføjer derefter sin egen standardrute med en anden metrik og vinder eller taber lydløst afhængigt af timingen. Beslut, hvilke poster der er forbindelsesbundne, hvilke der er permanent politik, og hvilken komponent der opdaterer dem efter en genopkobling. Hold derefter de andre komponenter ude af den tabel.

Politikregler fortjener den samme klarhed, for en regel, der peger på en tabel, som ingen udfylder, skaber et sort hul, der ser præcis ud som en død tunnel. Hvis en regel findes for at tvinge trafik et sted hen, skal tabellen, den vælger, vedligeholdes af den samme ejer.

DNS er altid en separat ejer

En resolver-daemon kører som sin egen proces under sin egen identitet, så den arver ikke tunnelens routingbeslutninger ved et uheld. Når VPN'en skubber DNS-servere, skal noget oversætte det til en konfiguration pr. link, som resolveren respekterer, og noget skal fjerne den igen bagefter.

Myten her er, at det at skrive en navneserver i profilen ændrer, hvor forespørgsler går hen. Det ændrer, hvad resolveren får at vide, ikke hvilken socket resolveren bruger opstrøms. Test med en forespørgsel plus et ruteopslag i stedet for at stole på filen.

Firewalltilstand, og hvem der gendanner den

Firewall-regler er det objekt, der oftest overskrives på en VPN-vært. En manager kan tilføje NAT- eller videresendelsesregler pr. forbindelse, mens en firewalltjeneste ved opstart genindlæser et gemt regelsæt og sletter dem. Vælg én myndighed for politik og gør den anden til forbruger af den, eller accepter, at en genstart lydløst ændrer adfærden. Forbindelsesbundne undtagelser hører i en fil, som den samme ejer indlæser, ikke i en iptables-kommando, der tastes under fejlsøgning.

Hvis regler skal overleve en genopkobling, så sig det udtrykkeligt. Hvis ikke, så sig også det, for den næste ingeniør vil antage det mest bekvemme svar.

Livscyklus: opstart, genopkobling, nedtagning

Giv hvert af de tre øjeblikke en ejer. Ved opstart, beslut hvad der forbereder forudsætningerne, og i hvilken rækkefølge. Ved en blød genstart, husk at enheden kan overleve, mens sessionstilstanden ikke kan, så en validator skal køre i stedet for en skaber. Ved nedtagning, fjern kun det, som denne forbindelse oprettede, for at nulstille hver rute eller tømme hele firewallen er ikke det samme som at tage en tunnel ud af drift.

Til observation viser ip monitor link address route kerneændringer, efterhånden som de sker, men det rapporterer hændelser snarere end hensigt: en slettet rute siger intet om, hvilken proces der slettede den. Par det med ejerskabskortet, og en forvirrende nedlukning bliver en kort liste af kandidater.

Undtagelser har også en pris. At markere en hel enhedsklasse som ustyret for at undslippe en konflikt giver den tilstand til ingen, hvilket er en beslutning snarere end en rettelse.

Relaterede artikler