strongSwan zůstává dole po restartu peeru: obnova jednoho tunelu
Zbavte se restartu démona. Přesuňte inicializaci a DPD na spojení, které se musí vrátit, a pak ověřte podle jména a dokažte službu, ne démona.
Vzdálená brána se restartuje, vrátí se do minuty a místní démon strongSwan dál běží, zatímco tunel zůstává dole. Cronová úloha, která grepuje ESTABLISHED a restartuje démona, to nakonec přelepí, ale také přeruší každý nesouvisející tunel na stroji a možná mine ten, který selhal. Obnova patří spojení, které se musí vrátit, vyjádřená nastaveními, která přežijí znovunačtení. Tato příručka to nastaví pro jedno spojení a výsledek doloží podle jména.
Zbavte se globálního restartu, jeho důkazy si nechte
Restart démona má dva konkrétní nedostatky: ničí stav každého spojení a nic vám neřekne o tom, která událost skutečně selhala. Text stavu, který jste hledali, mohl pocházet z jiného spojení, zatímco požadovaný child stál nečinně, protože ho nic nespustilo.
Před jakoukoli změnou si přečtěte načtená spojení a aktivní asociace, abyste měli obrázek před a mohli ho po návratu peeru porovnat.
swanctl --list-conns
swanctl --list-sas
Přesuňte inicializaci a opakované pokusy na spojení, které se vrací
V nasazení se swanctl.conf žijí tato nastavení na úrovni spojení a child, ne v globální politice. Fragment níže je příklad ze strany iniciátora, který předpokládá, že návrhy, autentizace a selektory už jsou správné.
connections {
branch {
keyingtries = 0
dpd_delay = 30s
children {
private-lan {
start_action = trap|start
dpd_action = restart
}
}
}
}
start_action rozhoduje, co se stane při načtení child: start inicializuje okamžitě, kdežto trap nainstaluje politiku, která spustí inicializaci, když se objeví odpovídající provoz. Zápis trap|start vyžaduje strongSwan 5.9.6 nebo novější, proto před kopírováním řádku zkontrolujte verzi. dpd_action=restart žádá nové vyjednávání, jakmile je peer prohlášen za mrtvý, a keyingtries=0 na úrovni spojení povoluje další pokusy až do úspěchu nebo trvalé chyby. Pod IKEv2 nemá dpd_timeout vůbec žádný účinek, protože o tom, kdy peer neodpovídá, rozhoduje běžné opětovné odesílání.
Zpoždění v tomto příkladu je výchozí bod, ne univerzální lhůta. Vyberte ho podle toho, jak dlouho restart peeru trvá a kolik opětovného odesílání jste ochotni vydržet.
Vězte, ze které události se zotavujete
Tři poruchy vypadají na panelu stejně a potřebují různá nastavení. Počáteční spojení, které nikdy nevzniklo, je problém konfigurace nebo dosažitelnosti. Peer, který přestal odpovídat, je případ DPD. Child, který peer výslovně zavřel, je událost politiky s vlastním close_action, kterou DPD nikdy nezaznamená. Čtení logu kolem výpadku vám řekne, kterou ze tří máte, a odpověď mění opravu.
Nepřidávejte agresivní opětovnou inicializaci spojení, které operátoři záměrně zavírají kvůli údržbě, jinak se tunel objeví uprostřed okna znovu. U návrhů na vyžádání stačí zachovaný trap, protože odpovídající provoz child obnoví bez jakéhokoli časovače.
Ověřujte podle jména, ne podle stavu démona
Přečtěte si spojení a jeho child podle jména, dokud je peer ještě dole, a pak znovu, až se vrátí; rozdíl mezi těmito dvěma výstupy je důkaz.
swanctl --initiate --child private-lan
swanctl --terminate --ike branch
Pak potvrďte službu, ne asociaci. Čerstvá bezpečnostní asociace child plus úspěšný požadavek na privátní cíl za ní jsou ta dvě fakta, na kterých záleží, a běžící démon se zdravým nesouvisejícím tunelem nedokazuje ani jedno.
Pokud se child nikdy neinicializuje, zkontrolujte, zda testovací provoz přesně odpovídá nakonfigurovaným selektorům, včetně protokolu a portu. Pokud se inicializuje a selže, přečtěte chybu autentizace nebo návrhu, místo abyste ji schovávali za nekonečnou smyčkou, protože keyingtries=0 bude trvalé odmítnutí opakovat věčně.
Načtěte změnu v okně a znovu otestujte
Znovunačtení je bezpečnější než restart démona, a přesto není zdarma: nahrazení nebo odebrání child může zavřít spuštěnou asociaci nebo shodit jeho trap.
Načítejte během okna údržby, ponechte předchozí soubor a potvrďte, že se spojení objeví s nastaveními, která jste zamýšleli, a ne s výchozími.
swanctl --load-conns
swanctl --list-conns
Vraťte změnu obnovením předchozího souboru a jeho opětovným načtením, pak zopakujte stejné dva příkazy. Tunel, který se vrací jen po restartu démona, není opraven, je resetován.