strongSwan остаје доле након рестарта peer-а: опоравак једног тунела
Напустите рестарт daemon-а. Ставите иницијацију и DPD на везу која мора да се врати, затим проверите по имену и докажите услугу, а не daemon.
Удаљени gateway се рестартује, враћа се у року од минута, а локални strongSwan daemon наставља да ради док је тунел и даље доле. Cron посао који грепује ESTABLISHED и рестартује daemon на крају ће то закрпити, али ће прекинути и сваки неповезани тунел на машини, а можда ће пропустити баш онај који је пао. Опоравак припада вези која мора да се врати, изражен у поставкама које преживљавају reload. Овај runbook то поставља за једну везу и доказује резултат по имену.
Напустите глобални рестарт, задржите његове доказе
Рестарт daemon-а носи два конкретна недостатка: уништава стање сваке везе и не говори вам ништа о томе који је догађај заиста пао. Статусни текст који сте греповали можда је дошао са друге везе, док је тражени child стајао беспослен јер га ништа није покренуло.
Прочитајте учитане везе и активне асоцијације пре него што било шта промените, да бисте имали слику пре с којом ћете упоредити након повратка peer-а.
swanctl --list-conns
swanctl --list-sas
Ставите иницијацију и поновне покушаје на везу која се враћа
У swanctl.conf поставци ове поставке живе на нивоу везе и child-а, а не у глобалној политици. Фрагмент испод је пример са стране иницијатора који претпоставља да су предлози, аутентификација и селектори већ исправни.
connections {
branch {
keyingtries = 0
dpd_delay = 30s
children {
private-lan {
start_action = trap|start
dpd_action = restart
}
}
}
}
start_action одлучује шта се дешава када се child учита: start иницира одмах, док trap инсталира политику која покреће иницијацију када се појави одговарајући саобраћај. Писање trap|start захтева strongSwan 5.9.6 или новији, па проверите верзију пре копирања линије. dpd_action=restart тражи ново преговарање када peer буде проглашен мртвим, а keyingtries=0 на нивоу везе дозвољава даље покушаје до успеха или трајне грешке. Под IKEv2 dpd_timeout нема никакав ефекат, јер обично поновно слање одлучује када peer не одговара.
Кашњење у том примеру је почетна тачка, а не универзални рок. Изаберите га према томе колико траје рестарт peer-а и колико сте поновног слања спремни да издржите.
Знајте из ког догађаја се опорављате
Три квара изгледају исто на контролној табли и траже различите поставке. Почетна веза која никада није успостављена је проблем конфигурације или доступности. Peer који је престао да одговара је случај DPD-а. Child који је peer експлицитно затворио је догађај политике са сопственим close_action, који DPD никада не примећује. Читање лога око прекида каже вам који од три имате, а одговор мења поправку.
Не додајте агресивну поновну иницијацију вези коју оператери намерно затварају због одржавања, иначе се тунел поново појави усред прозора. За дизајне на захтев довољан је задржани trap, јер одговарајући саобраћај поново успоставља child без икаквог тајмера.
Проверите по имену, не по статусу daemon-а
Прочитајте везу и њен child по имену док је peer још доле, па поново када се врати; разлика између та два излаза је доказ.
swanctl --initiate --child private-lan
swanctl --terminate --ike branch
Затим потврдите услугу, а не асоцијацију. Свежа сигурносна асоцијација child-а плус успешан захтев ка приватном одредишту иза ње су пар чињеница који је важан, а daemon који ради са здравим неповезаним тунелом не доказује ни једно од тога.
Ако се child никада не иницира, проверите да тестни саобраћај тачно одговара конфигурисаним селекторима, укључујући протокол и порт. Ако се иницира и не успе, прочитајте грешку аутентификације или предлога уместо да је кријете иза бесконачне петље, јер ће keyingtries=0 трајно одбијање понављати заувек.
Учитајте промену у прозору и поново тестирајте
Reload је безбеднији од рестарта daemon-а, и ипак није бесплатан: замена или уклањање child-а може затворити започету асоцијацију или испустити његов trap.
Учитавајте током прозора за одржавање, сачувајте претходну датотеку и потврдите да се веза појављује са намераваним поставкама, а не са подразумеваним.
swanctl --load-conns
swanctl --list-conns
Вратите се успостављањем претходне датотеке и њеним поновним учитавањем, па поновите исте две команде. Тунел који се враћа само након рестарта daemon-а није поправљен, него ресетован.