Minne kuukausittainen datakiintiö kuuluu OpenVPN-tiliä kohden
Kiintiö, joka nollautuu joka uudelleenyhdistämisellä, ei ole raja. Seuraa käyttöä tileittäin, veloita jokainen tavuerotus kerran ja tee loppumisesta sisäänpääsyn estävä.
Kiintiö, joka nollautuu aina tunnelin yhdistäessä uudelleen, ei ole raja, ja juuri sen saa, kun tavulaskuri ruuvataan VPN-palvelimeen ilman paikkaa pysyvälle tilalle. Laskuri kuuluu istuntoon; kiintiö kuuluu henkilölle tai laitesopimukselle. Kaikki ominaisuuden vaikeus tulee tästä epäsuhdasta, joten alla olevat tarkistukset käsittelevät sitä, missä tila elää ja mikä kerros saa päättää.
Kiinnitä kiintiö tilille, älä tunnelille
Aloita nimeämällä kiintiön kohde. Yhdellä henkilöllä voi olla kolme laitevarmennetta, eikä kenenkään niistä pitäisi saada itsenäistä kuukausibudjettia vain siksi, että ne todentavat erikseen. Vakaa tilin tunniste, joka kestää uudelleenyhdistämiset, uudet tunneliosoitteet ja siirtymisen toiselle yhdyskäytävälle, on ainoa ankkuri, jota kiintiö voi käyttää. Varmenteen yleisnimi toimii tuona avaimena vain, jos myöntökäytäntösi takaa yhden tilin nimeä kohden.
Annettu tunneliosoite ei ole koskaan vastaus. Osoitteita kierrätetään, altaita jaetaan, ja sama tili voi näkyä kahdesti kahdella yhdyskäytävällä samana minuuttina. Jos pääkirja avaintaa osoitteen mukaan, irrottaminen ja uudelleen yhdistäminen riittää säiliön täyttämiseen.
Kirjaa istuntoa kohden tarpeeksi, jotta aritmetiikka on tarkastettavissa: tili, laskutuskausi, yhdyskäytävän instanssi, istunnon identiteetti, viimeksi havaitut laskurit ja vahvistettu kokonaismäärä. Sisällytä istunnon identiteettiin daemonin käynnistyssukupolvi, koska uudelleen käynnistetty palvelin käyttää asiakastunnuksia uudelleen ja naiivi vastaavuus perisi edellisen perusviivan.
Vahvista yksikkö, suunta ja nollausraja
Neljä määritelmää on lyötävä kirjallisesti lukkoon ennen minkään keräämisen alkua. Laskeeko kiintiö tavut, jotka asiakas lähettää, tavut, jotka se vastaanottaa, vai molempien summan? Onko gigatavu 10^9 tavua vai 2^30? Minä paikallisena hetkenä ja missä aikavyöhykkeessä kausi vaihtuu? Ja mitä laskuri oikeastaan mittaa, kun tunnelin yleiskulut ja uudelleenlähetykset sisältyvät mutta sovellustiedoston koko ja palveluntarjoajan lasku eivät?
Mikään näistä valinnoista ei ole väärä, mutta toteutuksen ja asiakkaan näkemän luvun on oltava yhtä mieltä. Saman järjestelmän kahden puoliskon erimielisyys GiB:stä tai vaihtumisesta UTC-keskiyönä paikallisen ajan sijaan tuottaa juuri sellaisen tiketin, joka murentaa luottamuksen koko kiintiöön.
Muunna tavusummat yhdeksi veloitetuksi erotukseksi
Hallintaliittymä raportoi säännöllisiä BYTECOUNT_CLI-rivejä, jotka kantavat asiakastunnuksen sekä kumulatiiviset tavusummat kumpaankin suuntaan, ja bytecount-komento asettaa, kuinka usein ne saapuvat. Palvelimen näkökulmasta vastaanotettu luku laskee tavut, jotka asiakas lähetti, ja lähetetty luku laskee tavut, jotka sille toimitettiin. Aseta väli johonkin, minkä pääkirja pystyy nielemään; hyvin lyhyt väli ostaa tarkkuutta, jota et tosiasiassa saa.
Yksi rajoitus muovaa koko suunnittelun: hallintapistoke hyväksyy yhden ohjausyhteyden. Valvontaviejä, GUI ja ohjaimesi eivät voi kukin avata omaansa. Päätä, mikä prosessi omistaa kanavan, ja anna muiden lukea tila siitä, koska tämä liittymä antaa hallinnollisia toimia eikä sitä muutenkaan pitäisi altistaa isännän ulkopuolelle.
rx_delta = sample.rx_now - session.prev_rx
tx_delta = sample.tx_now - session.prev_tx
charge = rx_delta + tx_delta
# same transaction:
ledger.total += charge
session.prev_rx, session.prev_tx = sample.rx_now, sample.tx_now
Vahvista uudet perusviivat ja käytön lisäys yhdessä, jotta näytteen toistaminen ei veloita mitään kahdesti veloittamisen sijaan. Taaksepäin liikkuva laskuri on signaali, ei velka: se tarkoittaa, että istunto korvattiin tai daemon käynnistettiin uudelleen, ja oikea vastaus on täsmäyttää istunnon identiteetti eikä hyvittää negatiivista summaa.
Katkaisupolku vaatii saman huolen. Jos lopetustapahtuma kantaa istunnon lopun kokonaismääriä, veloita vain erotus viimeksi vahvistetusta näytteestä. Koko summan lisääminen sen jälkeen, kun säännöllinen näytteenotto on jo veloitettu, on yleisin kaksinkertainen laskenta kotitekoisissa kiintiöjärjestelmissä. Kauden rajan ylittävät istunnot tarvitsevat myös säännön, koska yksi loppusumma ei kerro, milloin tavut ylittivät keskiyön.
Tee loppumisesta sisäänpääsyn eväävä, älä vain tapa tunnelia
Kun tili saavuttaa rajansa, on tapahduttava kaksi asiaa: olemassa olevat istunnot päättyvät ja uudet hylätään. Hallintaprotokolla tarjoaa client-killin asiakastunnuksen mukaan, mikä hoitaa ensimmäisen puoliskon, kunhan luettelet jokaisen tilin elävän istunnon sen sijaan, että tapat sen yhden osoitteen, jonka satuin huomaamaan.
Toinen puolisko on se, missä kiintiösuunnitelmat epäonnistuvat. Pelkkä tappaminen on kilpajuoksu asiakkaan uudelleenyhdistämiskierroksen kanssa, joka tulee mielellään takaisin sekunteja myöhemmin. Sisäänpääsyn on kysyttävä jaettua pääkirjaa, eikä moniyhdyskäytäväisessä käyttöönotossa tuo tarkistus voi olla konekohtainen tiedosto. Jokaisen instanssin, joka voi hyväksyä kirjautumisen, on nähtävä sama loppuun käytetty tila.
Tunnuspohjaiset uudelleenyhdistämiset ansaitsevat oman testinsä. OpenVPN 2.6 voi validoida istuntotunnuksen sisäisesti auth-gen-tokenilla ja ohittaa ulkoisen todennuskutsun, jota ohjaimesi käytti rajan valvontaan. Siksi yhä voimassa oleva tunnus todistaa identiteetin, ei jäljellä olevaa kiintiötä, ja jokaisen uuden asiakasinstanssin on silti kysyttävä pääkirjaa. Jos sen sijaan otat käyttöön management-client-authin, ohjaimesta tulee todentaja ja se perii velvollisuuden jäsentää istunnon tila itse ja hylätä vanhentuneet tai virheelliset tunnukset.
Hyväksy ylitys, jonka näytteenotto aiheuttaa
Säännöllinen havainnointi ja irrottaminen antavat sinulle näytteistetyn kiintiön, jolla on tunnettu toleranssi. Asiakas voi ylittää suunnilleen yhden raportointivälin sekä ajan, joka ohjaimelta kuluu toimimiseen, ja yhden tilin samanaikaiset istunnot kertovat tuon ikkunan. Sano se liittymässä sen sijaan, että mainostat tarkkaa viimeisen tavun katkaisua, jota et pysty toimittamaan.
Todellinen kova yläraja on eri insinööriongelma: valvonta edelleenlähetyspolun sisällä, sidottuna samaan tiliin istuntojen yli. Laskurien nopeampi lukeminen ei ole sama asia, eikä se kestä asiakasta, joka yksinkertaisesti avaa lisää tunneleita.
Ennen käyttöönottoa aja hyväksyntätapaukset, jotka rikkovat naiivit toteutukset: toistuvat uudelleenyhdistämiset, kaksi laitetta yhtä aikaa, ohjaimen ja yhdyskäytävän uudelleenkäynnistykset, kadonnut irrotustapahtuma, kauden vaihtuminen kesken istunnon ja tunnuksella tehty uudelleenyhdistämisyritys heti loppumisen jälkeen. Päätä sitten kirjanpidon katkosten vikatila. Pysyvä pääkirja suojaa kirjaamasi käytön; se ei voi herättää henkiin havaintoja, jotka eivät koskaan saapuneet, ja asiakas ansaitsee tietää, kummassa näistä kahdesta tilanteesta hän on.