A VPN da rede doméstica non ten nada que facer cando o portátil xa está nesa rede. O atallo tentador é un comando de preparación que sae cun código distinto de cero; iso fai fallar a unidade e fai que todos os paneis parezan rotos. systemd ten unha directiva para exactamente esta forma de decisión, e separa unha omisión deliberada dun fallo real. Facelo ben consiste sobre todo en escribir que significa cada código de saída.

Por que unha precondición fallida é a forma incorrecta

ExecStartPre trata unha saída distinta de cero como un fallo de arranque, o cal é correcto para un comando que prepara o servizo. Usalo como condición fai que unha decisión de política sexa indistinguible dunha dependencia rota. ExecCondition existe para que unha unidade poida negarse a arrincar sen marcarse como fallida.

Esa distinción importa ás tres da mañá, cando ninguén quere clasificar unha unidade vermella que se comportaba segundo o deseño. Unha unidade fallida tamén agocha os fallos reais entre os intencionados.

Escriba primeiro o contrato de códigos de saída

Escriba o contrato antes do script. A saída cero significa continuar, a saída un significa omitir os comandos de arranque restantes e a saída 255 significa que a propia condición non puido executarse. Os códigos entre dous e 254 normalmente tamén significan omitir, algo fácil de esquecer cando un axudante devolve un código de erro aleatorio. O drop-in de abaixo vincula o axudante ao nome real da unidade.

[Service]
ExecCondition=/usr/local/libexec/should-start-home-vpn

Revise a unidade efectiva por se ten valores herdados de SuccessExitStatus ou stop-post antes de supor a semántica predeterminada. Despois probe deliberadamente cada un dos tres resultados.

Unha pista de rede non é proba de localización

Un enderezo de router accesible ou unha MAC coñecida poden suxerir a rede correcta, e ningunha das dúas o demostra. Outra rede pode reutilizar o mesmo enderezo, os datos ARP poden estar obsoletos e os identificadores pódense imitar. Trate a sonda como unha optimización coherente coa política, non como un resultado de autenticación.

Decida de antemán que significa a incerteza. Iniciar a VPN cando non está seguro é seguro para un cliente que simplemente non lograría conectarse; omitila cando non está seguro non o é. Faga que a sonda estea limitada e lea a interface activa en lugar de supor a primeira da lista. Unha sonda que se colga é peor ca unha que responde que non, porque a unidade a espera.

Anote esas suposicións xunto ao ficheiro da unidade para que a seguinte persoa saiba que cre o axudante. Un comentario ao principio do script é o lugar máis barato para gardalas.

Xestione o movemento entre redes

A condición execútase cando arrinca o servizo e non se reavalia despois. Unha unidade omitida segue omitida despois de que o portátil se traslade a unha cafetería, e un túnel activo segue levantado despois de que o portátil volva á casa. Conecte o ciclo de vida do cambio de rede coa decisión de arranque e parada mediante un mecanismo aparte.

systemctl cat home-vpn.service

Probe catro casos: arranque na casa, arranque fóra, unha sonda que non pode executarse e un movemento entre redes mentres a unidade está activa. Manteña o motivo da omisión visible no rexistro para que unha decisión intencionada nunca pareza un fallo de autenticación. A referencia do servizo documenta a semántica de saída e a versión mínima.

Artigos relacionados