Устранение неполадок DNS-запросов в Tshark

WiresharkBeginner
Практиковаться сейчас

Введение

В этом лабораторном занятии вы научитесь устранять неполадки с DNS-запросами с помощью утилиты Tshark из пакета Wireshark, выполняя практические упражнения. Вы будете захватывать DNS-трафик с использованием фильтра "udp port 53", анализировать запросы с помощью фильтров отображения, таких как "dns.qry.name", и изучать статистику времени с помощью опции "dns,tree".

В рамках лабораторного занятия вы научитесь практическим методам выделения DNS-пакетов, визуализации времени выполнения запросов и извлечения подробной информации о пакетах с использованием флага "-V". Завершив эти упражнения, вы приобретете важные навыки диагностики проблем с DNS с использованием профессиональных методов анализа пакетов.

Захват DNS с помощью -f "udp port 53"

На этом этапе вы научитесь захватывать DNS-трафик с использованием фильтра захвата в Wireshark. DNS (Domain Name System, Система доменных имен) похожа на телефонную книгу интернета, преобразующую человекочитаемые доменные имена (например, example.com) в машинночитаемые IP-адреса. Большинство DNS-запросов используют UDP-порт 53, так как они небольшие и быстрые, в то время как более крупные ответы могут использовать TCP.

  1. Сначала откройте терминал в виртуальной машине LabEx, если вы еще этого не сделали. Все команды будут выполняться в каталоге по умолчанию ~/project. Именно здесь мы сохраним наши файлы с захваченным трафиком.

  2. Запустите Wireshark из терминала с помощью следующей команды:

wireshark &

Символ & запускает Wireshark в фоновом режиме, позволяя вам продолжать использовать терминал, пока Wireshark остается открытым. Это полезно, когда вам нужно выполнять другие команды во время анализа сети.

  1. В главном интерфейсе Wireshark:

    • Выберите активный сетевой интерфейс (обычно eth1). Это сообщает Wireshark, какое сетевое подключение нужно отслеживать.
    • В поле фильтра захвата введите: udp port 53. Этот фильтр гарантирует, что Wireshark будет захватывать только DNS-трафик, уменьшая количество лишней информации от другой сетевой активности.
    • Нажмите значок акулы для начала захвата пакетов. Вы увидите, как интерфейс начнет отображать сетевую активность.
  2. Чтобы сгенерировать некоторый DNS-трафик для тестирования, откройте другой терминал и выполните команду:

nslookup example.com

Эта команда просит вашу систему найти IP-адрес для "example.com", создавая DNS-трафик, который мы хотим захватить. Можно представить это как тестовый звонок, чтобы проверить, работает ли наш мониторинг.

  1. В Wireshark вы должны увидеть захваченные DNS-пакеты. Они будут отображаться в виде строк в главном окне, обычно показывая запрос и ответ. Остановите захват, нажав красную квадратную кнопку, когда увидите достаточно трафика.

  2. Сохраните файл с захваченным трафиком для дальнейшего анализа:

    • Перейдите в меню Файл → Сохранить как
    • Сохраните его как dns_capture.pcapng в каталоге ~/project. Этот формат файла сохраняет все исходные данные пакетов для подробного исследования.

Основные моменты, которые необходимо понять:

  • -f "udp port 53" - это фильтр захвата, который записывает только DNS-трафик, аналогично тому, как специальный микрофон может слышать только DNS-разговоры.
  • DNS в основном использует UDP-порт 53, так как он эффективен для небольших запросов, в то время как TCP (Transmission Control Protocol, Протокол передачи управления) используется для более крупных ответов, которые требуют надежной доставки.
  • Файл с захваченным трафиком содержит исходные сетевые пакеты в их первоначальной форме, которые мы проанализируем на последующих этапах, чтобы понять, что именно происходит при разрешении DNS.

Фильтрация запросов с помощью -Y "dns.qry.name"

На этом этапе вы научитесь фильтровать DNS-запросы в Wireshark с использованием фильтров отображения. DNS (Domain Name System, Система доменных имен) похожа на телефонную книгу интернета, преобразующую человекочитаемые доменные имена в машинночитаемые IP-адреса. При устранении неполадок в сети анализ DNS-трафика может дать важные подсказки.

