Zriadenie klienta OpenVPN v etapách, ktoré sa pri chybe zastavia
Päť etáp bráni zriaďovaciemu skriptu nechať polovičnú inštaláciu: over vstupy, priprav sadu, vymeň atómovo, aktivuj jedného vlastníka, naplánuj vyradenie.
Zriaďovacie skripty, ktoré ohlásia chybu a pokračujú, sú horšie než skripty, ktoré sa nikdy nespustia. Nastavenie klienta sa dotýka chránených kľúčov, identity na bráne a služby, ktorá už môže obsluhovať prevádzku. Každé z toho potrebuje podmienku zastavenia a skript musí vedieť, do ktorej etapy sa dostal, keď sa zastavil.
Ber celú vec ako jednu transakciu s piatimi kontrolnými bodmi a prinúť každý kontrolný bod, aby sám odmietol pokračovať.
Oprav vstupy, skôr než sa dotkneš súborového systému
Začni výslovnou dohodou: jedna identita, jeden zdroj profilu, jeden zamýšľaný vlastník služby. Over, že profil existuje, že certifikát a kľúč, na ktoré odkazuje, sú čitateľné a že cieľový adresár patrí očakávanému balíku. Cesta, ktorá sa vyrieši, nie je dôkazom, že materiál za ňou je úplný.
Odmietaj prázdne premenné skoro. Nenastavená $DEVICE, ktorá sa rozvinie do ničoho, premení install -m 400 $KEY /etc/openvpn/client/ na kópiu namierenú do adresára a zlyhanie príde neskôr ako služba, ktorá nedokáže prečítať svoj kľúč.
Zostav sadu profilov v prípravnom adresári
Najprv zostav úplnú sadu na súkromnom mieste: profil, CA, klientsky certifikát, kľúč a každý pomocník, ktorý profil volá. Kopíruj s install -m 400 -o root -g root, aby sa oprávnenia nastavili pri vytvorení, a nie až potom. Potom skontroluj odkazy vnútri profilu, pretože relatívny riadok ca alebo key sa vyhodnocuje voči pracovnému adresáru jednotky hneď, ako sa služba spustí. Do živého adresára sa nesmie zapísať nič, kým sa celá sada neoverí.
Zaznamenaj nie-tajný odtlačok toho, čo tento beh vytvoril, napríklad sha256sum office.conf uložený vedľa značky verzie. Práve táto jediná hodnota umožňuje opakovanému behu rozlíšiť aktualizáciu od nečinnosti.
Vymeň atómovo a zachovaj predchádzajúcu sadu
Presuň pripravenú sadu na miesto jednou operáciou, kde to súborový systém dovolí, a zachovaj skontrolovanú predchádzajúcu sadu pod časovým razítkom. Čiastočná kópia, ktorá nechá nový profil vedľa starého kľúča, vytvorí službu, ktorá sa autentifikuje nesprávnou identitou a nezaloguje nič užitočné o dôvode. Ak výmena nemôže byť atómová, zoraď presuny tak, aby profil pristál posledný.
Keď cieľ už existuje, výslovne rozhodni, či je tento beh aktualizácia, totožné opakovanie alebo konflikt s profilom iného zariadenia. Tiché prepísanie profilu, ktorý patrí inej identite, je spôsob, akým dva stroje skončia zdieľaním jedného certifikátu. Namiesto toho beh odmietni a pomenuj konfliktného vlastníka.
Aktivuj jedného vlastníka a dokáž to
Zvoľ jednu cestu aktivácie, buď inštanciu systemd, alebo NetworkManager, a používaj ju dôsledne. Spustenie neriadeného procesu openvpn vedľa povolenej jednotky dá dva tunely, súperiace aktualizácie DNS a žiadnu jasnú odpoveď, na ktorý z nich mieri príkaz na zastavenie. Po aktivácii skontroluj systemctl is-active openvpn-client@office, potom trasu k vzdialenému prefixu, potom resolvectl status pre resolver, ktorý tunel nainštaloval. Skonči dosiahnutím jedného zdroja, kvôli ktorému tunel existuje.
Bežiaci proces a zelená ikona v oznamovacej oblasti sú fakty o procese, nie dôkaz, že identita a dopravná politika prežili odovzdanie.
Opakovaný beh a vyradenie sú samostatné postupy
Druhý beh by mal konvergovať k tým istým skontrolovaným súborom a tomu istému vlastníkovi, nie vytvoriť druhý účet alebo druhého démona. Vyradenie je vlastný postup: zastav presného vlastníka, archivuj alebo zmaž miestny profil podľa zásad a odober identitu na bráne. Zmazanie miestneho súboru s kľúčom neodoberie kópiu, ktorá už stroj opustila.
Zachovaj cestu obnovy, ktorá nezávisí od tunela, napríklad prístup ku konzole alebo druhú správcovskú trasu. Zmena zriadenia, ktorá ťa zamkne mimo stroja, je neúspešná zmena, aj keď každá etapa ohlásila úspech.
Skript, ktorý stojí za to si nechať, je transakcia okolo vlastníctva a dôkazov. Krátky zoznam privilegovaných kopírovacích príkazov nie je to isté.