Bare én managementklient: derfor kaster overvåkingen ut grensesnittet
Management-socketen tar én tilkobling om gangen. En andre abonnent klarer ikke å koble seg på eller stjeler kontrollen fra komponenten som eier promptene.
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 need | Mechanism that fits | What it cannot do |
|---|---|---|
| Periodic list of connected clients | Status file written on an interval | Deliver events as they happen |
| Interactive prompts and session control | The single management connection | Serve two controllers at once |
| Multiple consumers of either | One owner process that fans out | Exist 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.