Hoe om die werkingstyd van 'n OpenVPN-kliënt met up- en down-hakke te meet
OpenVPN het geen werkingstydteller nie. Stoor 'n epoch-stempel uit die up-hak, wis dit by down, trek dit af en hou dit eerlik oor herstarts en instansies.
'n Paneelbord vra vir 'n getal van hoe lank die verbinding al staan, en OpenVPN bied dit nie. Die kliënt weet wanneer sy tonnel opgekom het, maar net as iets daardie oomblik vaslê voordat die sessiestatus verlore gaan. Die ondersteunde plek is die up-hak, en die waarde wat die moeite werd is om te stoor is 'n rou epoch-sekonde eerder as 'n geformateerde string. Alles daarna is rekenwerk, plus 'n paar ordeningsreëls wat besluit of die getal eerlik bly.
Bevestig dat die hakke werklik loop
Bewys dat die hak afvuur voordat jy enigiets daarom ontwerp. 'n Minimale kliëntkonfigurasie benodig script-security 2 plus eksplisiete up en down paaie; sonder die sekuriteitslyn weier OpenVPN om die script uit te voer en sê dit duidelik. Voeg up-restart en down-pre terselfdertyd by sodat die herstart- en afbreekpaaie voorspelbaar werk.
Maak die eerste weergawe van die hak wat sy omgewing by 'n lêer voeg en niks anders doen nie. Dit wys jou die veranderlike name wat jou bou werklik uitvoer, soos dev en script_type, in plaas van dié wat jy van 'n ander weergawe onthou. Hardloop een verbinding en een ontkoppeling, lees dan die lêer. As niks verskyn nie, stop hier, want 'n tydstempel-ontwerp bo-op 'n hak wat nooit loop nie sal vir weke soos 'n moniteringsfout lyk.
Kontroleer as watter gebruiker die hak loop. Met user en group gestel, laat OpenVPN privileges val voordat scripte loop, so 'n gids waar root kan skryf kan vir die hak gesluit wees. Kies die pad uit die diens se oogpunt eerder as jou skulp s'n.
Teken een epoch-waarde aan en wis dit doelbewus
Die up-hak het een reël nodig, date +%s > /run/openvpn-client.started, met die pad per instansie aangepas. 'n Epoch-waarde vermy later vrae oor landstreek, tydsone en formaat, en dit is dieselfde getal wat 'n moniteringsagent teen sy eie klok kan vergelyk.
Om te wis maak net soveel saak soos om te skryf. Die down-hak moet die lêer leegmaak of verwyder, en down-pre laat dit gebeur voordat die koppelvlak sluit, wat die venster verwyder waarin die lêer 'n tonnel beskryf wat reeds weg is. up-restart verfris dan die stempel by 'n interne herstart in plaas daarvan om die oorspronklike waarde te laat staan. Sonder daardie paar, 'n herstart weens 'n ping-tydsverloop lewer 'n getal wat aanhou klim terwyl die tonnel weer opbou.
Kies 'n plek met die regte lewensduur. 'n Lêer onder /run verdwyn by herbegin, wat die werklikheid weerspieël, terwyl 'n lêer onder /tmp onvoorspelbaar skoongemaak kan word en een in die konfigurasiegids oorleef op 'n misleidende manier. Stel regte sodat net die diensgebruiker en die moniteringsleser dit kan lees.
Bereken werkingstyd sonder om logreëls te vertrou
Lees die gestoorde sekonde, lees die huidige sekonde, trek af. Wanneer die lêer afwesig of leeg is, is die eerlike antwoord dat geen tonnel aktief is nie, nie dat die werkingstyd nul is nie, want daardie twee toestande behoort verskillende waarskuwings te veroorsaak. Hou rou sekondes in die moniteringsvrag en formateer dae en ure by die vertoonlaag. 'n Formateerder wat in die uitvoerder afrond, gooi presisie weg wat iemand tydens 'n voorval sal wil hê.
Om log-tydstempels te ontleed is die aanloklike kortpad, en dit misluk op drie maniere: die formaat volg watter opsies ook al gestel is, rotasie verwyder die geskiedenis, en herverbindings verskyn as aparte sessies eerder as een deurlopende tonnel. Die hak teken die gebeurtenis een keer aan, op die oomblik dat dit gebeur.
Wanneer die kontrole op 'n ander gasheer loop, stuur die tydstempel eerder as die duur sodat die leser sy eie klok toepas. 'n Klein negatiewe resultaat lees dan as klokafwyking eerder as 'n stukkende hak.
Dek herverbindings, herstarts en veelvuldige instansies
Twee tonnels op een gasheer het twee lêers nodig, gesleutel op die instansienaam wat die diens reeds gebruik. 'n Gedeelde pad beteken die mees onlangse verbinding oorskryf elke profiel se begintyd, en die simptoom is 'n getal wat agteruit spring wanneer 'n tweede tonnel begin.
Herverbindingsgedrag verdien sy eie toets, want dit is waar 'n geloofwaardige ontwerp stilweg die verkeerde ding rapporteer. Forseer 'n herstart deur die eweknie te laat val of die proses te sein, vergelyk dan die koppelvlaktoestand met die lêer. Die tydstempel behoort vorentoe te skuif op die oomblik dat die tonnel terugkeer.
Aan die bedienerkant dra die statuslêer 'n connected-since-waarde per kliënt, wat 'n ander vraag beantwoord: wanneer die bediener daardie eweknie laas gesien het. Gebruik dit vir kruiskontrole eerder as 'n vervanging, want dit verdwyn saam met die sessie wat dit beskryf. Nie een van die metings sê iets oor die gesondheid van die toepassing agter die tonnel nie.
Voer die drie kontroles uit wat ordeningsfoute vang
Toets 'n normale verbinding, 'n geforseerde herverbinding en 'n skoon stop, en lees die koppelvlaklys en die lêer saam na elkeen. 'n Stempel wat ná 'n skoon stop nog daar is, of 'n lêer wat 'n tonnel beweer wat die koppelvlaklys nie bevat nie, wys reguit na hak-ordening. Voer die kontroles uit as die diensgebruiker met die diens se paaie, want 'n root-dop kan 'n ander lêer sien en 'n selfversekerde verkeerde antwoord lewer. Laat dan 'n stadige poller die lêer lees en bevestig dat hy nooit daaraan skryf nie.
'n Peiling elke sestig sekondes dek waarskuwing, en geen hak behoort daarop te staatmaak dat daardie poller leef nie. Hou daardie twee verantwoordelikhede apart en die getal bly betroubaar wanneer enige kant herontplooi word.