Vain yksi hallintaklientti: miksi monitorisi potkaisee käyttöliittymän ulos
Hallintasocket ottaa yhden yhteyden kerrallaan. Toinen tilaaja ei saa liityttyä tai varastaa ohjauksen komponentilta, joka omistaa kehotteet.
Työpöytäkäyttöliittymä pitää hallintayhteyden, joten valvontaskripti yrittää avata oman eikä lue mitään tai, pahempaa, käyttöliittymä lakkaa vastaamasta kehotteisiin. Tavallinen johtopäätös on, että daemon on epävakaa. Yhteisön daemonissa rajoitus on tarkoituksellinen: ohjausrajapinta palvelee yhtä liittynyttä hallintaklienttiä kerrallaan, eikä tuo luku liity mitenkään siihen, kuinka monta käyttäjää VPN voi kantaa.
Yksi socket, yksi haltija
Hallintakanava hyväksyy yhden liittyneen klientin. Kun toinen saapuu ensimmäisen ollessa aktiivinen, se odottaa tai hylätään, eikä mitään rinnakkaista tilaajatilaa ole piilotettu valinnan taakse. Nykyisen haltijan irrottaminen antaa daemonin hyväksyä seuraavan, mikä on luovutus eikä toinen kanava.
Se tekee jokaisesta lisätyökalusta kilpailijan. Jos käyttöliittymä omistaa yhteyden, kyselyskripti ei saa liityttyä tai onnistuu vasta, kun käyttöliittymä on luovuttanut, ja sarja toistuu seuraavassa uudelleenyhdistämisessä. Jos skripti liittyy ensin, käyttöliittymä menettää ohjauspolkunsa ja sen kehotteet lakkaavat toimimasta. Kumpikaan työkalu ei raportoi ristiriitaa, koska kumpikin näkee vain oman epäonnistuneen komentonsa.
| 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 |
Päätä, mikä komponentti omistaa ohjauksen
Valitse vuorovaikutteiselle kanavalle yksi haltija ja anna sen olla ainoa, joka yhdistää. Käyttöliittymä, joka hallitsee yhteyttä, skripti, joka vastaa todennuskehotteisiin, ja ohjain, joka päättää istuntoja, lasketaan kaikki haltijoiksi, ja vain yksi voi pitää roolia.
Kun käyttöliittymä omistaa yhteyden, käytä sitä integraatiota, jonka käyttöliittymä tarjoaa, sen kanssa taistelemisen sijaan. Kilpajuoksu haltijan kanssa socketista tuottaa ajoittaisia vikoja, jotka näyttävät käyttäjistä satunnaisilta, ja vianetsijä näkee yleensä vain kilpailun toisen puoliskon. Merkitse muistiin, mikä prosessi yhdistää ensimmäisenä uudelleenkäynnistyksen jälkeen, koska tuo järjestys ratkaisee joka kerta voittajan. Ennen käyttöliittymää käynnistyvä monitori pitää kanavan, kunnes käyttöliittymä luovuttaa.
Käytä tilannekuvia kerääjille
Useimmat valvontatarpeet kaipaavat luetteloa, eivät keskustelua. Säännöllinen tilatiedosto vastaa siihen koskematta ohjauskanavaan, ja se jatkaa toimintaansa, kun käyttöliittymä pysyy liittyneenä.
status /run/openvpn/server.status 10
management /run/openvpn/server.sock unix
Väli on tuoreuden budjetti, joten aseta se siihen, mitä kojelauta todella tarvitsee, äläkä pienimpään turvalliselta vaikuttavaan arvoon. Muutaman sekunnin välein kirjoitettava tilannekuva on halpa; skripti, joka yhdistää uudelleen ohjaussocketiin muutaman sekunnin välein, ei ole, koska jokainen uudelleenyhdistäminen kilpailee haltijan kanssa.
Tilannekuva ei ole historia eikä tapahtumavirta. Yhden välin sisällä tulevat ja lähtevät yhteydet eivät koskaan näy, joten auditointivaatimusta ei voi täyttää kyselemällä tiedostoa, joka kirjoittaa itsensä yli. Jos sinun on tiedettävä, oliko käyttäjä ylipäätään yhteydessä, tilannekuva on väärä väline.
Hajautus on suunnittelu, ei tila
Jos useat kuluttajat todella tarvitsevat reaaliaikaista hallintadataa, aseta yksi luotettu komponentti socketin eteen ja anna sen julkaista tarkoin valittuja havaintoja muille. Tämä komponentti omistaa uudelleenyhdistämisen, todennuskehotteet ja päätöksen siitä, mikä on turvallista paljastaa.
Rakenna se tarkoituksella: määrittele, mitkä kyselyt ovat sallittuja, kirjaa kuka kysyi, ja vältä muuttamasta hajautuskerrosta vahingossa kauko-ohjauspaneeliksi. Daemonissa ei ole moniklienttitilaa, jonka voisi ottaa käyttöön, eikä mikään asetusrivi luo sellaista. Kohtele haltijaa osana turvarajaa, koska se pitää rajapintaa, joka voi irrottaa ihmisiä. Uudelleenkäynnistyksen pitäisi olla rutiinitoimenpide, jolla on dokumentoitu palautumispolku.
Kohtele socketia etuoikeutena, älä mittareina
Hallintarajapinta voi irrottaa käyttäjiä, muuttaa tilaa ja lukea tapahtumia, joissa nimetään ihmisiä. Sen salasana todentaa klientin eikä salaa siirtoa, joten verkkokuuntelija paljastaa keskustelun kenelle tahansa, joka voi havaita sen.
Suosi paikallista socketia tai tiukasti rajoitettua kuuntelijaa, ja tarkista, mihin prosessiin kerääjäsi todella ottaa yhteyttä, sillä palvelintuotteet toimittavat omat hallinta-API:nsa, jotka käyttäytyvät eri tavalla. Väärään daemoniin osoitettu kerääjä tuottaa varmoja, vääriä johtopäätöksiä. Vahvista polku ja omistava prosessi ennen kuin etsit vikaa kyselystä, joka ei palauta mitään.