Een OpenVPN-client inrichten met fasen die bij fouten stoppen
Vijf fasen voorkomen dat een inrichtingsscript een halve installatie achterlaat: controleer invoer, bereid de set voor, wissel atomair, activeer één eigenaar, plan de uitfasering.
Inrichtingsscripts die een fout melden en doorgaan zijn erger dan scripts die nooit draaien. Clientconfiguratie raakt beschermde sleutels, een identiteit bij de gateway en een dienst die mogelijk al verkeer bedient. Elk daarvan heeft een stopvoorwaarde nodig, en het script moet weten welke fase het bereikte toen het stopte.
Behandel het geheel als één transactie met vijf controlepunten, en zorg dat elk controlepunt zelf weigert door te gaan.
Corrigeer de invoer voordat je het bestandssysteem aanraakt
Begin met een expliciet contract: één identiteit, één profielbron, één beoogde diensteigenaar. Controleer dat het profiel bestaat, dat het certificaat en de sleutel waarnaar het verwijst leesbaar zijn en dat de doeldirectory bij het verwachte pakket hoort. Een pad dat oplost is geen bewijs dat het materiaal erachter compleet is.
Weiger lege variabelen vroeg. Een niet-ingestelde $DEVICE die naar niets uitbreidt, maakt van install -m 400 $KEY /etc/openvpn/client/ een kopie die op een directory is gericht, en de fout komt later als een dienst die zijn sleutel niet kan lezen.
Stel de profielset samen in een voorbereidingsdirectory
Bouw eerst de complete set op een privélocatie: profiel, CA, clientcertificaat, sleutel en elk hulpprogramma dat het profiel aanroept. Kopieer met install -m 400 -o root -g root zodat rechten bij het aanmaken worden gezet en niet erna. Controleer daarna de verwijzingen in het profiel, want een relatieve ca- of key-regel wordt tegen de werkdirectory van de unit opgelost zodra de dienst start. Er mag niets in de actieve directory worden geschreven tot de hele set valideert.
Leg een niet-geheime vingerafdruk vast van wat deze run heeft geproduceerd, bijvoorbeeld sha256sum office.conf naast een versiemarkering. Juist die ene waarde laat een nieuwe run een update onderscheiden van een run zonder wijzigingen.
Wissel atomair en bewaar de vorige set
Verplaats de voorbereide set in één bewerking naar zijn plaats waar het bestandssysteem dat toelaat, en bewaar de nagekeken vorige set onder een tijdgestempelde naam. Een gedeeltelijke kopie die een nieuw profiel naast een oude sleutel achterlaat, levert een dienst die met de verkeerde identiteit authenticeert en niets nuttigs over de reden logt. Als de wissel niet atomair kan zijn, orden de verplaatsingen dan zo dat het profiel als laatste landt.
Als het doel al bestaat, beslis dan uitdrukkelijk of deze run een update, een identieke herhaling of een conflict met het profiel van een ander apparaat is. Stil een profiel overschrijven dat bij een andere identiteit hoort, is hoe twee machines één certificaat gaan delen. Weiger de run en noem de conflicterende eigenaar.
Activeer één eigenaar en bewijs het
Kies één activeringspad, ofwel de systemd-instantie ofwel NetworkManager, en gebruik dat consistent. Een onbeheerd openvpn-proces naast een ingeschakelde unit starten geeft twee tunnels, concurrerende DNS-updates en geen duidelijk antwoord op de vraag welke een stopcommando raakt. Controleer na activering systemctl is-active openvpn-client@office, dan de route naar het externe prefix, dan resolvectl status voor de resolver die de tunnel installeerde. Sluit af door één bron te bereiken waarvoor de tunnel bestaat.
Een draaiend proces en een groen systeemvakpictogram zijn procesfeiten, geen bewijs dat de identiteit en het verkeersbeleid de overdracht hebben overleefd.
Opnieuw uitvoeren en uitfaseren zijn gescheiden werkstromen
Een tweede run zou moeten convergeren op dezelfde nagekeken bestanden en dezelfde eigenaar, niet een tweede account of een tweede daemon aanmaken. Uitfaseren is een eigen procedure: stop de exacte eigenaar, archiveer of verwijder het lokale profiel volgens beleid, en trek de identiteit bij de gateway in. Het verwijderen van een lokaal sleutelbestand trekt geen kopie in die de machine al heeft verlaten.
Houd een herstelpad aan dat niet van de tunnel afhangt, zoals consoletoegang of een tweede beheerroute. Een inrichtingswijziging die je buiten de machine sluit, is een mislukte wijziging, zelfs wanneer elke fase succes meldde.
Het script dat het waard is te bewaren, is een transactie rond eigendom en bewijs. Een korte lijst met geprivilegieerde kopieeropdrachten is niet hetzelfde.