Aprovisionar un cliente de OpenVPN con etapas que se deteñen ante un erro
Cinco etapas impiden que un script de aprovisionamento deixe media instalación: verificar as entradas, preparar o conxunto, intercambiar de forma atómica, activar un só propietario e planificar a retirada.
Os scripts de aprovisionamento que informan dun erro e seguen adiante son peores que os que nunca se executan. A configuración do cliente toca claves protexidas, unha identidade na pasarela e un servizo que pode estar xa servindo tráfico. Cada un destes elementos necesita unha condición de parada, e o script debe saber a que etapa chegou cando se detivo.
Trata todo o asunto como unha transacción con cinco puntos de control, e fai que cada punto de control se negue a continuar pola súa conta.
Corrixe as entradas antes de tocar o sistema de ficheiros
Comeza cun contrato explícito: unha identidade, unha fonte de perfil, un propietario de servizo previsto. Verifica que o perfil existe, que o certificado e a clave aos que fai referencia son lexibles e que o directorio de destino pertence ao paquete esperado. Unha ruta que se resolve non é proba de que o material que hai detrás estea completo.
Rexeita as variables baleiras cedo. Unha $DEVICE sen definir que se expande a nada converte install -m 400 $KEY /etc/openvpn/client/ nunha copia dirixida a un directorio, e o fallo chega máis tarde como un servizo que non pode ler a súa clave.
Monta o conxunto de perfís nun directorio de preparación
Constrúe primeiro o conxunto completo nun lugar privado: perfil, CA, certificado de cliente, clave e calquera auxiliar que chame o perfil. Copia con install -m 400 -o root -g root para que os permisos se fixen ao crear e non despois. Logo revisa as referencias dentro do perfil, porque unha liña relativa ca ou key resólvese contra o directorio de traballo da unidade en canto arranca o servizo. Non debe escribirse nada no directorio activo ata que todo o conxunto valide.
Rexistra unha pegada non secreta do que produciu esta execución, por exemplo sha256sum office.conf gardado xunto a unha marca de versión. Ese único valor é o que permite a unha reexecución distinguir unha actualización dunha non-operación.
Intercambia de forma atómica e conserva o conxunto anterior
Move o conxunto preparado ao seu sitio como unha soa operación alí onde o sistema de ficheiros o permita, e conserva o conxunto anterior revisado baixo un nome con marca de tempo. Unha copia parcial que deixa un perfil novo xunto a unha clave vella produce un servizo que se autentica coa identidade equivocada e non rexistra nada útil sobre o motivo. Se o intercambio non pode ser atómico, ordena os movementos para que o perfil chegue o último.
Cando o destino xa existe, decide explicitamente se esta execución é unha actualización, unha reexecución idéntica ou un conflito co perfil doutro dispositivo. Sobrescribir en silencio un perfil que pertence a outra identidade é como dúas máquinas acaban compartindo un só certificado. Rexeita a execución e nomea o propietario en conflito.
Activa un só propietario e demóstrao
Escolle unha soa vía de activación, ou a instancia de systemd ou NetworkManager, e úsaa de forma coherente. Arrancar un proceso openvpn non xestionado xunto a unha unidade habilitada dá dous túneles, actualizacións DNS competidoras e ningunha resposta clara sobre a cal apunta unha orde de parada. Tras a activación, comproba systemctl is-active openvpn-client@office, logo a ruta ao prefixo remoto e logo resolvectl status para o resolutor que instalou o túnel. Termina alcanzando un recurso para o que existe o túnel.
Un proceso en marcha e unha icona verde na bandexa son feitos do proceso, non probas de que a identidade e a política de tráfico sobrevivisen á entrega.
A reexecución e a retirada son fluxos de traballo separados
Unha segunda execución debería converxer nos mesmos ficheiros revisados e no mesmo propietario, non crear unha segunda conta nin un segundo demoño. A retirada é o seu propio procedemento: detén o propietario exacto, arquiva ou borra o perfil local segundo a política e revoga a identidade na pasarela. Borrar un ficheiro de clave local non revoga unha copia que xa saíu da máquina.
Mantén unha vía de recuperación que non dependa do túnel, como acceso á consola ou unha segunda ruta de xestión. Un cambio de aprovisionamento que te deixa fóra da máquina é un cambio fallido aínda que cada etapa informase de éxito.
O script que merece conservarse é unha transacción arredor da propiedade e a evidencia. Unha lista curta de ordes de copia privilexiadas non é o mesmo.