Omitir a VPN da casa cun systemd ExecCondition
Omitir deliberadamente e un comando de preparación roto son resultados distintos. Defina os códigos de saída do axudante e despois probe o cambio entre redes.
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-vpnRevise 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.serviceProbe 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.