strongSwan es queda aturat després d'un reinici del peer: recupera un túnel
Deixa el reinici del dimoni. Posa la iniciació i el DPD a la connexió que ha de tornar, i després verifica pel nom i demostra el servei, no el dimoni.
La passarel·la remota es reinicia, torna en menys d'un minut, i el dimoni strongSwan local continua executant-se amb el túnel encara aturat. Una tasca de cron que cerca ESTABLISHED i reinicia el dimoni acabarà tapant això, i també interromprà tots els túnels no relacionats de la màquina mentre potser es perd el que va fallar. La recuperació pertany a la connexió que ha de tornar, expressada en paràmetres que sobreviuen a una recàrrega. Aquest runbook ho prepara per a una sola connexió i demostra el resultat pel nom.
Retira el reinici global, conserva'n les proves
Un reinici del dimoni té dos defectes concrets: destrueix l'estat de cada connexió i no et diu quin esdeveniment va fallar realment. El text d'estat que vas cercar pot haver vingut d'una altra connexió, mentre que el child necessari va quedar inactiu perquè res no el va activar.
Llegeix les connexions carregades i les associacions actives abans de canviar res, perquè tinguis una imatge prèvia amb què comparar quan el peer torni.
swanctl --list-conns
swanctl --list-sas
Posa la iniciació i els reintents a la connexió que torna
En un desplegament amb swanctl.conf, aquests paràmetres viuen a nivell de connexió i de child, no en una política global. El fragment de sota és un exemple del costat de l'iniciador que assumeix que les propostes, l'autenticació i els selectors ja són correctes.
connections {
branch {
keyingtries = 0
dpd_delay = 30s
children {
private-lan {
start_action = trap|start
dpd_action = restart
}
}
}
}
start_action decideix què passa quan es carrega el child: start inicia immediatament, mentre que trap instal·la una política que desencadena la iniciació quan apareix trànsit coincident. Escriure trap|start requereix strongSwan 5.9.6 o posterior, així que comprova la versió abans de copiar la línia. dpd_action=restart demana una negociació nova quan el peer es declara mort, i keyingtries=0 a nivell de connexió permet més intents fins a l'èxit o un error permanent. Amb IKEv2, dpd_timeout no té cap efecte, perquè la retransmissió ordinària decideix quan el peer no respon.
El retard d'aquest exemple és un punt de partida, no un termini universal. Tria'l segons quant triga el reinici del peer i quanta retransmissió estàs disposat a aguantar.
Sàpigues de quin esdeveniment recuperes
Tres fallades semblen idèntiques en un quadre de comandament i necessiten paràmetres diferents. Una connexió inicial que mai no va arrencar és un problema de configuració o d'abastabilitat. Un peer que va deixar de respondre és el cas DPD. Un child que el peer va tancar explícitament és un esdeveniment de política amb el seu propi close_action, que el DPD no observa mai. Llegir el registre al voltant de la interrupció et diu quin dels tres tens, i la resposta canvia la solució.
No afegeixis reiniciació agressiva a una connexió que els operadors tanquen deliberadament per manteniment, o el túnel reapareixerà al mig de la finestra. Per a dissenys sota demanda n'hi ha prou amb un trap conservat, perquè el trànsit coincident restableix el child sense cap temporitzador.
Verifica pel nom, no per l'estat del dimoni
Llegeix la connexió i el seu child pel nom mentre el peer encara està aturat, i després un cop torna; la diferència entre aquestes dues sortides és la prova.
swanctl --initiate --child private-lan
swanctl --terminate --ike branch
Després confirma el servei, no l'associació. Una associació de seguretat child nova més una petició correcta a la destinació privada que hi ha darrere són el parell de fets que importa, i un dimoni en marxa amb un túnel no relacionat sa no demostra cap dels dos.
Si el child no s'inicia mai, comprova que el trànsit de prova coincideixi exactament amb els selectors configurats, incloent-hi protocol i port. Si s'inicia i falla, llegeix l'error d'autenticació o de proposta en lloc d'amagar-lo darrere d'un bucle infinit, perquè keyingtries=0 repetirà un rebuig permanent per sempre.
Carrega el canvi en una finestra i torna a provar
Recarregar és més segur que reiniciar el dimoni, i encara així no és gratuït: substituir o descarregar un child pot tancar una associació iniciada o fer caure el seu trap.
Carrega durant una finestra de manteniment, conserva el fitxer anterior i confirma que la connexió apareix amb els paràmetres que volies i no amb valors per defecte.
swanctl --load-conns
swanctl --list-conns
Fes enrere restaurant el fitxer anterior i carregant-lo de nou, i després repeteix les mateixes dues ordres. Un túnel que només torna després d'un reinici del dimoni no s'ha reparat, s'ha reiniciat.