Et dashboard beder om et tal for, hvor længe forbindelsen har været oppe, og OpenVPN giver det ikke. Klienten ved, hvornår dens tunnel kom op, men kun hvis noget registrerer det øjeblik, før sessionstilstanden går tabt. Det understøttede sted er up-hooket, og den værdi, der er værd at gemme, er et råt epoch-sekund frem for en formateret streng. Alt derefter er aritmetik, plus nogle få ordensregler, der afgør, om tallet forbliver ærligt.

Bekræft, at hookene faktisk kører

Bevis, at hooket affyrer, før du designer noget omkring det. En minimal klientkonfiguration kræver script-security 2 plus eksplicitte stier up og down; uden sikkerhedslinjen nægter OpenVPN at køre scriptet og siger det rent ud. Tilføj up-restart og down-pre samtidig, så genstarts- og nedtagningsstierne opfører sig forudsigeligt.

Lad den første version af hooket tilføje sit miljø til en fil og intet andet gøre. Det viser dig de variabelnavne, din build faktisk eksporterer, såsom dev og script_type, i stedet for dem, du husker fra en anden version. Kør én forbindelse og én afbrydelse, og læs så filen. Hvis intet dukker op, stop her, for et tidsstempeldesign oven på et hook, der aldrig kører, vil se ud som en overvågningsfejl i ugevis.

Kontroller, hvilken bruger hooket kører som. Med user og group sat dropper OpenVPN privilegier, før det kører scripts, så en mappe, som root kan skrive i, kan være lukket for hooket. Vælg stien fra tjenestens synspunkt i stedet for din shells.

Registrér én epoch-værdi, og ryd den bevidst

up-hooket skal bruge én linje, date +%s > /run/openvpn-client.started, med stien justeret pr. instans. En epoch-værdi undgår spørgsmål om sprog, tidszone og format senere, og det er det samme tal, som en overvågningsagent kan sammenligne med sit eget ur.

Rydning betyder lige så meget som skrivning. down-hooket bør tømme eller fjerne filen, og down-pre sørger for, at det sker, før grænsefladen lukkes, hvilket fjerner det vindue, hvor filen beskriver en tunnel, der allerede er væk. up-restart opdaterer derefter stemplet ved en intern genstart i stedet for at lade den oprindelige værdi stå. Uden det par en genstart efter ping-timeout giver et tal, der fortsætter med at stige, mens tunnelen genetableres.

Vælg et sted med den rigtige levetid. En fil under /run forsvinder ved genstart, hvilket matcher virkeligheden, mens en fil under /tmp kan blive ryddet uforudsigeligt, og en i konfigurationsmappen overlever på en måde, der vildleder. Sæt rettigheder, så kun tjenestebrugeren og overvågningslæseren kan læse den.

Beregn oppetid uden at stole på loglinjer

Læs det gemte sekund, læs det aktuelle sekund, træk fra. Når filen mangler eller er tom, er det ærlige svar, at ingen tunnel er aktiv, ikke at oppetiden er nul, for de to tilstande bør rejse forskellige alarmer. Behold rå sekunder i overvågningsdataene, og formatér dage og timer i visningslaget. En formaterer, der afrunder inde i eksportøren, smider præcision væk, som nogen vil have under en hændelse.

At parse logtidsstempler er den fristende genvej, og den fejler på tre måder: formatet følger, hvilke indstillinger der er sat, rotation fjerner historikken, og genforbindelser fremstår som separate sessioner i stedet for én sammenhængende tunnel. Hooket registrerer hændelsen én gang, i det øjeblik den sker.

Når tjekket kører på en anden vært, send tidsstemplet i stedet for varigheden, så læseren bruger sit eget ur. Et lille negativt resultat læses så som urforskydning i stedet for et defekt hook.

Dæk genforbindelser, genstarter og flere instanser

To tunneler på én vært kræver to filer, nøglet på det instansnavn, tjenesten allerede bruger. En delt sti betyder, at den nyeste forbindelse overskriver hver profils starttid, og symptomet er et tal, der springer baglæns, når en anden tunnel starter.

Genforbindelsesadfærd fortjener sin egen test, for det er der, et troværdigt design stille rapporterer det forkerte. Tving en genstart ved at droppe peeren eller sende et signal til processen, og sammenlign så grænsefladetilstanden med filen. Tidsstemplet bør rykke frem i det øjeblik, tunnelen vender tilbage.

På serversiden bærer statusfilen en connected-since-værdi pr. klient, som besvarer et andet spørgsmål: hvornår serveren sidst så den peer. Brug den til krydstjek i stedet for som erstatning, da den forsvinder sammen med den session, den beskriver. Ingen af målingerne siger noget om tilstanden af applikationen bag tunnelen.

Kør de tre tjek, der fanger ordensfejl

Test en normal forbindelse, en fremtvunget genforbindelse og et rent stop, og læs grænsefladelisten og filen sammen efter hvert. Et stempel, der stadig er der efter et rent stop, eller en fil, der påstår en tunnel, som grænsefladelisten ikke indeholder, peger direkte på hookorden. Kør tjekkene som tjenestebruger med tjenestens stier, for en root-shell kan se en anden fil og give et selvsikkert forkert svar. Lad derefter en langsom poller læse filen, og bekræft at den aldrig skriver til den.

En afstemning hvert minut dækker alarmering, og ingen hook bør regne med, at den poller er i live. Hold de to ansvarsområder adskilt, og tallet forbliver troværdigt, når en af siderne genudrulles.

Relaterede artikler