Bara en managementklient: därför sparkar din monitor ut gränssnittet
Management-socketen tar en anslutning i taget. En andra prenumerant misslyckas med att ansluta eller stjäl kontrollen från komponenten som äger promptarna.
Ett skrivbordsgränssnitt håller managementanslutningen, så ett övervakningsskript som försöker öppna en egen läser ingenting eller, värre, slutar gränssnittet svara på promptar. Den vanliga slutsatsen är att daemonen är instabil. I community-daemonen är begränsningen avsiktlig: kontrollgränssnittet betjänar en ansluten managementklient i taget, och det antalet har inget att göra med hur många användare VPN kan bära.
En socket, en innehavare
Managementkanalen accepterar en ansluten klient. När en andra anländer medan den första är aktiv väntar den eller avvisas, och det finns inget parallellt prenumerantläge dolt bakom en flagga. Att koppla bort den nuvarande innehavaren låter daemonen ta emot nästa, vilket är en överlämning och inte en andra kanal.
Det gör varje extra verktyg till en konkurrent. Om gränssnittet äger anslutningen misslyckas ett pollande skript med att ansluta, eller lyckas först efter att gränssnittet gett upp, och sekvensen upprepas vid nästa återanslutning. Om skriptet ansluter först förlorar gränssnittet sin kontrollväg och dess promptar slutar fungera. Inget av verktygen rapporterar konflikten, eftersom var och en bara ser sitt eget misslyckade 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 |
Bestäm vilken komponent som äger kontrollen
Välj en innehavare för den interaktiva kanalen och låt den vara det enda som ansluter. Ett gränssnitt som hanterar anslutningen, ett skript som svarar på autentiseringspromptar och en kontroller som avslutar sessioner räknas alla som innehavare, och bara en kan ha rollen.
När ett gränssnitt äger anslutningen, använd den integration som gränssnittet erbjuder i stället för att kämpa emot det. Att tävla med innehavaren om socketen ger intermittenta fel som verkar slumpmässiga för användarna, och den som felsöker ser oftast bara andra halvan av tävlingen. Notera vilken process som ansluter först efter en omstart, eftersom den ordningen avgör vem som vinner varje gång. En monitor som startar före gränssnittet behåller kanalen tills gränssnittet ger upp.
Använd statusögonblicksbilder för insamlarna
De flesta övervakningsbehov vill ha en lista, inte ett samtal. En periodisk statusfil svarar på det utan att röra kontrollkanalen, och den fortsätter fungera medan gränssnittet är anslutet.
status /run/openvpn/server.status 10
management /run/openvpn/server.sock unix
Intervallet är färskhetsbudgeten, så sätt det efter vad instrumentpanelen faktiskt behöver och inte efter det minsta värde som verkar säkert. En ögonblicksbild som skrivs var några sekunder är billig; ett skript som återansluter till kontrollsocketen var några sekunder är det inte, eftersom varje återanslutning konkurrerar med innehavaren.
En ögonblicksbild är inte en historik och inte ett händelsflöde. Anslutningar som kommer och går inom ett intervall syns aldrig, så ett granskningskrav kan inte uppfyllas genom att polla en fil som skriver över sig själv. Om du behöver veta att en användare överhuvudtaget anslöt är ögonblicksbilden fel instrument.
Spridning är en design, inte ett läge
Om flera konsumenter verkligen behöver live-managementdata, sätt en enda betrodd komponent framför socketen och låt den publicera noggrant utvalda observationer till resten. Den komponenten äger återanslutningen, autentiseringspromptarna och beslutet om vad som är säkert att exponera.
Bygg den medvetet: definiera vilka frågor som är tillåtna, logga vem som frågade och undvik att av misstag göra spridningslagret till en fjärrkontroll. Daemonen har inget flerklientläge att slå på, och ingen konfigurationsrad skapar ett. Behandla innehavaren som en del av säkerhetsgränsen, eftersom den håller ett gränssnitt som kan koppla bort människor. En omstart bör vara en rutinåtgärd med en dokumenterad återhämtningsväg.
Behandla socketen som privilegium, inte som statistik
Managementgränssnittet kan koppla bort användare, ändra tillstånd och läsa händelser som namnger personer. Dess lösenord autentiserar klienten och krypterar inte transporten, så en nätverkslyssnare exponerar samtalet för alla som kan observera det.
Föredra en lokal socket eller en strikt begränsad lyssnare, och kontrollera vilken process din insamlare faktiskt adresserar, eftersom serverprodukter levererar egna management-API:er som beter sig annorlunda. En insamlare som pekar på fel daemon ger säkra, felaktiga slutsatser. Bekräfta sökvägen och den ägande processen innan du felsöker en fråga som inte returnerar något.