Eng Quota, déi zréckgesat gëtt, all Kéier wann den Tunnel sech nei verbënnt, ass keng Limite, an dat ass genee wat een kritt, wann e Byte-Zieler op e VPN-Server geschrauft gëtt, ouni eng Plaz fir dauerhaften Zoustand. Den Zieler gehéiert zu enger Sessioun; d'Quota gehéiert zu enger Persoun oder engem Apparatskontrakt. All d'Schwieregkeet vun der Funktioun kënnt aus dësem Mëssverhältnis, dofir ginn d'Prüfungen hei drënner drëm, wou den Zoustand wunnt a wéi eng Schicht decidéieren däerf.

Bënnt d'Quota un e Kont, net un en Tunnel

Fänkt domat un, d'Subjekt vun der Quota ze benennen. Eng Persoun kann dräi Apparatszertifikater hunn, an keen dovun sollt en onofhängegt monatlecht Budget kréien, just well se sech getrennt authentifizéieren. E stabile Kont-Identifiant, deen Neiverbindungen, nei Tunneladressen an en Ëmzuch op en zweeten Gateway iwwersteet, ass deen eenzegen Anker, deen eng Quota benotze kann. Den allgemenge Numm vun engem Zertifikat funktionéiert als dëse Schlëssel nëmmen, wann Är Ausstellungsrichtlinn ee Kont pro Numm garantéiert.

Eng zougewisen Tunneladress ass ni d'Äntwert. Adressen ginn recycléiert, Pools gi gedeelt, an dee selwechte Kont kann zweemol op zwee Gateways an der selwechter Minutt erschéngen. Wann de Buch iwwer eng Adress schlësselt, duet ofbriechen an nei verbannen genuch, fir den Tank erëm ze fëllen.

Schreift genuch pro Sessioun op, fir datt d'Arithmetik auditbar ass: de Kont, de Facturéierungsperiod, d'Gateway-Instanz, d'Sessiounsidentitéit, déi lescht observéiert Zieler an den engagéierten Total. Huelt eng Daemon-Startgeneratioun an d'Sessiounsidentitéit op, well en nei gestarte Server Client-IDen erëm benotzt an eng naiv Iwwereneestëmmung déi viregt Basislinn ierwe géif.

Setzt d'Eenheet, d'Richtung an d'Grenz vum Zrécksetze fest

Véier Definitioune musse schrëftlech festgeluecht ginn, ier eng Erfaassung ufänkt. Zielt d'Quota d'Byten, déi de Client schéckt, déi, déi en empfänkt, oder d'Zomm vun deenen zwou? Ass e Gigabyte 10^9 Byten oder 2^30? Zu wéi enger lokaler Stonn an a wéi enger Zäitzon dréit de Period ëm? A wat moosst den Zieler genee, wann den Tunnel-Overhead an d'Neisendungen enthalen sinn, awer d'Dateigréisst vun der Applikatioun an d'Rechnung vun engem Fournisseur net?

Keng vun dëse Choixen ass falsch, awer d'Implementatioun an d'Zuel, déi de Client gesäit, musse sech eens sinn. Zwou Hälften vum selwechte System, déi sech iwwer GiB net eens sinn, oder iwwer en Ëmdréien, dat um Mëtternuecht UTC amplaz lokaler Zäit geschitt, produzéieren genee déi Zort Ticket, déi d'Vertrauen an déi ganz Quota ënnergrueft.

Maacht aus Byte-Totale en eenzegen ugefuerderten Delta

D'Verwaltungsinterface mellt periodesch BYTECOUNT_CLI-Zeilen, déi eng Client-ID an accumuléiert Byte-Totale pro Richtung droen, an de bytecount-Befehl setzt, wéi dacks déi ukommen. Vum Server senger Siicht zielt déi empfaangen Zuel d'Byten, déi de Client geschéckt huet, an déi gesente Zuel zielt d'Byten, déi him geliwwert goufen. Setzt den Intervall op eppes, wat de Buch verdroe kann; en ganz kuerzen Intervall kaaft eng Präzisioun, déi Dir tatsächlech net kritt.

Eng Aschränkung formt de ganzen Design: de Verwaltungssocket akzeptéiert eng eenzeg Kontrollverbindung. En Iwwerwaachungsexporteur, eng GUI an Äre Controller kënnen net jiddwereen seng eege opmaachen. Entscheet, wéi ee Prozess de Kanal besëtzt, a loosst déi aner den Zoustand doraus liesen, well dës Interface administrativ Aktioune gëtt an et och sou net baussent dem Host sollt exponéiert ginn.

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

