Slechts één managementclient: waarom je monitor de GUI eruit gooit
De managementsocket neemt één verbinding per keer aan. Een tweede abonnee kan zich niet aanhaken of steelt de besturing van het onderdeel dat de prompts bezit.
Een desktop-GUI houdt de managementverbinding vast, dus een monitoringscript dat er zelf een probeert te openen, leest niets, of erger: de GUI reageert niet meer op prompts. De gebruikelijke conclusie is dat de daemon onbetrouwbaar is. In de community-daemon is die beperking bewust: de besturingsinterface bedient één verbonden managementclient tegelijk, en dat aantal heeft niets te maken met hoeveel gebruikers de VPN kan dragen.
Eén socket, één houder
Het managementkanaal accepteert één verbonden client. Komt er een tweede terwijl de eerste actief is, dan wacht die of wordt hij geweigerd, en er bestaat geen parallelle abonneemodus die achter een optie verborgen zit. De huidige houder loskoppelen laat de daemon de volgende accepteren; dat is een overdracht, geen tweede kanaal.
Daarmee wordt elk extra hulpmiddel een concurrent. Bezit de GUI de verbinding, dan haakt een pollend script niet aan, of pas nadat de GUI heeft opgegeven, en de reeks herhaalt zich bij de volgende herverbinding. Haakt het script eerst aan, dan verliest de GUI zijn besturingspad en werken zijn prompts niet meer. Geen van beide hulpmiddelen meldt het conflict, want elk ziet alleen zijn eigen mislukte opdracht.
| 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 |
Bepaal welk onderdeel de besturing bezit
Kies één houder voor het interactieve kanaal en laat dat het enige zijn dat verbinding maakt. Een GUI die de verbinding beheert, een script dat authenticatieprompts beantwoordt en een controller die sessies beëindigt, gelden alle als houder, en slechts één kan die rol vervullen.
Bezit een GUI de verbinding, gebruik dan de integratie die die GUI biedt in plaats van ertegen te vechten. Een race met de houder om de socket levert terugkerende storingen op die voor gebruikers willekeurig lijken, en wie debugt ziet meestal alleen de tweede helft van de race. Noteer welk proces na een herstart als eerste verbinding maakt, want die volgorde bepaalt elke keer wie wint. Een monitor die vóór de GUI start, houdt het kanaal tot de GUI opgeeft.
Gebruik statusmomentopnamen voor de verzamelaars
De meeste monitoring vraagt om een lijst, niet om een gesprek. Een periodiek statusbestand beantwoordt dat zonder het besturingskanaal aan te raken, en het blijft werken terwijl de GUI verbonden blijft.
status /run/openvpn/server.status 10
management /run/openvpn/server.sock unix
Het interval is het budget voor actualiteit, dus stel het in op wat het dashboard werkelijk nodig heeft en niet op de kleinste waarde die veilig lijkt. Een momentopname die elke paar seconden wordt geschreven is goedkoop; een script dat elke paar seconden opnieuw verbinding maakt met de besturingssocket niet, want elke herverbinding concurreert met de houder.
Een momentopname is geen geschiedenis en geen gebeurtenissenstroom. Verbindingen die binnen één interval komen en gaan, verschijnen nooit, dus een auditvereiste kan niet worden vervuld door een bestand te bevragen dat zichzelf overschrijft. Moet je weten of een gebruiker überhaupt verbonden was, dan is de momentopname het verkeerde instrument.
Fan-out is een ontwerp, geen modus
Hebben meerdere consumenten echt live managementgegevens nodig, zet dan één vertrouwd onderdeel vóór de socket en laat dat nauwkeurig gekozen waarnemingen naar de rest publiceren. Dat onderdeel bezit de herverbinding, de authenticatieprompts en de beslissing over wat veilig is om te tonen.
Bouw het bewust: leg vast welke queries zijn toegestaan, log wie erom vroeg en voorkom dat de fan-outlaag per ongeluk een afstandsbediening wordt. De daemon heeft geen multiclientmodus om aan te zetten, en geen enkele configuratieregel maakt er een. Behandel de houder als onderdeel van de beveiligingsgrens, want hij bezit een interface die mensen kan loskoppelen. Herstarten zou een routinehandeling moeten zijn met een gedocumenteerd herstelpad.
Behandel de socket als privilege, niet als statistiek
De managementinterface kan gebruikers loskoppelen, de status wijzigen en gebeurtenissen lezen waarin personen worden genoemd. Het wachtwoord authenticeert de client en versleutelt het transport niet, dus een netwerklistener stelt het gesprek bloot aan iedereen die het kan observeren.
Geef de voorkeur aan een lokale socket of een strikt beperkte listener, en controleer welk proces je verzamelaar werkelijk aanspreekt, want serverproducten leveren hun eigen management-API's mee die zich anders gedragen. Een verzamelaar die op de verkeerde daemon is gericht, levert stellige en verkeerde conclusies op. Bevestig het pad en het eigenaarsproces voordat je een query debugt die niets teruggeeft.