OpenVPN-asiakasohjelman käyttöajan mittaaminen up- ja down-koukuilla
OpenVPN:ssä ei ole käyttöajan laskuria. Tallenna epoch-leima up-koukusta, tyhjennä se downissa, vähennä se ja pidä se rehellisenä uudelleenkäynnistysten ja instanssien yli.
Kojelauta pyytää lukua siitä, kuinka kauan yhteys on ollut päällä, eikä OpenVPN tarjoa sitä. Asiakasohjelma tietää, milloin sen tunneli nousi, mutta vain jos jokin tallentaa sen hetken ennen kuin istunnon tila katoaa. Tuettu paikka on up-koukku, ja tallentamisen arvoinen arvo on raaka epoch-sekunti eikä muotoiltu merkkijono. Kaikki sen jälkeen on aritmetiikkaa, plus muutama järjestyssääntö, jotka ratkaisevat pysyykö luku rehellisenä.
Varmista, että koukut todella suoritetaan
Todista, että koukku laukeaa, ennen kuin suunnittelet mitään sen ympärille. Minimaalinen asiakasohjelman kokoonpano tarvitsee script-security 2 sekä eksplisiittiset polut up ja down; ilman suojausriviä OpenVPN kieltäytyy suorittamasta skriptiä ja sanoo sen suoraan. Lisää up-restart ja down-pre samaan aikaan, jotta uudelleenkäynnistyksen ja purun polut käyttäytyvät ennustettavasti.
Tee koukun ensimmäisestä versiosta sellainen, että se liittää ympäristönsä tiedostoon eikä tee muuta. Se kertoo muuttujien nimet, jotka koontiversiosi todella vie, kuten dev ja script_type, sen sijaan että muistelisit niitä toisesta versiosta. Aja yksi yhteys ja yksi katkaisu ja lue sitten tiedosto. Jos mitään ei ilmesty, pysähdy tähän, sillä aikaleimasuunnittelu koukun päällä, joka ei koskaan suorita, näyttää viikkoja monitoroinnin vialta.
Tarkista, minkä käyttäjänä koukku suoritetaan. Kun user ja group on asetettu, OpenVPN luopuu oikeuksista ennen skriptien suorittamista, joten hakemisto, johon root voi kirjoittaa, voi olla koukulle suljettu. Valitse polku palvelun näkökulmasta, älä oman komentotulkkisi.
Tallenna yksi epoch-arvo ja tyhjennä se tarkoituksella
up-koukku tarvitsee yhden rivin, date +%s > /run/openvpn-client.started, polku säädettynä instanssikohtaisesti. Epoch-arvo välttää myöhemmät kieli-, aikavyöhyke- ja muotokysymykset, ja se on sama luku, jonka monitorointiagentti voi vertailla omaan kelloonsa.
Tyhjentäminen on yhtä tärkeää kuin kirjoittaminen. down-koukun pitäisi tyhjentää tai poistaa tiedosto, ja down-pre tekee sen ennen kuin liitäntä sulkeutuu, mikä poistaa ikkunan, jossa tiedosto kuvaa tunnelia, joka on jo poissa. up-restart sitten päivittää leiman sisäisessä uudelleenkäynnistyksessä sen sijaan että jättäisi alkuperäisen arvon paikoilleen. Ilman tätä paria ping-aikakatkaisun jälkeinen uudelleenkäynnistys tuottaa luvun, joka jatkaa nousuaan, kun tunneli rakentuu uudelleen.
Valitse paikka, jolla on oikea elinikä. Tiedosto /run alla katoaa uudelleenkäynnistyksessä, mikä vastaa todellisuutta, kun taas tiedosto /tmp alla voidaan siivota arvaamattomasti ja kokoonpanohakemistossa oleva säilyy tavalla, joka johtaa harhaan. Aseta oikeudet niin, että vain palvelun käyttäjä ja monitoroinnin lukija voivat lukea sen.
Laske käyttöaika luottamatta lokiriveihin
Lue tallennettu sekunti, lue nykyinen sekunti, vähennä. Kun tiedosto puuttuu tai on tyhjä, rehellinen vastaus on, että yhtään tunnelia ei ole aktiivisena, ei se, että käyttöaika on nolla, koska näiden kahden tilan pitäisi nostaa eri hälytyksiä. Pidä raa'at sekunnit monitoroinnin hyötykuormassa ja muotoile päivät ja tunnit näyttökerroksessa. Muotoilija, joka pyöristää viejän sisällä, heittää pois tarkkuuden, jota joku haluaa tapahtuman aikana.
Lokin aikaleimojen jäsentäminen on houkutteleva oikotie, ja se epäonnistuu kolmella tavalla: muoto seuraa asetettuja valintoja, rotointi poistaa historian ja uudelleenyhdistämiset näkyvät erillisinä istuntoina eikä yhtenä jatkuvana tunnelina. Koukku kirjaa tapahtuman kerran, sillä hetkellä kun se tapahtuu.
Kun tarkistus ajetaan toisella isännällä, lähetä aikaleima eikä kestoa, jotta lukija soveltaa omaa kelloaan. Pieni negatiivinen tulos luetaan silloin kellon heittona eikä rikkinäisenä koukkuna.
Kata uudelleenyhdistämiset, uudelleenkäynnistykset ja useat instanssit
Kaksi tunnelia yhdellä isännällä tarvitsevat kaksi tiedostoa, avaimena instanssin nimi, jota palvelu jo käyttää. Jaettu polku tarkoittaa, että uusin yhteys kirjoittaa jokaisen profiilin alkuajan yli, ja oireena on luku, joka hyppää taaksepäin, kun toinen tunneli käynnistyy.
Uudelleenyhdistämisen käyttäytyminen ansaitsee oman testinsä, koska juuri siinä uskottava suunnittelu ilmoittaa hiljaa väärän asian. Pakota uudelleenkäynnistys pudottamalla vastapuoli tai lähettämällä prosessille signaali ja vertaa sitten liitännän tilaa tiedostoon. Aikaleiman pitäisi siirtyä eteenpäin hetkellä, jolloin tunneli palaa.
Palvelimen puolella tilatiedosto kantaa connected-since-arvon asiakasohjelmaa kohden, ja se vastaa eri kysymykseen: milloin palvelin näki kyseisen vastapuolen viimeksi. Käytä sitä ristitarkistukseen, älä korvaajana, sillä se katoaa kuvaamansa istunnon mukana. Kumpikaan mittaus ei kerro mitään tunnelin takana olevan sovelluksen kunnosta.
Aja kolme tarkistusta, jotka nappaavat järjestysvirheet
Testaa tavallinen yhteys, pakotettu uudelleenyhdistäminen ja puhdas pysäytys ja lue liitäntäluettelo ja tiedosto yhdessä kunkin jälkeen. Leima, joka on yhä paikallaan puhtaan pysäytyksen jälkeen, tai tiedosto, joka väittää tunnelia, jota liitäntäluettelossa ei ole, osoittaa suoraan koukkujen järjestykseen. Aja tarkistukset palvelun käyttäjänä ja palvelun poluilla, koska root-komento tulkki voi nähdä toisen tiedoston ja antaa itsevarman väärän vastauksen. Jätä sitten hidas kyselijä lukemaan tiedostoa ja varmista, ettei se koskaan kirjoita siihen.
Kysely kuudenkymmenen sekunnin välein kattaa hälytykset, eikä minkään koukun pitäisi luottaa siihen, että kyselijä on elossa. Pidä ne kaksi vastuuta erillään, niin luku pysyy luotettavana, kun kumpi tahansa puoli otetaan uudelleen käyttöön.