Мы сосредоточимся на поле dns.qry.name, которое конкретно показывает доменные имена, запрашиваемые в DNS-запросах. Это особенно полезно, когда вам нужно проанализировать трафик, связанный с определенными веб-сайтами или сервисами, из захвата, который мы создали на предыдущем этапе.

  1. Сначала откроем файл с захваченным трафиком, который мы сохранили ранее, в Wireshark. Символ & в конце запускает команду в фоновом режиме, чтобы вы могли продолжать использовать терминал:
wireshark ~/project/dns_capture.pcapng &
  1. В строке фильтра отображения в Wireshark (пустое поле сразу под панелью инструментов) введите следующий точный фильтр, чтобы увидеть только DNS-запросы для "example.com":
dns.qry.name == "example.com"

Этот фильтр строгое равенства (==) покажет только пакеты, в которых запрашиваемый домен точно совпадает с "example.com".

  1. Чтобы увидеть все DNS-запросы, независимо от запрашиваемого домена, просто используйте само имя поля:
dns.qry.name

Это отобразит все пакеты, содержащие имена DNS-запросов, что поможет вам понять, какие домены запрашиваются в вашей сети.

  1. Чтобы получить более полное представление, показывающее как DNS-запросы (запросы), так и ответы, используйте этот фильтр, который проверяет флаг ответа DNS:
dns.flags.response == 0 || dns.flags.response == 1

Здесь dns.flags.response == 0 показывает запросы (запросы), а dns.flags.response == 1 показывает ответы.

  1. Иногда вам может понадобиться найти все запросы, связанные с определенной организацией или сервисом. Попробуйте отфильтровать частичные совпадения доменов, используя оператор "contains":
dns.qry.name contains "example"

Это будет соответствовать любому домену, содержащему "example", например "example.com", "test.example.org" или "example.net".

Основные моменты, которые необходимо понять:

  • -Y - это опция фильтра отображения в Wireshark (эквивалентна вводу в строку фильтра)
  • dns.qry.name - это конкретное поле в DNS-пакетах, которое содержит запрашиваемое доменное имя
  • Фильтры отображения помогают вам сосредоточиться на конкретных шаблонах трафика, скрывая не связанные пакеты
  • Фильтры могут использовать различные операторы сравнения:
    • == для точных совпадений
    • != для исключения
    • contains для частичных совпадений
  • Протокол DNS включает флаги для различения между запросами (response == 0) и ответами (response == 1)

Анализ временных параметров с помощью -z dns,tree

DNS (Domain Name System, Система доменных имен) похожа на телефонную книгу интернета, преобразующая человекочитаемые доменные имена в машинночитаемые IP-адреса. При устранении неполадок в сети анализ времени ответа DNS может выявить узкие места в производительности. На этом этапе мы воспользуемся встроенной функцией статистики в Wireshark с опцией -z dns,tree для измерения того, насколько быстро DNS-серверы отвечают на запросы.

  1. Перед началом убедитесь, что Wireshark не запущен. Мы будем анализировать заранее захваченный файл DNS-трафика из терминала. Символ & в конце позволяет продолжать использовать терминал, пока Wireshark работает:
wireshark -z dns,tree ~/project/dns_capture.pcapng &
  1. Откроется новое окно с надписью "DNS Statistics" (Статистика DNS), которое отобразит три основных части информации в древовидной структуре:

    • Все DNS-запросы и соответствующие им ответы
    • Время, затраченное на получение ответа для каждого запроса
    • Частоту запросов для каждого домена
  2. Рассмотрим колонки статистики более внимательно:

    • "Count" (Количество) показывает, сколько раз ваша система запрашивала каждый домен
    • "Average" (Среднее) отображает типичное время ответа для каждого домена
    • "Min" (Минимальное) и "Max" (Максимальное) показывают наилучшее и наихудшее время ответа
  3. Чтобы увидеть более интересные данные в нашем анализе, сгенерируем новые DNS-запросы. Откройте новое окно терминала и выполните эти распространенные команды запроса:

