Перечисление подключения в конфигурации strongSwan доказывает только то, что определение загружено. Это не значит, что с партнёром связались, что существует IKE SA или что какой-либо трафик защищён. Демон рассматривает определения и живые ассоциации как отдельные объекты, и расстояние между ними — осознанный проектный выбор. Знание того, какой объект вы проверяете, превращает смутную неисправность в конкретную следующую команду.

Загрузка — это не подключение

Загруженное подключение — это утверждение о том, что можно будет согласовать позже: адреса партнёра, учётные данные, предложения и селекторы трафика. Ничто в этом утверждении не требует, чтобы демон кому-то позвонил. Шлюз может ждать другую сторону, инициировать при запуске или ждать, пока его разбудит подходящий трафик. Все три варианта допустимы, и все три выглядят одинаково в файле конфигурации, пока вы не прочитаете политику запуска.

Операторы попадают в беду, читая список определений как список состояний. Профиль есть, значит туннель считается поднятым, и следующий час уходит на отладку маршрутов для ассоциации, которая так и не была построена.

Обратная ошибка столь же распространена. Отсутствующий профиль отправляет людей искать сетевую неисправность, хотя конфигурация так и не загрузилась. Назовите объект, а затем выполните команду, которая его наблюдает.

Три объекта, три наблюдения

strongSwan хранит загруженное определение, IKE SA и CHILD SA. Первое — конфигурация, второе — аутентифицированное отношение управления, третье — согласованная защита выбранного трафика. У них даже есть отдельные имена, так что профиль с именем hq может владеть child с именем hq-lan.

Таблица сопоставляет каждый уровень команде, которая его показывает. Прочитайте строку, прежде чем читать журнал.

LayerWhat it containsCommand
DefinitionPeer addresses, credentials, proposals, and traffic selectorsswanctl --list-conns
IKE SAOne authenticated control channel to the peerswanctl --list-sas
CHILD SAKeys and selectors for the traffic being protectedChild rows under the IKE SA

Запрос child сначала строит его родительский IKE SA, если такого нет. Запрос только IKE SA — это другой вызов. Канал управления, который корректно аутентифицируется, не гарантирует запрошенный child.

Эта разница важна при частичном отказе. IKE SA может быть здоровым, пока child не справляется из-за несовпадения селектора или предложения, которое партнёр не принимает. Оба объекта отказывают по разным причинам, поэтому заслуживают отдельных наблюдений.

Выбирайте действие запуска осознанно

В swanctl.conf start_action child определяет поведение после загрузки. Значение по умолчанию none оставляет определение для ручного инициирования или использования в роли responder. start набирает его, тогда как trap оставляет политику, которая согласует соединение, как только появится подходящий трафик.

Значит, и «загрузка никогда не запускает туннель», и «загрузка всегда запускает его» неверны. Действие — часть профиля, и оно должно соответствовать роли партнёра. Два шлюза, которые оба ждут другую сторону, дают тишину, а не туннель.

При trap трафик должен соответствовать селекторам, поэтому посторонний ping ничего не разбудит. При start адрес партнёра должен быть пригодным, и обе стороны должны договориться об аутентификации и предложениях. Ни одно из действий не заменяет проверку этих условий.

Восстановление — отдельная политика

Запуск — это не keepalive. Обнаружение мёртвого партнёра, явное закрытие со стороны партнёра, смена ключей и перезапуск процесса — разные события жизненного цикла со своими настройками. Настраивайте каждое из них осознанно, а не рассчитывайте, что начальный запуск покроет их все.

Туннель, который поднимается при загрузке и умирает через час, — вопрос восстановления. Политика запуска сделала своё дело и перестала иметь значение. Посмотрите на настройки DPD и смены ключей, прежде чем винить начальное согласование.

Замена загруженных определений — отдельная операция. Нестандартные политики запуска имеют документированные обратные действия, а перезагрузка — это операционное изменение, а не допущение, что каждая ассоциация обновилась на месте. Выполняйте перезагрузки поэтапно, там где переподключение допустимо. Сохраняйте старую конфигурацию, пока новая не доказана.

Проверьте, что существует, прежде чем отлаживать маршрутизацию

Выполните три наблюдения по порядку: загруженные определения, активные IKE SA и записи child. Каждый ответ сужает следующий вопрос. Пропустите шаг, и вы в итоге будете отлаживать уровень, который так и не был построен.

Начните с того, что загружено, и с того, что действительно установлено:

swanctl --list-conns
swanctl --list-sas

Если child отсутствует, а профиль корректен, инициируйте его по имени и наблюдайте, что произойдёт. Вывод обычно сообщает, поднялся ли родитель первым.

swanctl --initiate --child hq-lan

Активный CHILD SA — не финишная черта. Правила пересылки, маршруты и собственные разрешения приложения всё ещё должны совпасть. Жизненный цикл отвечает на вопрос, что согласовано; он не может решить, кому можно пользоваться сервисом.

Похожие статьи