Samo jedan klijent upravljanja: zašto vaš nadzornik izbacuje grafičko sučelje
Upravljački socket prihvaća jednu vezu istovremeno. Drugi pretplatnik ili se ne može priključiti ili preuzima kontrolu od komponente koja posjeduje upite.
Stolno grafičko sučelje drži upravljačku vezu, pa skripta za nadzor koja pokuša otvoriti vlastitu ne čita ništa ili, što je gore, sučelje prestaje odgovarati na upite. Uobičajen zaključak je da je demon nestabilan. U zajedničkom demonu ograničenje je namjerno: upravljačko sučelje poslužuje jednog povezanog klijenta upravljanja istovremeno, a taj broj nema nikakve veze s tim koliko korisnika VPN može nositi.
Jedan socket, jedan vlasnik
Kanal upravljanja prihvaća jednog povezanog klijenta. Kad drugi stigne dok je prvi aktivan, čeka ili biva odbijen, i nema nikakvog paralelnog načina pretplatnika skrivenog iza opcije. Odspajanje trenutnog vlasnika omogućuje demonu da prihvati sljedećeg, što je predaja, a ne drugi kanal.
To čini svaki dodatni alat konkurentom. Ako sučelje posjeduje vezu, skripta za anketiranje ili se ne priključi ili uspije tek nakon što sučelje odustane, a slijed se ponavlja pri sljedećem ponovnom spajanju. Ako se skripta priključi prva, sučelje gubi svoj put upravljanja i njegovi upiti prestaju raditi. Nijedan alat ne prijavljuje sukob, jer svaki vidi samo vlastitu neuspjelu naredbu.
| 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 |
Odlučite koja komponenta posjeduje kontrolu
Odaberite jednog vlasnika interaktivnog kanala i pustite da bude jedino što se spaja. Sučelje koje upravlja vezom, skripta koja odgovara na upite autentifikacije i kontroler koji prekida sesije svi se računaju kao vlasnici, a ulogu može držati samo jedan.
Kad sučelje posjeduje vezu, upotrijebite integraciju koju ono nudi umjesto da se s njim borite. Utrka s vlasnikom za socket stvara isprekidane kvarove koji se korisnicima čine slučajnima, a onaj koji otklanja pogreške obično vidi samo drugu polovicu utrke. Zabilježite koji se proces spaja prvi nakon ponovnog pokretanja, jer taj poredak svaki put odlučuje tko pobjeđuje. Nadzornik koji krene prije sučelja zadržat će kanal dok sučelje ne odustane.
Koristite snimke stanja za kolektore
Većini nadzornih potreba treba popis, a ne razgovor. Povremena datoteka stanja odgovara na to bez diranja upravljačkog kanala i nastavlja raditi dok sučelje ostaje povezano.
status /run/openvpn/server.status 10
management /run/openvpn/server.sock unix
Interval je proračun svježine, zato ga postavite prema onome što nadzorna ploča stvarno treba, a ne prema najmanjoj vrijednosti koja se čini sigurnom. Snimka zapisana svakih nekoliko sekundi je jeftina; skripta koja se svakih nekoliko sekundi ponovno spaja na upravljački socket nije, jer svako ponovno spajanje konkurira vlasniku.
Snimka nije povijest i nije tok događaja. Veze koje dođu i odu unutar jednog intervala nikad se ne pojavljuju, pa se zahtjev za revizijom ne može ispuniti anketiranjem datoteke koja sama sebe prepisuje. Ako morate znati je li se korisnik uopće spojio, snimka je pogrešan instrument.
Razgranavanje je dizajn, a ne način rada
Ako više potrošača doista treba podatke upravljanja uživo, stavite jednu pouzdanu komponentu pred socket i pustite je da objavljuje usko odabrana opažanja ostalima. Ta komponenta posjeduje ponovno spajanje, upite autentifikacije i odluku o tome što je sigurno izložiti.
Izgradite je namjerno: definirajte koji su upiti dopušteni, bilježite tko je pitao i izbjegnite da sloj razgranavanja slučajno postane daljinski upravljač. Demon nema način rada s više klijenata koji bi se mogao uključiti i nijedan konfiguracijski redak ga ne stvara. Tretirajte vlasnika kao dio sigurnosne granice, jer drži sučelje koje može odspojiti ljude. Njegovo ponovno pokretanje trebalo bi biti rutinska operacija s dokumentiranim putem oporavka.
Tretirajte socket kao privilegiju, a ne kao metrike
Upravljačko sučelje može odspojiti korisnike, promijeniti stanje i čitati događaje u kojima se imenuju osobe. Njegova lozinka autentificira klijenta i ne šifrira prijenos, pa mrežni slušač razgovor izlaže svakome tko ga može promatrati.
Prednost dajte lokalnom socketu ili strogo ograničenom slušaču i provjerite kojem se procesu vaš kolektor zapravo obraća, jer serverski proizvodi donose vlastite API-je upravljanja koji se ponašaju drukčije. Kolektor usmjeren na pogrešnog demona daje samouvjerene i pogrešne zaključke. Potvrdite putanju i proces vlasnika prije nego počnete otklanjati pogreške upita koji ništa ne vraća.