Et skrivebordsgrensesnitt holder managementtilkoblingen, så et overvåkingsskript som prøver å åpne sin egen, leser ingenting eller, verre, slutter grensesnittet å svare på prompter. Den vanlige konklusjonen er at daemonen er ustabil. I fellesskapsdaemonen er begrensningen tilsiktet: kontrollgrensesnittet betjener én tilkoblet managementklient om gangen, og det tallet har ingenting å gjøre med hvor mange brukere VPN kan bære.

Én socket, én innehaver

Managementkanalen godtar én tilkoblet klient. Når en andre ankommer mens den første er aktiv, venter den eller blir avvist, og det finnes ingen parallell abonnentmodus skjult bak et valg. Å koble fra den nåværende innehaveren lar daemonen godta den neste, noe som er en overlevering og ikke en andre kanal.

Det gjør hvert ekstra verktøy til en konkurrent. Eier grensesnittet tilkoblingen, klarer et pollende skript ikke å koble seg på, eller først etter at grensesnittet har gitt opp, og sekvensen gjentas ved neste gjenoppkobling. Kobler skriptet seg på først, mister grensesnittet kontrollveien sin, og promptene slutter å virke. Ingen av verktøyene rapporterer konflikten, fordi hvert av dem bare ser sin egen mislykkede kommando.

What you needMechanism that fitsWhat it cannot do
Periodic list of connected clientsStatus file written on an intervalDeliver events as they happen
Interactive prompts and session controlThe single management connectionServe two controllers at once
Multiple consumers of eitherOne owner process that fans outExist without you writing it

Bestem hvilken komponent som eier kontrollen

Velg én innehaver for den interaktive kanalen og la den være det eneste som kobler til. Et grensesnitt som styrer tilkoblingen, et skript som svarer på autentiseringsprompter og en kontroller som avslutter økter regnes alle som innehavere, og bare én kan ha rollen.

Når et grensesnitt eier tilkoblingen, bruk integrasjonen grensesnittet tilbyr i stedet for å kjempe mot det. Å konkurrere med innehaveren om socketen gir sporadiske feil som virker tilfeldige for brukerne, og den som feilsøker ser oftest bare andre halvdel av kappløpet. Noter hvilken prosess som kobler til først etter en omstart, fordi den rekkefølgen avgjør hver gang hvem som vinner. En overvåking som starter før grensesnittet beholder kanalen til grensesnittet gir opp.

Bruk statusøyeblikksbilder for innsamlerne

De fleste overvåkingsbehov trenger en liste, ikke en samtale. En periodisk statusfil svarer på det uten å røre kontrollkanalen, og den fortsetter å virke mens grensesnittet forblir tilkoblet.

status /run/openvpn/server.status 10
management /run/openvpn/server.sock unix

Intervallet er ferskhetsbudsjettet, så sett det etter hva dashbordet faktisk trenger og ikke etter den minste verdien som virker trygg. Et øyeblikksbilde som skrives hvert par sekunder er billig; et skript som gjenoppkobler til kontrollsocketen hvert par sekunder er det ikke, fordi hver gjenoppkobling konkurrerer med innehaveren.

Et øyeblikksbilde er ikke en historikk og ikke en hendelsesstrøm. Tilkoblinger som kommer og går innenfor ett intervall vises aldri, så et revisjonskrav kan ikke oppfylles ved å polle en fil som overskriver seg selv. Hvis du må vite om en bruker i det hele tatt var tilkoblet, er øyeblikksbildet feil instrument.

Spredning er en design, ikke en modus

Hvis flere forbrukere virkelig trenger levende managementdata, sett én betrodd komponent foran socketen og la den publisere nøye utvalgte observasjoner til resten. Den komponenten eier gjenoppkoblingen, autentiseringspromptene og beslutningen om hva som er trygt å eksponere.

Bygg den bevisst: definer hvilke spørringer som er tillatt, logg hvem som spurte, og unngå å gjøre spredningslaget til et fjernkontrollpanel ved et uhell. Daemonen har ingen flerklientmodus å slå på, og ingen konfigurasjonslinje lager en. Behandle innehaveren som en del av sikkerhetsgrensen, fordi den holder et grensesnitt som kan koble fra folk. En omstart bør være en rutinehandling med en dokumentert gjenopprettingsvei.

Behandle socketen som privilegium, ikke som statistikk

Managementgrensesnittet kan koble fra brukere, endre tilstand og lese hendelser som navngir personer. Passordet autentiserer klienten og krypterer ikke transporten, så en nettverkslytter eksponerer samtalen for alle som kan observere den.

Foretrekk en lokal socket eller en strengt begrenset lytter, og kontroller hvilken prosess innsamleren din faktisk henvender seg til, siden serverprodukter leverer egne management-API-er som oppfører seg annerledes. En innsamler rettet mot feil daemon gir sikre, gale konklusjoner. Bekreft stien og den eide prosessen før du feilsøker en spørring som ikke returnerer noe.

Relaterte artikler