keepalive i OpenVPN eller restart i systemd: hvad genopretter tunnelen?
En tavs modpart, en død proces og en ubrugelig applikation er tre forskellige fejl. Giv keepalive til OpenVPN, processen til systemd, og test hvert tilfælde.
Tre forskellige ting kan gå galt med en tunnel, og de kræver tre forskellige reaktioner. Modparten holder op med at svare, dæmonprocessen dør, eller applikationen bag tunnelen holder op med at betjene. En konfiguration, der genstarter tjenesten ved enhver af dem, er ikke omhyggeligt tilsyn; det er én grov handling anvendt på urelaterede fejl. At sammenligne, hvad hver mekanisme faktisk kan observere, gør arbejdsdelingen indlysende.
Tre fejl, der ligner én
Stilhed fra modparten betyder, at den anden ende er holdt op med at sende, og OpenVPN kan selv opdage det, fordi den ejer hjerteslaget. Processens død betyder, at dæmonen er afsluttet, hvilket tjenestestyringen bemærker, og OpenVPN ikke kan. Applikationsfejl betyder, at tunnelen er fin, og noget bag den ikke er, og ingen af de to andre mekanismer har nogen måde at vide det på. Hver af dem kræver en anden reaktion, og ingen af dem er det samme som at bemærke, at tunnelen er oppe.
Det er forskellige signaler fra forskellige lag, og hver har en ejer, der kan handle på det uden at gætte. At blande dem giver et system, der genstarter på symptomer, det ikke kan fortolke.
Skriv de tre tilfælde ned, før du ændrer nogen timer. Listen viser som regel, at én mekanisme bliver bedt om at dække alle tre.
Hvad keepalive egentlig udvider til
Direktivet keepalive er en forkortelse, og udvidelsen afhænger af tilstanden. På en server bliver keepalive 10 60 til et lokalt ping hvert tiende sekund, en lokal genstartsfrist på 120 sekunder og værdierne 10 og 60, der sendes til klienter. Serverens frist fordobles bevidst, så en klient får en chance for at genstarte, før serveren giver op. Læs den udvidede form i den kørende konfiguration, ikke forkortelsen i profilen.
Den fordobling er grunden til, at enhver beskrivelse, der hævder, at begge ender genstarter efter tres sekunder, er forkert. Det forklarer også, hvorfor de to ender ikke flagrer i takt, når en rute forringes.
Hjerteslaget er OpenVPN-modpartstrafik, ikke en ICMP-probe af en offentlig vært. Et svar beviser kun, at den fjerne ende af tunnelen er i live. Det siger intet om den database eller webtjeneste, brugeren faktisk har brug for.
Hvad Restart=on-failure ikke overvåger
Læs den installerede enhed, før du tilføjer en tilsidesættelse. Restart=on-failure reagerer på dokumenterede procesfejlforhold, hvilket ikke er det samme som at overvåge forbindelsestilstanden. Den udløses ikke, fordi en intern genopkobling er startet, og en ren afslutning har en anden betydning end et nedbrud.
Den forskel betyder noget, fordi en intern genstart holder den samme proces i live. Enheden ser intet, tunnelen kommer sig selv, og det er det korrekte resultat.
Sæt RestartSec og startgrænser bevidst, ellers vil en nedbrudsløkke hamre på gatewayen og begrave den egentlige fejl under genstartsmeddelelser. En genstartsgrænse, der udløses, efterlader enheden i fejl, hvilket er synligt, mens en ubegrænset løkke ikke er.
ping-restart og ping-exit kan ikke byttes om
ping-restart udløser OpenVPNs interne genstart og beholder processen. ping-exit afslutter processen ved samme slags frist, hvilket giver beslutningen til tjenestestyringen. De udelukker hinanden, og valget af den anden ændrer, hvem der ejer genopretningen. Forskellen er, hvem der beslutter at prøve igen, og hvor meget tilstand der overlever forsøget.
Hvis du vælger afslutning ved timeout, har enheden brug for en genstartspolitik og håndtering af afslutningsstatus, der passer, ellers ser en levedygtighedsfejl ud som et permanent stop. Persistensmuligheder kan også bevare grænseflader og ruter gennem en intern genstart, men ikke gennem en procesafslutning.
Vælg én livscyklus for hver udrulning, og skriv hvorfor. En profil med begge direktiver er en profil, der ikke har besluttet sig.
Test hver fejl som sit eget tilfælde
Simuler en tavs modpart, en dræbt dæmon og en utilgængelig applikation i et godkendt vindue, og kontroller derefter, hvilken genopretning der blev udløst. En tavs modpart bør give en intern genopkobling, en dræbt proces en enhedsgenstart, og et applikationsudfald ingen af delene. Når to tilfælde giver den samme handling, er ejerskabet stadig blandet.
Gentagen genopretning er heller ikke en reparation. Afviste legitimationsoplysninger eller to klienter, der deler et effektivt navn, vil blive ved med at erstatte hinanden, og hurtigere timere gør bare den flagren hurtigere.