Ответы DPD доказывают, что партнёр IKE жив, а не то, что ваши данные идут
Ответы о жизнеспособности, уведомление о заполнении и суженные селекторы описывают три разные вещи. Читайте их по отдельности, прежде чем винить одно из них в простое.
Журналы IPsec могут показывать ответы о жизнеспособности, пока приложение перед ними стоит, и оба факта могут быть верны одновременно. Ответ DPD устанавливает, что обработка IKE партнёра ответила в тот момент; он ничего не говорит о том, несёт ли дочерняя SA нужный вам пакет. Считать каждое предупреждение рядом со сбоем его причиной — это путь, которым проблема селектора диагностируется как ошибка протокола. Три наблюдения путают чаще всего, и они отвечают на три разных вопроса. Читайте их по связи и назначению, прежде чем читать по метке времени.
Что доказывает каждое наблюдение
Таблица отделяет то, что устанавливает каждое наблюдение, от того, что оно лишь сопровождает.
| Observation | What it establishes | What it leaves open |
|---|---|---|
| DPD replies arrive | The peer's IKE process answered | The child SA, forwarding path and application reply |
| TFC padding notification | The peer will not accept padding for that child SA | Whether ordinary ESP protection still works, which it does |
| Selectors reported as narrowed | The accepted traffic set is a subset of the offer | Whether the subset includes the flow the user needs |
Ни одно из трёх не является ошибкой само по себе. Каждое становится интересным только рядом с потоком, который вы отлаживаете, а строка, которую нельзя привязать к конкретному потоку, — это контекст, а не доказательство.
Жизнеспособность — не здоровье данных
DPD работает как обмен INFORMATIONAL, разговор плоскости управления между демонами IKE. Ответ доказывает, что процесс IKE партнёра доступен и готов отвечать, а тайм-аут доказывает, что нет. Ни один результат не проверяет дочернюю SA, селекторы, путь пересылки или ответ приложения, поэтому здоровый DPD рядом с остановленной передачей — это связная картина, а не противоречие.
Поэтому строки о жизнеспособности — наименее полезная часть тикета плоскости данных, как бы успокаивающе они ни выглядели в начале журнала.
Уведомление о заполнении — это утверждение о заполнении
Заполнение TFC — самая перечитываемая строка в этих журналах. Она говорит, что заполнение для конфиденциальности потока трафика не будет принято для этой дочерней SA, что является утверждением о необязательной функции заполнения, а не отказом от защиты ESP. Находить его рядом со сбоем обычно совпадение из-за многословности, и включение или выключение заполнения ничего не меняет в охвате селекторов.
Спецификация IKEv2 определяет и уведомление, и согласование селекторов, а предупреждающая метка реализации ни в одном из двух случаев не заменяет смысл протокола.
Сужение тише и вероятнее важно
Ответчик может принять подмножество предложенных селекторов, и принятое множество может быть напечатано в нескольких записях, одна с указанием порта, другая охватывает все порты. Чтение только первой строки с указанием порта занижает принятое; чтение только широкой строки завышает его. Сравните напечатанное предложение с установленной политикой, потому что предложение — это то, что сказали партнёры, а политика — то, с чем будет сопоставлять ядро. Когда они расходятся, туннель есть, а трафика нет, и это классическая периодическая жалоба. Меняйте местами локальную и удалённую перспективу при сравнении партнёров, поскольку локальное каждой стороны — это удалённое другой.
Записи, специфичные для хоста, с ограничением порта стоит прочитать дважды, потому что именно они исключают ICMP или второй порт, оставляя ping к шлюзу работающим.
Постройте одну запись для сбойного потока
Запишите источник, назначение, семейство адресов, протокол и порт так, как они видны при решении о защите, включая любой намеренный перевод. Это те значения, которые должны совпасть с селектором, и это также значения, которые люди заново набирают по памяти, когда тикет попадает к третьей паре рук.
Затем определите дочернюю SA и её направленные счётчики: swanctl --list-sas даёт сводку ассоциации на хосте strongSwan, а ip -s xfrm state даёт счётчики. Читайте их после свежего разрешённого запроса, а не пока система простаивает. Отсутствие роста исходящего трафика указывает на выбор или локальный путь; исходящий без соответствующего входящего указывает на партнёра, его пересылку или его ответы.
Завершённый обмен приложения важнее любого из счётчиков, поэтому тест должен заканчиваться на приложении, а не на индикаторе туннеля.
Выберите исправление после этого
Только когда эта запись существует, есть исправление, которое можно выбрать: принятые селекторы, маршрут, фильтрация, реализация партнёра или граница, которую вы только что продемонстрировали. Сброс партнёра меняет несколько состояний сразу и часто восстанавливает трафик, не объясняя, какое было неверным, поэтому сбой возвращается. Держите дампы состояния ядра вне тикетов, потому что они могут содержать ключи, а краткой сводки достаточно любому, кому нужно помочь.
Когда запись противоречит вашей первой теории, верьте записи и перепишите теорию; эта привычка ценнее любой отдельной строки журнала, обсуждаемой здесь.