nslookup google.com
nslookup labex.io
  1. После выполнения этих команд вернитесь в окно "DNS Statistics" и нажмите "Reload" (Перезагрузить), чтобы обновить статистику с учетом новых запросов, которые вы только что сгенерировали.

Основные концепции, которые необходимо запомнить:

  • Команда -z dns,tree активирует специализированный режим анализа DNS в Wireshark
  • Измерения времени ответа помогают определить медленные DNS-серверы или задержки в сети
  • Древовидное представление группирует связанные запросы для более удобного анализа
  • Всегда перезагружайте файл с захваченным трафиком, чтобы увидеть последние статистические данные после новой DNS-активности

Показать результаты с помощью -V

На этом этапе мы узнаем, как подробно изучать DNS-пакеты с помощью подробного режима Wireshark с опцией -V. При устранении неполадок в DNS просмотр всех деталей протокола является важным для понимания того, что именно происходит в сетевом трафике.

  1. Перед началом убедитесь, что все окна Wireshark закрыты, чтобы избежать путаницы. Затем выполните эту команду, чтобы открыть файл с захваченным трафиком с полными деталями протокола:
wireshark -V -r ~/project/dns_capture.pcapng &

Флаг -V сообщает Wireshark отображать подробный вывод, показывая всю доступную информацию о протоколе, а не только базовую сводку пакета.

  1. В интерфейсе Wireshark обратите внимание на среднюю панель с названием "Packet Details" (Подробности пакета). Вот как можно изучить информацию о DNS:

    • Нажмите стрелку рядом с "Domain Name System" (Система доменных имен), чтобы развернуть его
    • Вы увидите полную структуру DNS-сообщения, включая:
      • Является ли это запросом или ответом
      • Уникальные идентификаторы транзакций, которые связывают запросы с ответами
      • Флаги статуса, указывающие на успех или ошибки
      • Все обмениваемые записи ресурсов
  2. При рассмотрении DNS-запроса (обычно отправляемого от клиента к серверу) обратите особое внимание на:

    • Тип запроса: Это показывает, какого типа запись запрашивается (A для IPv4, AAAA для IPv6, MX для почтовых серверов)
    • Класс запроса: Почти всегда "IN" для интернет-класса
    • Идентификатор транзакции: Случайное число, которое помогает связать этот запрос с его ответом
  3. Для DNS-ответных пакетов (от сервера к клиенту) проверьте эти важные поля:

    • Код ответа: "0" означает, что ошибок не произошло
    • Количество ответов: Сколько записей было возвращено
    • Значения TTL: Как долго эти DNS-ответы могут быть кэшированы
    • Фактические данные: Например, IP-адреса при запросе записей A
  4. Чтобы сохранить этот подробный анализ для последующего изучения или обмена с коллегами, выполните эту команду:

tshark -V -r ~/project/dns_capture.pcapng > ~/project/dns_analysis.txt

Это создаст текстовый файл, содержащий весь подробный вывод из вашего захвата.

Основные концепции, которые необходимо запомнить:

  • Опция -V показывает полный разбор протокола каждого пакета
  • Вы можете увидеть каждый уровень стека протокола DNS
  • Такая детализация необходима при диагностике сложных проблем с DNS
  • Комбинируйте с фильтрами (например, dns), чтобы сосредоточиться на конкретных пакетах, сохраняя при этом полные детали

Резюме

В этом практическом занятии вы узнали, как устранять неполадки с DNS-запросами с помощью утилиты Tshark в Wireshark. В ходе упражнения показано, как захватывать DNS-трафик с использованием фильтра по UDP-порту 53 и анализировать запросы с помощью целевых фильтров отображения, таких как dns.qry.name.

Вы практиковались в генерации тестового трафика с помощью nslookup и сохранении захваченного трафика для анализа, что дало вам представление о поведении протокола DNS и мощных возможностях фильтрации в Wireshark для выделения запросов конкретных доменов. Эти навыки являются важными для устранения неполадок в сети и проведения исследований, связанных с DNS.