Диагностика задержек DNS: траблшутинг локальных резолверов и EDNS
- Открытие веб-сайтов и установка соединений занимают 2-5 секунд при высокой скорости загрузки контента.
- Утилита
digпоказываетQuery time: > 1000 msecили выдает ошибку;; connection timed out; no servers could be reached. - Приложения падают с таймаутом резолвинга при выполнении API-запросов.
- Логи локального DNS-сервера содержат ошибки
lame server resolving,SERVFAILилиEDNS buffer size error.
1. Точный замер времени ответа через dig
# Запрос через стандартный системный резолвер
dig error.itstm.ru +stats
# Запрос напрямую к апстрим-серверам для сравнения задержки
dig @127.0.0.1 error.itstm.ru +stats
dig @1.1.1.1 error.itstm.ru +stats
dig @8.8.8.8 error.itstm.ru +stats2. Проверка проблем с фрагментацией EDNS0 и размером буфера
Если фаервол блокирует фрагментированные UDP пакеты DNS размером более 512 байт, ограничьте размер буфера EDNS в запросе:
dig @1.1.1.1 error.itstm.ru +bufsize=1232 +dnssec3. Проверка сетевых потерь на порту UDP/53
# Проверка TCP-фолбэка DNS
dig @1.1.1.1 error.itstm.ru +tcp
# Захват сетевого трафика DNS
tcpdump -nn -i any port 534. Оптимизация локального резолвера (например, Unbound)
Отредактируйте /etc/unbound/unbound.conf для снижения задержек:
server:
edns-buffer-size: 1232
prefetch: yes
prefetch-key: yes
serve-expired: yes
serve-expired-ttl: 86400
msg-cache-size: 64m
rrset-cache-size: 128m
infra-cache-numhosts: 10000
fast-server-num: 3systemctl restart unbound5. Тюнинг параметров резолвера в Linux (/etc/resolv.conf)
options timeout:1 attempts:2 rotate single-request-reopen Частые вопросы (FAQ)
Что делает опция 'single-request-reopen' в /etc/resolv.conf?
По умолчанию glibc отправляет запросы на получение записей A (IPv4) и AAAA (IPv6) параллельно через один и тот же сокет. Некоторые некорректные домашние роутеры и фаерволы отбрасывают второй ответ. Эта опция заставляет систему открывать разные сокеты для каждого запроса.
Почему рекомендуемый размер буфера EDNS0 снизили до 1232 байт?
Согласно стандарту DNS Flag Day, размер буфера 1232 байта гарантирует прохождение DNS-ответов с включенным DNSSEC через каналы с минимальным IPv6 MTU (1280 байт) без фрагментации пакетов.
Что дает директива serve-expired в Unbound/Bind?
Она позволяет резолверу мгновенно отдавать клиенту устаревший кэш (TTL expired), параллельно запуская фоновое обновление записи в авторитетном сервере, что полностью устраняет задержки для конечных пользователей.
В чем разница между рекурсивным и авторитетным DNS-сервером?
Авторитетный сервер хранит исходные зоны и отдает точные ответы о своих доменах. Рекурсивный резолвер (локальный кэширующий DNS) последовательно обходит корневые, TLD и авторитетные серверы от имени клиента, кэшируя результаты.