1. Закрепите видимость DNS
Установите сенсор, версию Zeek и точку сети, где виден обмен клиента с resolver. Описание соответствует Zeek 9.0.1. Для обычного dns.log нужен наблюдаемый анализируемый DNS. Отсутствие расшифрованных данных DoH/DoT нельзя выдавать за отсутствие разрешения имён. Сохраните формат JSONL либо TSV и период capture.
2. Найдите конкретный вопрос
В JSON-копии отберите query, затем уточните тип запроса, время и участников. Если известен uid, используйте его вместе с сенсором и временной областью. trans_id не уникален глобально и может повторяться. Для одного соединения возможны разные DNS-транзакции, поэтому один uid не является идентификатором одного вопроса. Сохраняйте исходную строку с флагами и доступным временем ответа.
3. Прочитайте иллюстрацию
Пример содержит A-запрос app.example.invalid, rcode=2 и имя SERVFAIL. Это пространство кодов ответа DNS, а не TYPE 2. rejected=false не означает, что запрос успешно разрешён: это отдельный признак отклонения запроса сервером, тогда как исход уточняет RCODE. Отсутствующие в сокращённом фрагменте answers и TTLs не следует заменять вымышленными адресами или нулевыми значениями.
4. Проверьте состав ответа
Сопоставьте qtype, rcode, answers и TTLs с конкретной транзакцией. Имя, полученный адрес и дальнейшее соединение — разные наблюдения: кеш клиента и повторные ответы могут менять связь. Не объявляйте DNS-запрос доказательством посещения сайта. Для ошибки отделите полученный отрицательный ответ от случая, где сенсор вообще не сопоставил ответ с запросом.
5. Перейдите к сетевому и серверному контексту
Через uid найдите conn.log того же наблюдения и установите resolver, протокол и видимость направлений. Для причины SERVFAIL нужны сведения выбранного resolver и его зависимостей. Если исследуется дальнейшее обращение, отдельно ищите соединение клиента к адресу из ответа с разумным временным окном; одинаковый IP на CDN не устанавливает одно приложение или одного пользователя.
6. Если вопрос или ответ не найден
Проверьте шифрование DNS, capture-фильтр, потери, точку наблюдения, ротацию и формат. Клиент мог получить адрес из локального кеша и не отправить новый вопрос в нужный период. Уточните тип A/AAAA и нормализацию имени при поиске. В итоговой заметке разделите отсутствие запроса, отсутствие сопоставленного ответа и отсутствие последующего соединения: это разные ограничения.