
dnsdiag v2.9.4
Набор инструментов для измерения DNS, устранения неполадок и аудита безопасности
Набор инструментов для измерения, диагностики и аудита безопасности DNS
Вы когда-нибудь задумывались, не перехватывает ли ваш провайдер DNS-трафик? Замечали ли вы необычное поведение в ответах DNS или перенаправление на неверный адрес и подозревали, что с вашим DNS что-то не так? Мы предлагаем набор инструментов для базового аудита ваших DNS-запросов и ответов, помогающий убедиться, что DNS работает должным образом.
С помощью dnsping вы можете измерить время отклика любого DNS-сервера для произвольных запросов. Подобно обычной утилите ping, dnsping предоставляет аналогичную функциональность для DNS-запросов, помогая отслеживать отзывчивость сервера.
Вы также можете отследить маршрут вашего DNS-запроса до пункта назначения с помощью dnstraceroute, убедившись, что он не перенаправляется и не перехватывается. Сравнивая DNS-запросы, отправленные на один и тот же сервер, dnstraceroute позволяет наблюдать различия в путях прохождения, предупреждая о возможных проблемах.
dnseval оценивает несколько DNS-резолверов, помогая выбрать лучший DNS-резолвер для вашей сети. Хотя использование собственного DNS-резолвера рекомендуется, чтобы избежать зависимости от сторонних DNS-резолверов, dnseval может помочь в выборе оптимального DNS-резолвера при необходимости. Он позволяет сравнивать DNS-серверы по производительности (задержке) и надёжности (потере пакетов), предоставляя полную картину для принятия обоснованных решений.
Установка
Существует несколько способов использования этого набора инструментов, хотя мы рекомендуем запускать его непосредственно из исходного кода для оптимальной гибкости и контроля. Запуск из исходного кода или установка через pip требует Python 3.11 или новее.
Исходный код
- Клонируйте git-репозиторий и установите зависимости:
git clone https://github.com/farrokhi/dnsdiag.git
cd dnsdiag
pip3 install -r requirements.txt
- В качестве альтернативы вы можете установить пакет с помощью pip:
pip3 install dnsdiag
Использование uv (рекомендуется)
uv — это быстрый менеджер пакетов Python, который может запускать инструменты напрямую без установки:
# Запуск dnsping напрямую без установки
uvx --from dnsdiag dnsping google.com
# Запуск с определёнными параметрами
uvx --from dnsdiag dnsping -c 5 --tls -s 8.8.8.8 example.com
# Запуск dnstraceroute
uvx --from dnsdiag dnstraceroute cloudflare.com
# Запуск dnseval
uvx --from dnsdiag dnseval -f public-servers.txt github.com
Для постоянной установки dnsdiag:
# Установка инструментов dnsdiag
uv tool install dnsdiag
# Обновление до последней версии
uv tool upgrade dnsdiag
Бинарный пакет
Время от времени выпускаются бинарные пакеты для Windows, Mac OS X и Linux. Вы можете скачать последний релиз со страницы релизов.
Поддерживаемые платформы
Готовые бинарные файлы доступны для:
- Linux (x86_64, ARM64)
- macOS (Intel, Apple Silicon)
- Windows (x86_64)
Windows ARM64 в настоящее время не поддерживается из-за зависимостей сборки, требующих нативных инструментальных цепочек компиляции, которые не всегда доступны. Если вы используете Windows на ARM, вы можете запускать dnsdiag с помощью подсистемы Windows для Linux (WSL2) или установить напрямую из исходного кода.
Docker
Если вы предпочитаете не устанавливать dnsdiag на свою локальную машину, вы можете использовать образ Docker для запуска инструментов в контейнеризованной среде. Например:
docker run --network host -it --rm farrokhi/dnsdiag dnsping.py
dnsping
dnsping позволяет «пинговать» DNS-резолвер, отправляя произвольный DNS-запрос несколько раз. Для полного списка поддерживаемых параметров командной строки используйте --help. Вот несколько ключевых флагов:
- Используйте
--tcp,--tls,--doh,--quicили--http3для выбора транспортного протокола (по умолчанию UDP). Эти параметры взаимоисключающие; в одной команде можно указать только один протокол. - Используйте
--flagsдля отображения флагов ответа, включая флаги EDNS, для каждого ответа. - Используйте
--dnssecдля запроса валидации DNSSEC, если она доступна. - Расширенные сообщения об ошибках DNS (RFC 8914) отображаются автоматически при наличии.
- Используйте
--nsidдля отображения идентификатора сервера имён (NSID), если он доступен (RFC 5001). - Используйте
--ecsдля включения информации EDNS Client Subnet для оптимизации географической маршрутизации. - Используйте
--cookieдля отображения DNS-куки (RFC 7873), когда они присутствуют в ответах.
./dnsping.py -c 5 --dnssec --flags --tls -t AAAA -s 8.8.8.8 brokendnssec.net
dnsping.py DNS: 8.8.8.8:853, hostname: brokendnssec.net, proto: TLS, class: IN, type: AAAA, flags: [RD]
75 bytes from 8.8.8.8: seq=1 time=73.703 ms SERVFAIL [QR RD RA -- DO] [EDE:10("For brokendnssec.net/soa")]
75 bytes from 8.8.8.8: seq=2 time=69.523 ms SERVFAIL [QR RD RA -- DO] [EDE:10("For brokendnssec.net/soa")]
75 bytes from 8.8.8.8: seq=3 time=58.058 ms SERVFAIL [QR RD RA -- DO] [EDE:10("For brokendnssec.net/soa")]
75 bytes from 8.8.8.8: seq=4 time=54.235 ms SERVFAIL [QR RD RA -- DO] [EDE:10("For brokendnssec.net/soa")]
75 bytes from 8.8.8.8: seq=5 time=57.806 ms SERVFAIL [QR RD RA -- DO] [EDE:10("For brokendnssec.net/soa")]
--- 8.8.8.8 dnsping statistics ---
5 requests transmitted, 5 responses received, 0% lost
min=54.235 ms, avg=22.665 ms, max=69.523 ms, stddev=38.202 ms
dnsping также предоставляет статистику, такую как минимальное, максимальное и среднее время отклика, а также джиттер (стандартное отклонение) и потерю пакетов.
Вот несколько интересных вариантов использования dnsping:
- Сравнение времени отклика для разных транспортных протоколов (например, UDP и DoH).
- Оценка надёжности вашего DNS-сервера путём измерения джиттера и потери пакетов.
- Измерение времени отклика с включённым DNSSEC с помощью флага
--dnssec. - Тестирование поведения EDNS Client Subnet для ответов с учётом геолокации:
./dnsping.py -c 3 --ecs 203.0.113.0/24 -s 94.140.14.14 google.com
dnsping.py DNS: 94.140.14.14:53, hostname: google.com, proto: UDP, class: IN, type: A, flags: [RD]
66 bytes from 94.140.14.14: seq=1 time=31.407 ms NOERROR [ECS:203.0.113.0/24/24]
66 bytes from 94.140.14.14: seq=2 time=29.156 ms NOERROR [ECS:203.0.113.0/24/24]
66 bytes from 94.140.14.14: seq=3 time=30.892 ms NOERROR [ECS:203.0.113.0/24/24]
--- 94.140.14.14 dnsping statistics ---
3 requests transmitted, 3 responses received, 0% lost
min=29.156 ms, avg=30.485 ms, max=31.407 ms, stddev=1.176 ms
- Идентификация DNS-серверов с помощью опции NSID:
./dnsping.py -c 2 --nsid -s 8.8.8.8 google.com