Kuhu kuulub igakuine andmemaht OpenVPN-konto kohta
Kvoot, mis lähtestub igal taasühendusel, ei ole piirang. Jälgi kasutust konto kaupa, võta iga baidide vahe üks kord, ja lase ammendumisel sissepääsu blokeerida.
Kvoot, mis lähtestub iga kord, kui tunnel uuesti ühendub, ei ole piirang, ja täpselt selle saad, kui baidilugeja kruvitakse VPN-serveri külge ilma kohata püsiva oleku jaoks. Lugeja kuulub sessioonile; kvoot kuulub inimesele või seadmelepingule. Kogu funktsiooni raskus tuleb sellest ebakõlast, seega allpool olevad kontrollid käsitlevad seda, kus olek elab ja millisel kihil on lubatud otsustada.
Kinnita kvoot konto, mitte tunneli külge
Alusta kvoodi subjekti nimetamisest. Ühel inimesel võib olla kolm seadmesertifikaati ja ükski neist ei peaks saama iseseisvat igakuist eelarvet ainult sellepärast, et need autendivad end eraldi. Stabiilne kontoidentifikaator, mis peab vastu taasühendustele, uutele tunneliaadressidele ja teisele lüüsile kolimisele, on ainus ankur, mida kvoot saab kasutada. Sertifikaadi üldnimi toimib selle võtmena ainult siis, kui sinu väljaandmispoliitika tagab ühe konto nime kohta.
Määratud tunneliaadress ei ole kunagi vastus. Aadresse ringlussevõetakse, basseinid on ühised ja sama konto võib samal minutil kahel lüüsil kaks korda ilmuda. Kui pearaamat põhineb aadressil, piisab tankimiseks lahtiühendamisest ja uuesti ühendamisest.
Salvesta sessiooni kohta piisavalt, et aritmeetika oleks auditeeritav: konto, arveldusperiood, lüüsi eksemplar, sessiooni identiteet, viimati vaadeldud lugejad ja kinnitatud kogusumma. Lisa sessiooni identiteeti deemonile käivituspõlvkond, sest taaskäivitatud server kasutab kliendi ID-sid uuesti ja naiivne vaste päriks eelmise baasjoone.
Fikseeri ühik, suund ja lähtestuspiir
Enne mis tahes kogumise algust tuleb kirjalikult paika panna neli määratlust. Kas kvoot loeb baite, mille klient saadab, baite, mille ta vastu võtab, või mõlema summat? Kas gigabait on 10^9 baiti või 2^30? Mis kohalikul tunnil ja mis ajavööndis periood pöördub? Ja mida lugeja täpselt mõõdab, kui tunneli üldkulud ja kordused on sees, aga rakenduse faili suurus ja teenusepakkuja arve ei ole?
Ükski neist valikutest ei ole vale, aga teostus ja kliendi nähtav number peavad kokku langema. Sama süsteemi kaks poolt, mis ei ole ühel meelel GiB osas või üleminekus, mis toimub UTC keskööl kohaliku aja asemel, toodavad täpselt sellise pileti, mis õõnestab usaldust kogu kvoodi vastu.
Muuda baidisummad üheks võetud vaheks
Haldusliides raporteerib perioodilisi BYTECOUNT_CLI ridu, mis kannavad kliendi ID-d ja kumulatiivseid baidisummasid kummaski suunas, ning käsk bytecount määrab, kui tihti need saabuvad. Serveri vaatenurgast loeb vastuvõetud näitaja baite, mille klient saatis, ja saadetud näitaja loeb baite, mis talle kohale toimetati. Sea intervall millekski, mida pearaamat suudab omaks võtta; väga lühike intervall ostab täpsuse, mida sa tegelikult ei saa.
Üks piirang kujundab kogu lahendust: halduspistik võtab vastu ühe juhtühenduse. Seireeksportija, GUI ja sinu kontroller ei saa igaüks oma ühendust avada. Otsusta, milline protsess kanalit omab, ja lase teistel sellest olekut lugeda, sest see liides annab administratiivseid toiminguid ja seda ei tohiks niikuinii väljapoole hosti paljastada.
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
Kinnita uued baasjooned ja kasutuskasv koos, et valimi kordamine ei võtaks midagi, selle asemel et võtta kaks korda. Tahapoole liikuv lugeja on signaal, mitte võlg: see tähendab, et sessioon asendati või deemon taaskäivitati, ja õige vastus on sessiooni identiteedi sobitamine, mitte negatiivse summa krediteerimine.
Katkestustee vajab sama hoolt. Kui lõpp-sündmus kannab sessiooni lõpu kogusummasid, võta ainult vahe viimasest kinnitatud valimist. Täissumma lisamine pärast seda, kui perioodiline valimine on juba võetud, on kodukootud kvoodisüsteemide kõige tavalisem topeltarvestus. Perioodipiiri ületavad sessioonid vajavad samuti reeglit, sest üks lõppsumma ei kanna teavet selle kohta, millal baidid keskööd ületasid.
Lase ammendumisel sissepääsu keelduda, mitte ainult tunnelit tappa
Kui konto jõuab oma piirini, peab juhtuma kaks asja: olemasolevad sessioonid lõpevad ja uued lükatakse tagasi. Haldusprotokoll pakub client-killi kliendi ID järgi, mis lahendab esimese poole, kui loetled iga konto elusat sessiooni, selle asemel et tappa üks aadress, mida juhtusid märkama.
Teine pool on see, kus kvoodilahendused läbi kukuvad. Üksi tapmine on võidujooks kliendi taasühendussilmuga, mis tuleb hea meelega sekundite pärast tagasi. Sissepääs peab konsulteerima jagatud pearaamatuga ja mitme lüüsiga juurutuses ei saa see kontroll olla masinapõhine fail. Iga eksemplar, mis suudab sisselogimise vastu võtta, peab nägema sama ammendunud olekut.
Märgil põhinevad taasühendused väärivad omaette testi. OpenVPN 2.6 saab sessioonimärki sisemiselt valideerida auth-gen-tokeniga, jättes vahele välise autentimiskutse, mida sinu kontroller kasutas ülempiiri jõustamiseks. Seega tõestab veel kehtiv märk identiteeti, mitte järelejäänud kvooti, ja iga uus kliendieksemplar peab ikkagi pearaamatuga konsulteerima. Kui lubad selle asemel management-client-authi, saab kontrollerist autentija ja ta pärib kohustuse ise sessiooni olekut parsida ning aegunud või kehtetuid märke tagasi lükata.
Nõustu ülelaskmisega, mille valimine tekitab
Perioodiline vaatlus pluss lahtiühendamine annavad sulle teadaoleva tolerantsiga valimipõhise kvoodi. Klient võib üle lasta umbes ühe aruandlusintervalli pluss aja, mis kontrolleril tegutsemiseks kulub, ja ühe konto samaaegsed sessioonid korrutavad selle akna. Ütle seda liideses, selle asemel et kuulutada täpset viimase baidi lõikust, mida sa ei suuda pakkuda.
Tõeline kõva lagi on teine inseneriprobleem: jõustamine edastustee sees, seotud sama kontoga üle sessioonide. Lugejate kiirem lugemine ei ole sama asi ja see ei pea vastu kliendile, kes lihtsalt avab rohkem tunneleid.
Enne kasutuselevõttu jooksuta vastuvõtujuhtumeid, mis murravad naiivseid teostusi: korduvad taasühendused, kaks seadet korraga, kontrolleri ja lüüsi taaskäivitused, kadunud lahtiühendussündmus, üleminek keset sessiooni ja märgitaasühenduse katse vahetult pärast ammendumist. Seejärel otsusta arvestuse katkestuste rikkerežiim. Püsiv pearaamat kaitseb salvestatud kasutust; see ei suuda ellu äratada vaatlusi, mis kunagi ei saabunud, ja klient väärib teada, kumb neist kahest olukorrast tal on.