strongSwan ostaje pao nakon restarta peera: oporavak jednog tunela
Napustite restart daemona. Stavite inicijaciju i DPD na vezu koja se mora vratiti, pa provjerite po imenu i dokažite uslugu, a ne daemon.
Udaljeni gateway se restartira, vraća se u roku od minute, a lokalni strongSwan daemon nastavlja raditi dok je tunel još pao. Cron posao koji grepa ESTABLISHED i restartira daemon s vremenom će to zakrpati, ali će prekinuti i svaki nepovezani tunel na stroju, a možda će propustiti upravo onaj koji je pao. Oporavak pripada vezi koja se mora vratiti, izražen u postavkama koje preživljavaju reload. Ovaj runbook to postavlja za jednu vezu i dokazuje rezultat po imenu.
Napustite globalni restart, zadržite njegove dokaze
Restart daemona nosi dva konkretna nedostatka: uništava stanje svake veze i ne govori vam ništa o tome koji je događaj zaista pao. Statusni tekst koji ste grepowali možda je došao s druge veze, dok je traženi child stajao besposlen jer ga ništa nije pokrenulo.
Pročitajte učitane veze i aktivne asocijacije prije nego što bilo što promijenite, da biste imali sliku prije s kojom ćete usporediti nakon povratka peera.
swanctl --list-conns
swanctl --list-sas
Stavite inicijaciju i ponovne pokušaje na vezu koja se vraća
U swanctl.conf postavci ove postavke žive na razini veze i childa, a ne u globalnoj politici. Fragment ispod primjer je sa strane inicijatora koji pretpostavlja da su prijedlozi, autentifikacija i selektori već ispravni.
connections {
branch {
keyingtries = 0
dpd_delay = 30s
children {
private-lan {
start_action = trap|start
dpd_action = restart
}
}
}
}
start_action odlučuje što se događa kada se child učita: start inicira odmah, dok trap instalira politiku koja pokreće inicijaciju kada se pojavi odgovarajući promet. Pisanje trap|start zahtijeva strongSwan 5.9.6 ili noviji, pa provjerite verziju prije nego što kopirate liniju. dpd_action=restart traži novo pregovaranje kada peer bude proglašen mrtvim, a keyingtries=0 na razini veze dopušta daljnje pokušaje do uspjeha ili trajne pogreške. Pod IKEv2 dpd_timeout nema nikakav učinak, jer obično ponovno slanje odlučuje kada peer ne odgovara.
Kašnjenje u tom primjeru početna je točka, a ne univerzalni rok. Odaberite ga prema tome koliko traje restart peera i koliko ste ponovnog slanja spremni izdržati.
Znajte iz kojeg se događaja oporavljate
Tri kvara izgledaju isto na nadzornoj ploči i traže različite postavke. Početna veza koja nikada nije uspostavljena problem je konfiguracije ili dostupnosti. Peer koji je prestao odgovarati slučaj je DPD-a. Child koji je peer eksplicitno zatvorio događaj je politike s vlastitim close_action, koji DPD nikada ne primjećuje. Čitanje loga oko prekida kaže vam koji od tri imate, a odgovor mijenja popravak.
Ne dodajte agresivnu ponovnu inicijaciju vezi koju operateri namjerno zatvaraju zbog održavanja, inače se tunel ponovno pojavi usred prozora. Za dizajne na zahtjev dovoljan je zadržani trap, jer odgovarajući promet ponovno uspostavlja child bez ikakvog tajmera.
Provjerite po imenu, ne po statusu daemona
Pročitajte vezu i njezin child po imenu dok je peer još pao, pa ponovno kada se vrati; razlika između tih dvaju izlaza je dokaz.
swanctl --initiate --child private-lan
swanctl --terminate --ike branch
Zatim potvrdite uslugu, a ne asocijaciju. Svježa sigurnosna asocijacija childa plus uspješan zahtjev prema privatnom odredištu iza nje par su činjenica koje su važne, a daemon koji radi sa zdravim nepovezanim tunelom ne dokazuje ni jedno od toga.
Ako se child nikada ne inicira, provjerite da testni promet točno odgovara konfiguriranim selektorima, uključujući protokol i port. Ako se inicira i ne uspije, pročitajte pogrešku autentifikacije ili prijedloga umjesto da je skrivate iza beskonačne petlje, jer će keyingtries=0 trajno odbijanje ponavljati zauvijek.
Učitajte promjenu u prozoru i ponovno testirajte
Reload je sigurniji od restarta daemona i ipak nije besplatan: zamjena ili uklanjanje childa može zatvoriti započetu asocijaciju ili ispustiti njegov trap.
Učitajte tijekom prozora za održavanje, sačuvajte prethodnu datoteku i potvrdite da se veza pojavljuje s namjeravanim postavkama, a ne s zadanim vrijednostima.
swanctl --load-conns
swanctl --list-conns
Vratite se vraćanjem prethodne datoteke i njezinim ponovnim učitavanjem, pa ponovite iste dvije naredbe. Tunel koji se vraća samo nakon restarta daemona nije popravljen, nego resetiran.