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

Во-первых, убедитесь, что запись начинается с начала

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

Ограничьте запись двумя конечными точками и UDP 500 и 4500, чтобы файл оставался достаточно малым для чтения. На загруженном хосте нефильтрованная запись погребает переговоры под посторонним трафиком.

tcpdump -i any -n -s 0 -w fresh-ike.pcap 'udp port 500 or udp port 4500'

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

Во-вторых, читайте заголовок до полезных нагрузок

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

Полезные нагрузки предложения, обмена ключами и nonce в этом первом обмене читаются в открытом виде. Читаемость не означает аутентификацию, и на этом этапе ни одна сторона не доказала свою подлинность.

Закрытое значение Diffie-Hellman никогда не пересекает провод, поэтому запись не позволяет вывести сеансовые ключи. Аутентификация происходит в следующем обмене, защищённом тем, о чём договорился первый. Если кто-то спросит, подлинна ли сторона, этот обмен не может ответить на такой вопрос. Он может лишь показать, что обе стороны согласились на предложение и создали общий секрет, которого в файле нет.

В-третьих, сопоставьте запрос с его ответом

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

Ответ может быть и отказом: запрос cookie, уведомление о неприемлемой группе или ошибка о предложении. Это законные ответы, и они означают, что путь работает, а политика — нет. Декодируйте уведомление, а не считайте каждый ответ успехом. Когда уведомление называет группу или предложение, исправление находится на стороне конфигурации, а не на межсетевом экране.

Направление тоже важно. Запрос без ответа и ответ, который никогда не доходит до клиента, — разные неисправности, и только вторая выглядит как тайм-аут на стороне клиента.

В-четвёртых, отделите IKE от всего остального на 4500

Порт 4500 несёт три вещи, которые в сводном виде выглядят одинаково: IKE за четырёхбайтовым нулевым маркером non-ESP, инкапсулированный ESP, в позиции маркера которого стоит ненулевой SPI, и короткие keepalive. Именно маркер отделяет IKE от инкапсулированного ESP, поэтому прочитайте эти байты, прежде чем называть трафик IKE. Метка записи, читающая 4500, — это номер порта, а не протокол.

Инкапсулированный ESP — это зашифрованная нагрузка, которую нельзя истолковать без ключей, и его присутствие может быть признаком работающего туннеля, а не неисправности.

Наблюдайте оба порта для одной и той же попытки, потому что IKE может перейти на 4500 после обнаружения NAT, хотя открылся на 500. След, отфильтрованный только по 500, выглядит тихим именно тогда, когда переговоры удались и переместились. Расширьте фильтр и перечитайте то же временное окно, прежде чем делать какой-либо вывод из отсутствия.

Что означает тишина в одной точке наблюдения

Отсутствие ответа у клиента доказывает только то, что наблюдала эта точка. Фильтрация, маршрутизация, неверный удалённый адрес, остановленная служба и несовпадение протокола дают один и тот же пустой след.

Уместный ICMP unreachable добавляет доказательство, но прочитайте процитированный в нём пакет и запишите адрес отправившего его устройства.

Отказ маршрутизатора — это другое событие, чем аутентифицированная ошибка, возвращённая стороной, и только вторая доказывает, что служба жива. Сопоставьте ту же попытку с серверными журналами или с одобренным наблюдением, чтобы узнать, пришёл ли запрос и ушёл ли ответ. Держите записи ограниченными и приватными, потому что читаемые поля рукопожатия не делают остаток файла безвредным. Результат, который стоит получить, — это одна сопоставленная пара запроса и ответа или один документированный пробел с названной точкой наблюдения.

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