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 restartuje, vraća se u roku od minute, a lokalni strongSwan daemon nastavlja raditi dok je tunel i dalje pao. Cron posao koji grepuje ESTABLISHED i restartuje daemon će to na kraju zakrpati, ali će prekinuti i svaki nepovezani tunel na mašini, a možda će propustiti baš onaj koji je pao. Oporavak pripada vezi koja se mora vratiti, izražen u postavkama koje prežive 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 šta promijenite, da biste imali sliku prije s kojom ćete uporediti 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 nivou veze i childa, a ne u globalnoj politici. Fragment ispod je primjer 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 šta se dešava kada se child učita: start inicira odmah, dok trap instalira politiku koja pokreće inicijaciju kada se pojavi odgovarajući saobraćaj. 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 nivou veze dozvoljava dalje pokušaje do uspjeha ili trajne greške. Pod IKEv2 dpd_timeout nema nikakav efekat, jer obično ponovno slanje odlučuje kada peer ne odgovara.
Kašnjenje u tom primjeru je početna tačka, a ne univerzalni rok. Odaberite ga prema tome koliko traje restart peera i koliko ste ponovnog slanja spremni izdržati.
Znajte iz kojeg događaja se oporavljate
Tri kvara izgledaju isto na kontrolnoj tabli i traže različite postavke. Početna veza koja nikada nije uspostavljena je problem konfiguracije ili dostupnosti. Peer koji je prestao odgovarati je slučaj DPD-a. Child koji je peer eksplicitno zatvorio je događaj politike sa vlastitim close_action, koji DPD nikada ne primijeti. Čitanje loga oko prekida kaže vam koji od tri imate, a odgovor mijenja popravku.
Ne dodajte agresivnu ponovnu inicijaciju vezi koju operateri namjerno zatvaraju zbog održavanja, inače se tunel ponovo pojavi usred prozora. Za dizajne na zahtjev dovoljan je zadržani trap, jer odgovarajući saobraćaj ponovo uspostavlja child bez ikakvog tajmera.
Provjerite po imenu, ne po statusu daemona
Pročitajte vezu i njen child po imenu dok je peer još pao, pa ponovo kada se vrati; razlika između ta dva 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 su par činjenica koji je važan, a daemon koji radi sa zdravim nepovezanim tunelom ne dokazuje ni jedno od toga.
Ako se child nikada ne inicira, provjerite da testni saobraćaj tačno odgovara konfigurisanim selektorima, uključujući protokol i port. Ako se inicira i ne uspije, pročitajte greš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 ponovo 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 tokom prozora za održavanje, sačuvajte prethodnu datoteku i potvrdite da se veza pojavljuje s namjeravanim postavkama, a ne s podrazumijevanim.
swanctl --load-conns
swanctl --list-conns
Vratite se vraćanjem prethodne datoteke i njenim ponovnim učitavanjem, pa ponovite iste dvije komande. Tunel koji se vraća samo nakon restarta daemona nije popravljen, nego resetovan.