Manteña varios túneles vpnc activos con sondas por perfil
O script de reconexión de serie asume un só túnel. Dea a cada perfil vpnc o seu propio porto, sonde un servizo real e encadee as sondas nunha orde fixa.
Un perfil vpnc reconéctase limpiamente tras un roaming; tres deles van quenándose por quendas os sockets, as rutas e o estado do resolvedor. O script de reconexión do paquete está escrito para un só túnel, así que reinicia cada perfil cada vez que calquera deles está caído. Arranxar iso require tres cousas: portos locais separados, unha sonda que probe un servizo real por perfil e unha cadea ordenada que nunca execute dúas conexións á vez.
Dea a cada perfil o seu propio porto local
Un perfil vpnc que se deixa no porto local predeterminado compite co perfil que xa está en marcha. A segunda conexión falla mentres a primeira mantén o porto, e a liña do rexistro parece un problema de pasarela máis que un conflito local. No seu lugar, poña unha liña por ficheiro de perfil:
Local Port 0O cero deixa que o núcleo escolla un porto efémero, así que dous perfís poden establecerse ao mesmo tempo. Nomee cada ficheiro pola pasarela e o grupo ao que serve, mantéñao lexible só para root e conéctese sempre co perfil correspondente en lugar dun padrón compartido. Un ficheiro predeterminado compartido é a forma en que un script reconecta o túnel equivocado despois de que alguén cambie o nome dun perfil.
Os ficheiros de perfil levan credenciais, así que os permisos forman parte do deseño e non da limpeza. Un ficheiro lexible por todos baixo /etc/vpnc entrega o segredo do grupo a cada usuario local. Manteña o modo en 0600 con root como propietario e deixe que os scripts lean o ficheiro como root en lugar de copiar segredos nos argumentos. Por iso tamén un script de sonda nunca debería volcar o contido do ficheiro nun rexistro.
Sonde un servizo por perfil, non o enderezo do túnel
Unha solicitude de eco ao propio enderezo do túnel demostra sobre todo que a interface existe. Non di nada sobre se o host que está detrás aínda acada a aplicación que xustifica o túnel. A interface pode estar activa mentres a ruta que hai máis aló xa desapareceu.
Sonde un servizo por perfil cun tempo de espera TCP curto e reconecte só o perfil cuxa sonda fallou. Dous segundos separan un camiño morto dun lento, e unha sonda TCP non depende de que se permita ICMP nalgún punto do camiño. Cambie só o obxectivo e o nome da configuración entre perfís:
#!/bin/bash
set -eu
if ! nc -z -w 2 10.63.7.20 8443; then
/usr/sbin/vpnc-connect ops.conf
fiGarde iso como /usr/local/bin/ensure-vpn-ops.sh, faga o executable e repítao para cada perfil cambiando só o obxectivo da sonda e o nome da configuración. Unha sonda que responde unha pregunta de protocolo sobrevive a pasarelas que descartan o eco pero seguen reenviando os servizos que importan aos usuarios.
Encadee as sondas para que nunca compitan
O script de reconexión do paquete pode chamar as súas sondas en secuencia, e a secuencia é todo o obxectivo. Dúas chamadas de vpnc-connect que se executan xuntas reescriben a táboa de encamiñamento nunha orde que ninguén controla, e así é como un perfil san perde a súa ruta.
Manteña as chamadas en primeiro plano, engada unha breve pausa de asentamento para a interface subxacente e programe a cadea desde a táboa cron de root, xa que só root pode reescribir as rutas do túnel:
#!/bin/bash
sleep 20
/usr/local/bin/ensure-vpn-ops.sh
/usr/local/bin/ensure-vpn-lab.shManteña a orde idéntica entre o script de arranque e a entrada de cron, xa que unha cadea que ao arrancar se executa nunha orde distinta é na práctica outro programa. Cando un perfil depende das rutas doutro, coloque a dependencia primeiro e deixe que a sonda posterior falle sen dano mentres o túnel anterior aínda está subindo.
Vixíe o rexistro e despois rompe un a propósito
Rexistre unha liña por execución co perfil, o obxectivo da sonda, o resultado e a acción tomada. Sen iso, un túnel que oscila cada minuto vese exactamente igual que un que nunca caeu, e un fallo da sonda é indistinguible dunha caída da pasarela. O rexistro tamén demostra que a cadea tocou só o perfil que fallou. Escríbao nun lugar que sobreviva a un reinicio, ou a evidencia vaise co proceso.
Logo rompe un túnel a propósito e observa que pasa. Detén un só perfil e confirma que procesos e rutas seguen presentes:
pgrep -a vpnc
ip -4 route show | grep -E '10[.]63|10[.]90'
tail -n 5 /var/log/ensure-vpn.logSó o perfil detido debería reconectarse, e as outras sesións deberían conservar tanto os seus procesos como as súas rutas. Se se reinician dous perfís, a súa cadea está a executarse en paralelo nalgún lugar que non esperaba.
O que o vixiante non debe facer
Un vixiante que reinicia todo cando algo falla parece saudable durante as probas e provoca unha caída nunha xanela de mantemento. Reinicie por perfil, nunca globalmente.
Prefira un cliente mantido cando a pasarela ofrece un para o mesmo protocolo, e nunca codifique un contrasinal no script nin o pase nunha liña de ordes, porque o ficheiro de perfil xa garda o segredo. Se unha tarefa debe executarse como usuario normal unha vez que o túnel está activo, reduza privilexios desde dentro do script en lugar de facer que toda a cadea corra baixo esa conta. Por último, volva ler as rutas tras unha reconexión, porque un perfil pode volver cunha dirección asignada distinta e deixar unha ruta obsoleta que ningunha sonda dirixida ao enderezo do túnel notará nunca.