strongSwan rămâne jos după repornirea peer-ului: recuperează un tunel
Renunță la repornirea daemonului. Pune inițierea și DPD pe conexiunea care trebuie să revină, apoi verifică după nume și dovedește serviciul, nu daemonul.
Gateway-ul îndepărtat se repornește, revine într-un minut, iar daemonul strongSwan local continuă să ruleze cu tunelul încă jos. Un job cron care face grep după ESTABLISHED și repornește daemonul va masca în cele din urmă asta și va întrerupe fiecare tunel necorelat de pe mașină, ratând poate exact pe cel care a eșuat. Recuperarea aparține conexiunii care trebuie să revină, exprimată în setări care supraviețuiesc unui reload. Acest runbook pregătește asta pentru o singură conexiune și dovedește rezultatul după nume.
Renunță la repornirea globală, păstrează-i dovezile
O repornire a daemonului are două defecte concrete: distruge starea fiecărei conexiuni și nu îți spune nimic despre ce eveniment a eșuat de fapt. Textul de stare pe care l-ai căutat poate fi venit de la altă conexiune, în timp ce child-ul necesar a stat inactiv pentru că nimic nu l-a declanșat.
Citește conexiunile încărcate și asocierile active înainte de a schimba ceva, ca să ai o imagine de dinainte cu care să compari după ce peer-ul revine.
swanctl --list-conns
swanctl --list-sas
Pune inițierea și reîncercările pe conexiunea care revine
Într-o implementare cu swanctl.conf aceste setări trăiesc la nivel de conexiune și child, nu într-o politică globală. Fragmentul de mai jos este un exemplu din partea inițiatorului care presupune că propunerile, autentificarea și selectorii sunt deja corecți.
connections {
branch {
keyingtries = 0
dpd_delay = 30s
children {
private-lan {
start_action = trap|start
dpd_action = restart
}
}
}
}
start_action decide ce se întâmplă când child-ul este încărcat: start inițiază imediat, în timp ce trap instalează o politică ce declanșează inițierea când apare trafic potrivit. Scrierea trap|start necesită strongSwan 5.9.6 sau mai nou, așa că verifică versiunea înainte de a copia linia. dpd_action=restart cere o nouă negociere imediat ce peer-ul este declarat mort, iar keyingtries=0 la nivel de conexiune permite încercări suplimentare până la succes sau la o eroare permanentă. Sub IKEv2, dpd_timeout nu are niciun efect, pentru că retransmisia obișnuită decide când peer-ul nu răspunde.
Întârzierea din acel exemplu este un punct de plecare, nu un termen universal. Alege-o în funcție de cât durează repornirea peer-ului și de câtă retransmisie ești dispus să suporți.
Află de la ce eveniment recuperezi
Trei defecțiuni arată identic pe un panou și cer setări diferite. O conexiune inițială care nu a urcat niciodată este o problemă de configurare sau de accesibilitate. Un peer care a încetat să răspundă este cazul DPD. Un child pe care peer-ul l-a închis explicit este un eveniment de politică cu propriul close_action, pe care DPD nu îl observă niciodată. Citirea jurnalului din jurul întreruperii îți spune care dintre cele trei îl ai, iar răspunsul schimbă remedierea.
Nu adăuga reinițiere agresivă la o conexiune pe care operatorii o închid intenționat pentru mentenanță, altfel tunelul reapare la mijlocul ferestrei. Pentru proiectele la cerere este suficient un trap păstrat, pentru că traficul potrivit restabilește child-ul fără niciun cronometru.
Verifică după nume, nu după starea daemonului
Citește conexiunea și child-ul ei după nume cât timp peer-ul este încă jos, apoi din nou când revine; diferența dintre aceste două ieșiri este dovada.
swanctl --initiate --child private-lan
swanctl --terminate --ike branch
Apoi confirmă serviciul, nu asocierea. O asociație de securitate child proaspătă plus o cerere reușită către destinația privată din spatele ei sunt perechea de fapte care contează, iar un daemon care rulează cu un tunel necorelat sănătos nu dovedește niciuna.
Dacă child-ul nu inițiază niciodată, verifică dacă traficul de test se potrivește exact cu selectorii configurați, inclusiv protocol și port. Dacă inițiază și eșuează, citește eroarea de autentificare sau de propunere în loc să o ascunzi într-o buclă fără sfârșit, pentru că keyingtries=0 va repeta bucuros o respingere permanentă pentru totdeauna.
Încarcă modificarea într-o fereastră și testează din nou
Reîncărcarea este mai sigură decât repornirea daemonului și tot nu este gratuită: înlocuirea sau descărcarea unui child poate închide o asociere pornită sau poate scăpa trap-ul ei.
Încarcă în timpul unei ferestre de mentenanță, păstrează fișierul anterior și confirmă că conexiunea apare cu setările dorite și nu cu valorile implicite.
swanctl --load-conns
swanctl --list-conns
Revino restabilind fișierul anterior și încărcându-l din nou, apoi repetă aceleași două comenzi. Un tunel care revine doar după o repornire a daemonului nu a fost reparat, ci resetat.