Отдалеченият шлюз се рестартира, връща се до минута, а локалният демон на strongSwan продължава да работи, докато тунелът остава долу. Задача в cron, която търси ESTABLISHED и рестартира демона, в крайна сметка ще прикрие това, но ще прекъсне и всеки несвързан тунел на машината, а може би ще пропусне точно този, който е отказал. Възстановяването принадлежи на връзката, която трябва да се върне, изразено в настройки, които преживяват презареждане. Това ръководство настройва това за една връзка и доказва резултата по име.

Откажете се от глобалния рестарт, запазете доказателствата му

Рестартът на демона носи два конкретни дефекта: унищожава състоянието на всяка връзка и не ви казва кое събитие всъщност е отказало. Текстът за състоянието, който сте търсили, може да е дошъл от друга връзка, докато нужният 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

Върнете назад, като възстановите предишния файл и го заредите отново, после повторете същите две команди. Тунел, който се връща само след рестарт на демона, не е поправен, а е нулиран.

Подобни статии