Завантажений профіль strongSwan — не активний тунель
strongSwan завантажує визначення, а потім узгоджує IKE і CHILD SA. Те, що профіль завантажено, нічого не каже про наявність тунелю чи про те, хто його запускає.
Перелік з'єднання в конфігурації strongSwan доводить лише те, що визначення завантажено. Це не означає, що з партнером зв'язалися, що існує IKE SA або що якийсь трафік захищено. Демон розглядає визначення та живі асоціації як окремі об'єкти, і відстань між ними — усвідомлений проєктний вибір. Знання того, який об'єкт ви перевіряєте, перетворює неясну несправність на конкретну наступну команду.
Завантаження — це не підключення
Завантажене з'єднання — це твердження про те, що можна буде узгодити пізніше: адреси партнера, облікові дані, пропозиції та селектори трафіку. Ніщо в цьому твердженні не вимагає, щоб демон комусь зателефонував. Шлюз може чекати іншу сторону, ініціювати під час запуску або чекати, поки його розбудить відповідний трафік. Усі три варіанти припустимі, і всі три виглядають однаково у файлі конфігурації, доки ви не прочитаєте політику запуску.
Оператори потрапляють у біду, читаючи список визначень як список станів. Профіль є, отже, тунель вважається піднятим, і наступна година йде на налагодження маршрутів для асоціації, яка так і не була побудована.
Зворотна помилка так само поширена. Відсутній профіль змушує людей шукати мережеву несправність, хоча конфігурація так і не завантажилася. Назвіть об'єкт, а потім виконайте команду, яка його спостерігає.
Три об'єкти, три спостереження
strongSwan тримає завантажене визначення, IKE SA і CHILD SA. Перше — конфігурація, друге — автентифікований керівний зв'язок, третє — узгоджений захист вибраного трафіку. Вони навіть мають окремі імена, тож профіль з іменем hq може володіти child з іменем hq-lan.
Таблиця зіставляє кожен рівень із командою, що його показує. Прочитайте рядок, перш ніж читати журнал.
| Layer | What it contains | Command |
|---|---|---|
| Definition | Peer addresses, credentials, proposals, and traffic selectors | swanctl --list-conns |
| IKE SA | One authenticated control channel to the peer | swanctl --list-sas |
| CHILD SA | Keys and selectors for the traffic being protected | Child 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 — не фінішна лінія. Правила пересилання, маршрути й власні дозволи застосунку все ще мають збігтися. Життєвий цикл відповідає на питання, що узгоджено; він не може вирішити, кому можна користуватися сервісом.