Etablera en OpenVPN-klient i steg som stoppar vid fel
Fem steg hindrar ett etableringsskript från att lämna en halv installation: kontrollera indata, förbered uppsättningen, byt atomiskt, aktivera en ägare, planera avveckling.
Etableringsskript som rapporterar ett fel och fortsätter är sämre än skript som aldrig körs. Klientkonfiguration rör skyddade nycklar, en identitet vid gatewayen och en tjänst som kanske redan betjänar trafik. Var och en av dessa behöver ett stoppvillkor, och skriptet måste veta vilket steg det nådde när det stoppade.
Behandla helheten som en transaktion med fem kontrollpunkter, och låt varje kontrollpunkt själv vägra att fortsätta.
Rätta indata innan du rör filsystemet
Börja med ett uttryckligt avtal: en identitet, en profilkälla, en avsedd tjänsteägare. Kontrollera att profilen finns, att certifikatet och nyckeln den hänvisar till är läsbara och att målkatalogen tillhör det förväntade paketet. En sökväg som löses upp är inte bevis för att materialet bakom den är komplett.
Avvisa tomma variabler tidigt. En osatt $DEVICE som expanderar till ingenting gör install -m 400 $KEY /etc/openvpn/client/ till en kopia riktad mot en katalog, och felet dyker upp senare som en tjänst som inte kan läsa sin nyckel.
Sätt ihop profiluppsättningen i en förberedelsekatalog
Bygg först den kompletta uppsättningen på en privat plats: profil, CA, klientcertifikat, nyckel och varje hjälpprogram som profilen anropar. Kopiera med install -m 400 -o root -g root så att behörigheter sätts vid skapandet och inte efteråt. Kontrollera sedan referenserna inne i profilen, eftersom en relativ ca- eller key-rad löses mot enhetens arbetskatalog så snart tjänsten startar. Ingenting bör skrivas till den aktiva katalogen förrän hela uppsättningen validerar.
Registrera ett icke-hemligt fingeravtryck av vad den här körningen producerade, till exempel sha256sum office.conf sparat bredvid en versionsmarkör. Just det enda värdet gör att en ny körning kan skilja en uppdatering från en körning utan ändringar.
Byt atomiskt och behåll den föregående uppsättningen
Flytta den förberedda uppsättningen på plats som en enda operation där filsystemet tillåter det, och behåll den granskade föregående uppsättningen under ett tidsstämplat namn. En delvis kopia som lämnar en ny profil bredvid en gammal nyckel ger en tjänst som autentiserar med fel identitet och loggar inget användbart om varför. Om bytet inte kan vara atomiskt, ordna flyttarna så att profilen landar sist.
När målet redan finns måste du uttryckligen avgöra om den här körningen är en uppdatering, en identisk ny körning eller en konflikt med en annan enhets profil. Att tyst skriva över en profil som tillhör en annan identitet är hur två maskiner till slut delar ett enda certifikat. Avvisa körningen och namnge den motstridiga ägaren i stället.
Aktivera en ägare och bevisa det
Välj en aktiveringsväg, antingen systemd-instansen eller NetworkManager, och använd den konsekvent. Start av en ohanterad openvpn-process bredvid en aktiverad enhet ger två tunnlar, konkurrerande DNS-uppdateringar och inget tydligt svar på vilken ett stoppkommando träffar. Kontrollera efter aktivering systemctl is-active openvpn-client@office, sedan vägen till det avlägsna prefixet, sedan resolvectl status för den resolver tunneln installerade. Avsluta med att nå en resurs som tunneln finns till för.
En körande process och en grön ikon i aktivitetsfältet är processfakta, inte bevis för att identiteten och trafikpolicyn överlevde överlämningen.
Ny körning och avveckling är separata arbetsflöden
En andra körning bör konvergera mot samma granskade filer och samma ägare, inte skapa ett andra konto eller en andra daemon. Avveckling är sin egen procedur: stoppa den exakta ägaren, arkivera eller radera den lokala profilen enligt policy och återkalla identiteten vid gatewayen. Att radera en lokal nyckelfil återkallar inte en kopia som redan har lämnat maskinen.
Behåll en återställningsväg som inte beror på tunneln, till exempel konsolåtkomst eller en andra administrationsväg. En etableringsändring som låser dig ute från maskinen är en misslyckad ändring även när varje steg rapporterade framgång.
Skriptet som är värt att behålla är en transaktion kring ägande och bevis. En kort lista med privilegierade kopieringskommandon är inte samma sak.