strongSwan lieka žemyn po peer perkrovimo: atkurti vieną tunelį
Atsisakykite daemon perkrovimo. Uždėkite inicijavimą ir DPD ant jungties, kuri turi grįžti, tada patikrinkite pagal pavadinimą ir įrodykite paslaugą, o ne daemon.
Nuotolinis šliuzas persikrauna, grįžta per minutę, o vietinis strongSwan daemon toliau veikia, kol tunelis vis dar žemyn. Cron užduotis, kuri grepina ESTABLISHED ir perkrauna daemon, galiausiai tai uždengs, taip pat nutrauks kiekvieną nesusijusį tunelį mašinoje, o galbūt praleis tą, kuris nepavyko. Atkūrimas priklauso jungčiai, kuri turi grįžti, išreikštas nustatymais, kurie išgyvena perkrovimą. Šis runbook tai nustato vienai jungčiai ir įrodo rezultatą pagal pavadinimą.
Atsisakykite globalaus perkrovimo, išsaugokite jo įrodymus
Daemon perkrovimas turi du konkrečius trūkumus: jis sunaikina kiekvienos jungties būseną ir nieko nepasako apie tai, kuris įvykis iš tikrųjų nepavyko. Statuso tekstas, kurį grepinai, galėjo ateiti iš kitos jungties, o reikalingas child sėdėjo nenaudojamas, nes niekas jo nesuaktyvino.
Prieš ką nors keisdami perskaitykite įkeltas jungtis ir aktyvias asociacijas, kad turėtumėte vaizdą prieš ir galėtumėte palyginti, kai peer grįš.
swanctl --list-conns
swanctl --list-sas
Uždėkite inicijavimą ir pakartotinius bandymus ant grįžtančios jungties
swanctl.conf diegime šie nustatymai gyvena jungties ir child lygmenyje, o ne globalioje politikoje. Toliau pateiktas fragmentas yra iniciatoriaus pusės pavyzdys, kuris daro prielaidą, kad pasiūlymai, autentifikacija ir selektoriai jau teisingi.
connections {
branch {
keyingtries = 0
dpd_delay = 30s
children {
private-lan {
start_action = trap|start
dpd_action = restart
}
}
}
}
start_action nusprendžia, kas atsitinka įkeliant child: start inicijuoja iš karto, o trap įdiegia politiką, kuri suaktyvina inicijavimą, kai atsiranda atitinkamas srautas. Norint rašyti trap|start reikia strongSwan 5.9.6 arba naujesnės, todėl prieš kopijuodami eilutę patikrinkite versiją. dpd_action=restart prašo naujų derybų, kai peer paskelbiamas mirusiu, o jungties lygmens keyingtries=0 leidžia papildomus bandymus iki sėkmės arba nuolatinės klaidos. Pagal IKEv2 dpd_timeout visai neturi poveikio, nes įprastas persiuntimas nusprendžia, kada peer neatsako.
To pavyzdžio delsa yra atspirties taškas, o ne universali riba. Pasirinkite ją pagal tai, kiek trunka peer perkrovimas ir kiek persiuntimo esate pasirengę ištverti.
Žinokite, nuo kurio įvykio atkuriate
Trys gedimai atrodo vienodai prietaisų skydelyje ir reikalauja skirtingų nustatymų. Pradinė jungtis, kuri niekada nepakilo, yra konfigūracijos arba pasiekiamumo problema. Peer, kuris nustojo atsakinėti, yra DPD atvejis. Child, kurį peer aiškiai uždarė, yra politikos įvykis su savo close_action, kurio DPD niekada nepastebi. Žurnalo aplink sutrikimą skaitymas pasako, kuris iš trijų, ir atsakymas keičia sprendimą.
Nepridėkite agresyvaus pakartotinio inicijavimo jungčiai, kurią operatoriai sąmoningai uždaro priežiūrai, kitaip tunelis vėl pasirodys lango viduryje. Pagal poreikį veikiantiems sprendimams pakanka išsaugoto trap, nes atitinkamas srautas atkuria child be jokio laikmačio.
Tikrinkite pagal pavadinimą, o ne pagal daemon būseną
Skaitykite jungtį ir jos child pagal pavadinimą, kol peer dar žemyn, tada dar kartą jam grįžus; skirtumas tarp šių dviejų išvesčių yra įrodymas.
swanctl --initiate --child private-lan
swanctl --terminate --ike branch
Tada patvirtinkite paslaugą, o ne asociaciją. Nauja child saugumo asociacija ir sėkminga užklausa į privačią paskirties vietą už jos yra ta faktų pora, kuri svarbi, o veikiantis daemon su sveiku nesusijusiu tuneliu neįrodo nė vieno.
Jei child niekada neinicijuoja, patikrinkite, ar bandomasis srautas tiksliai atitinka sukonfigūruotus selektorius, įskaitant protokolą ir prievadą. Jei jis inicijuoja ir nepavyksta, skaitykite autentifikacijos arba pasiūlymo klaidą, o ne slėpkite ją už begalinės kilpos, nes keyingtries=0 mielai kartos nuolatinį atmetimą amžinai.
Įkelkite pakeitimą lange ir išbandykite dar kartą
Perkrovimas saugesnis nei daemon perkrovimas, ir vis tiek jis ne nemokamas: child pakeitimas ar iškėlimas gali uždaryti pradėtą asociaciją arba numesti jo trap.
Įkelkite priežiūros lange, išsaugokite ankstesnį failą ir patvirtinkite, kad jungtis pasirodo su ketintais nustatymais, o ne su numatytosiomis reikšmėmis.
swanctl --load-conns
swanctl --list-conns
Grąžinkite atgal atkurdami ankstesnį failą ir jį vėl įkeldami, tada pakartokite tas pačias dvi komandas. Tunelis, kuris grįžta tik po daemon perkrovimo, ne sutaisytas, o atstatytas.