Manteniu diversos túnels vpnc engegats amb sondes per perfil
L’script de reconnexió de sèrie assumeix un sol túnel. Doneu a cada perfil vpnc el seu propi port, sonda un servei real i encadeneu les sondes en un ordre fix.
Un perfil vpnc es reconnecta netament després d’un roaming; tres d’ells es trenquen alternativament els sockets, les rutes i l’estat del resolutor. L’script de reconnexió del paquet està escrit per a un sol túnel, així que reinicia cada perfil sempre que qualsevol d’ells estigui caigut. Arreglar-ho requereix tres coses: ports locals separats, una sonda que provi un servei real per perfil i una cadena ordenada que no executi mai dues connexions alhora.
Doneu a cada perfil el seu propi port local
Un perfil vpnc deixat al port local per defecte competeix amb el perfil que ja s’executa. La segona connexió falla mentre la primera té el port, i la línia del registre sembla un problema de passarel·la més que un conflicte local. En canvi, poseu una línia per fitxer de perfil:
Local Port 0El zero deixa que el nucli triï un port efímer, així que dos perfils es poden establir alhora. Anomeneu cada fitxer pel passarel·la i el grup que serveix, manteniu-lo llegible només per a root i connecteu-vos sempre amb el perfil corresponent en lloc d’un defecte compartit. Un fitxer per defecte compartit és com un script reconnecta el túnel equivocat després que algú canviï el nom d’un perfil.
Els fitxers de perfil porten credencials, així que els permisos formen part del disseny i no de la neteja. Un fitxer llegible per tothom sota /etc/vpnc lliura el secret del grup a cada usuari local. Manteniu el mode 0600 amb root com a propietari i deixeu que els scripts llegeixin el fitxer com a root en comptes de copiar secrets als arguments. Per això també un script de sonda no hauria d’escriure mai el contingut del fitxer al registre.
Sondegeu un servei per perfil, no l’adreça del túnel
Una sol·licitud d’eco a l’adreça del propi túnel demostra sobretot que la interfície existeix. No diu res sobre si l’amfitrió que hi ha darrere encara pot arribar a l’aplicació que justifica el túnel. La interfície pot estar activa mentre la ruta que hi ha més enllà ja ha desaparegut.
Sondegeu un servei per perfil amb un temps d’espera TCP curt i reconnecteu només el perfil la sonda del qual ha fallat. Dos segons separen un camí mort d’un de lent, i una sonda TCP no depèn que es permeti ICMP enlloc del camí. Canvieu només l’objectiu i el nom de la configuració entre perfils:
#!/bin/bash
set -eu
if ! nc -z -w 2 10.63.7.20 8443; then
/usr/sbin/vpnc-connect ops.conf
fiDesa-ho com a /usr/local/bin/ensure-vpn-ops.sh, fes-lo executable i repeteix-ho per a cada perfil canviant només l’objectiu de la sonda i el nom de la configuració. Una sonda que respon una pregunta de protocol sobreviu a passarel·les que descarten l’eco però continuen reenviant els serveis que importen als usuaris.
Encadeneu les sondes perquè no competeixin mai
L’script de reconnexió del paquet pot cridar les vostres sondes en seqüència, i la seqüència és tot l’objectiu. Dues crides de vpnc-connect que s’executen juntes reescriuen la taula d’encaminament en un ordre que ningú controla, i així és com un perfil sa perd la seva ruta.
Manteniu les crides en primer pla, afegiu una breu pausa d’estabilització per a la interfície subjacent i programeu la cadena des de la taula cron de root, ja que només root pot reescriure les rutes del túnel:
#!/bin/bash
sleep 20
/usr/local/bin/ensure-vpn-ops.sh
/usr/local/bin/ensure-vpn-lab.shManteniu l’ordre idèntic entre l’script d’arrencada i l’entrada de cron, ja que una cadena que a l’arrencada s’executa en un ordre diferent és efectivament un programa diferent. Quan un perfil depèn de les rutes d’un altre, poseu la dependència primer i deixeu que la sonda posterior falli sense mal mentre el túnel anterior encara puja.
Vigileu el registre i després trenqueu-ne un a propòsit
Registreu una línia per execució amb el perfil, l’objectiu de la sonda, el resultat i l’acció presa. Sense això, un túnel que oscil·la cada minut sembla exactament igual que un que mai no ha caigut, i un error de sonda és indistingible d’una caiguda de la passarel·la. El registre també prova que la cadena només ha tocat el perfil que ha fallat. Escriviu-lo en un lloc que sobrevisqui a un reinici, o les proves se’n van amb el procés.
Després trenqueu un túnel deliberadament i mireu què passa. Atureu un sol perfil i confirmeu quins processos i rutes encara hi són:
pgrep -a vpnc
ip -4 route show | grep -E '10[.]63|10[.]90'
tail -n 5 /var/log/ensure-vpn.logNomés el perfil aturat s’hauria de reconnectar, i les altres sessions haurien de conservar tant els processos com les rutes. Si es reinicien dos perfils, la vostra cadena s’executa en paral·lel en algun lloc que no esperàveu.
Què no ha de fer el vigilant
Un vigilant que reinicia tot quan alguna cosa falla sembla saludable durant les proves i provoca una caiguda en una finestra de manteniment. Reinicieu per perfil, mai globalment.
Preferiu un client mantingut quan la passarel·la n’ofereix un per al mateix protocol, i no codifiqueu mai una contrasenya a l’script ni la passeu per línia d’ordres, perquè el fitxer de perfil ja guarda el secret. Si una tasca ha de córrer com a usuari ordinari un cop el túnel és actiu, reduïu privilegis des de dins de l’script en lloc de fer córrer tota la cadena sota aquell compte. Finalment, torneu a llegir les rutes després d’una reconnexió, perquè un perfil pot tornar amb una adreça assignada diferent i deixar una ruta obsoleta que cap sonda adreçada a l’adreça del túnel no notarà mai.