strongSwan застаецца ўнізе пасля перазапуску вузла-партнёра: аднаўляем адзін тунель
Адмоўцеся ад перазапуску дэмана. Пакладзіце ініцыяцыю і DPD на злучэнне, якое мусіць вярнуцца, потым праверце па назве і дакажыце працу службы, а не дэмана.
Аддалены шлюз перазапускаецца, вяртаецца цягам хвіліны, а лакальны дэман strongSwan працягвае працаваць, пакуль тунель застаецца ўнізе. Заданне cron, якое шукае ESTABLISHED і перазапускае дэман, урэшце закрые гэтую праблему, але яно таксама перапыніць кожны недатычны тунель на машыне і, магчыма, прапусціць той, які зваліўся. Аднаўленне належыць злучэнню, якое мусіць вярнуцца, і выяўляецца ў наладах, што перажываюць перазагрузку. Гэты runbook наладжвае гэта для аднаго злучэння і даказвае вынік па назве.
Адмоўцеся ад глабальнага перазапуску, захавайце яго доказы
Перазапуск дэмана мае два канкрэтныя недахопы: ён знішчае стан кожнага злучэння і нічога не кажа пра тое, якая падзея насамрэч звалілася. Тэкст стану, які вы шукалі, мог прыйсці ад іншага злучэння, а патрэбны child прастаяў без руху, бо нішто яго не запусціла.
Прачытайце загружаныя злучэнні і актыўныя асацыяцыі перад любымі зменамі, каб мець карціну «да», з якой параўнаеце пасля вяртання вузла-партнёра.
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 запытвае новыя перамовы, як толькі вузел-партнёр абвешчаны мёртвым, а keyingtries=0 на ўзроўні злучэння дазваляе далейшыя спробы да поспеху або пастаяннай памылкі. Пад IKEv2 dpd_timeout не мае ніякага эфекту, бо звычайная перадача вырашае, калі вузел-партнёр не адказвае.
Затрымка ў гэтым прыкладзе — гэта адпраўны пункт, а не ўніверсальны дэдлайн. Выбірайце яе з таго, колькі доўжыцца перазапуск вузла-партнёра і колькі перадач вы гатовыя перацярпець.
Ведайце, ад якой падзеі вы аднаўляецеся
Тры збоі выглядаюць аднолькава на панэлі і патрабуюць розных налад. Першапачатковае злучэнне, якое так і не ўзнялося, — гэта праблема канфігурацыі або дасяжнасці. Вузел-партнёр, які перастаў адказваць, — гэта выпадак DPD. Child, які вузел-партнёр відавочна зачыніў, — гэта падзея палітыкі з уласным close_action, якую DPD ніколі не бачыць. Чытанне журнала вакол перапынку скажа, які з трох у вас, і адказ змяняе рашэнне.
Не дадавайце агрэсіўную перавініцыяцыю злучэнню, якое аператары наўмысна зачыняюць на абслугоўванне, інакш тунель зноў з'явіцца пасярод акна. Для схемаў па запатрабаванні дастаткова захаванага trap, бо адпаведны трафік аднаўляе child без любога таймера.
Правярайце па назве, а не па стане дэмана
Прачытайце злучэнне і яго child па назве, пакуль вузел-партнёр яшчэ ўнізе, а потым зноў пасля вяртання; розніца паміж гэтымі двума выхадамі і ёсць доказ.
swanctl --initiate --child private-lan
swanctl --terminate --ike branch
Затым пацвердзіце працу службы, а не асацыяцыю. Свежая асацыяцыя бяспекі child плюс паспяховы запыт да прыватнага адрасу за ёй — гэта тая пара фактаў, што мае значэнне, а працоўны дэман са здаровым недатычным тунэлем не даказвае ні аднаго з іх.
Калі child ніколі не ініцыюе, праверце, ці тэставы трафік дакладна адпавядае наладжаным селектарам, уключаючы пратакол і порт. Калі ён ініцыюе і зрываецца, прачытайце памылку аўтэнтыфікацыі або прапановы замест таго, каб хаваць яе за бясконцым цыклам, бо keyingtries=0 будзе паўтараць пастаянную адмову вечна.
Загрузіце змену ў акне і паўтарыце тэст
Перазагрузка бяспечнейшая за перазапуск дэмана, і ўсё ж яна не бясплатная: замена або выгрузка child можа зачыніць запушчаную асацыяцыю ці скінуць яе trap.
Загружайце падчас акна абслугоўвання, захавайце папярэдні файл і пацвердзіце, што злучэнне з'явілася з патрэбнымі наладамі, а не з прадвызначанымі.
swanctl --load-conns
swanctl --list-conns
Адкаціцеся, аднавіўшы папярэдні файл і зноў загрузіўшы яго, потым паўтарыце тыя ж дзве каманды. Тунель, які вяртаецца толькі пасля перазапуску дэмана, не адрамантаваны — ён скінуты.