Bestätegt déi nei Basislinnen an de Verbrauchszouwuess zesummen, sou datt d'Erëmspillen vun enger Probe näischt berechent, amplaz duebel ze berechnen. En Zieler, deen zréck geet, ass en Zeechen, keng Schold: et heescht, datt d'Sessioun ersat gouf oder den Daemon nei gestart ass, an déi richteg Äntwert ass d'Sessiounsidentitéit ze versöhnen, amplaz en negativen Betrag ze kredittéieren.

Den Ofbrochspad brauch déiselwecht Suergfalt. Wann en finalen Evenement Totalen um Enn vun der Sessioun dréit, berechent nëmmen den Ënnerscheed zum lescht bestätegte Probe. Den ganze Total derbäizesetzen, nodeems d'periodesch Probe scho berechent gouf, ass déi heefegst duebel Zuelung an hausgemaachte Quota-Systemer. Sessiounen, déi eng Periodgrenz iwwerschreiden, brauchen och eng Regel, well een eenzegen Endtotal keng Informatioun dréit, wéini d'Byten d'Mëtternuecht iwwerschratt hunn.

Loosst d'Erschöpfung den Zougang verweigeren, net nëmmen den Tunnel ëmbréngen

Wann e Kont seng Limite erreecht, mussen zwou Saachen geschéien: bestoend Sessiounen enden, an nei ginn ofgelehnt. De Verwaltungsprotokoll bitt client-kill pro Client-ID, wat déi éischt Halschent mécht, soulaang Dir all lieweg Sessioun vum Kont ophëllt, amplaz déi eng Adress ëmzebréngen, déi Dir zoufälleg gemierkt hutt.

Déi zweet Halschent ass do, wou Quota-Designen duerchfalen. Nëmmen ëmbrénge ass e Course géint dem Client seng Neiverbindungsschleef, déi fräiwëlleg e puer Sekonnen méi spéit erëmkënnt. Den Zougang muss de gedeelte Buch consultéieren, an an enger Ausrullung mat multiple Gateways kann dës Prüfung net eng Datei pro Maschinn sinn. All Instanz, déi eng Umeldung akzeptéiere kann, muss deen selwechten erschöpfte Zoustand gesinn.

Token-baséiert Neiverbindungen verdéngen hir eege Prüfung. OpenVPN 2.6 kann en Sessiounstoken intern mat auth-gen-token validéieren an den externen Authentifikatiounsopruff iwwersprangen, deen Äre Controller benotzt huet, fir de Plafong duerchzesetzen. En Token, deen nach gëlteg ass, beweist dofir Identitéit, net déi reschtlech Quota, an all nei Clientinstanz muss nach ëmmer de Buch consultéieren. Wann Dir amplaz management-client-auth aktivéiert, gëtt den Controller den Authentifizéierer an ierft d'Flicht, de Sessiounszoustand selwer ze analyséieren an ofgelaf oder ongëlteg Tokenen eegestänneg ofzeleenen.

Akzeptéiert d'Iwwerschreiden, déi d'Prob hannerléisst

Periodesch Observatioun plus Ofbriechen ginn Iech eng geprobte Quota mat enger bekannter Toleranz. E Client kann ëm ongeféier en Iwwerwaachungsintervall plus d'Zäit, déi den Controller brauch fir ze handelen, iwwerschreiden, an concurrent Sessiounen op engem Kont multiplizéieren dës Fënster. Soet et an der Interface, amplaz eng exakt Ofschneidung um leschte Byte ze annoncéieren, déi Dir net kënnt liwweren.

En echte haarde Plafong ass en anert Ingenieursproblem: Duerchsetzung bannent dem Weiderleitungspad, un dee selwechte Kont iwwer Sessiounen gebonnen. Zieler méi séier liesen ass net datselwecht, an et iwwersteet keen Client, deen einfach méi Tunnelen opmécht.

Virun der Ausrullung fuert d'Acceptatiounsfäll aus, déi naiv Implementatiounen zerbriechen: widderholl Neiverbindungen, zwee Apparater gläichzäiteg, Neistarts vum Controller a Gateway, en verluerenen Ofbrochsenement, en Ëmdréien an der Mëtt vun enger Sessioun an e Versuch vun enger Token-Neiverbindung direkt no der Erschöpfung. Duerno entscheet de Fehlermodus fir Stéierungen an der Comptabilitéit. En dauerhafte Buch schützt de Verbrauch, deen Dir opgeholl hutt; et kann Observatiounen, déi ni ukomm sinn, net erëm erwächen, an de Client verdéngt ze wëssen, an wéi enger vun dësen zwou Situatiounen hien ass.

Ähnlech Artikelen