Using degraded feature set UDP instead of TCP — Тюнинг DNS резолвера
Архитектура ошибки и симптомы сбоя
Предупреждение «systemd-resolved: Using degraded feature set (UDP) instead of (UDP+EDNS0+TCP) for DNS server» регистрируется службой systemd-resolved. Ошибка означает, что резолвер попытался использовать современные расширения протокола DNS (EDNS0 с размером буфера более 512 байт, TCP-fallback или DNS-over-TLS), но сетевой экран (брандмауэр, роутер, NAT) заблокировал пакеты или сбросил TCP-сессию на порт 53. Резолвер переходит в деградированный режим (Degraded Mode), снижая скорость работы и отключая DNSSEC.
Диагностическая таблица параметров сбоя
| Параметр | Значение | Инженерный смысл сбоя |
|---|---|---|
| EDNS0 (Extension Mechanisms) | Opt RR Buffer > 512B | Расширение протокола DNS для передачи больших ответов (до 4096 байт) без фрагментации. |
| TCP Fallback | Port 53 TCP | Переключение на протокол TCP, если размер DNS-ответа превышает лимит буфера UDP. |
| Degraded Feature Set | Legacy UDP Only | Откат к устаревшему стандарту DNS без поддержки шифрования и валидации подписей. |
Пошаговое дерево решений и сценарии траблшутинга
Сценарий 1: Проверка доступности порта 53 по протоколам UDP и TCP
# Проверка доступности TCP порта 53 вышестоящего DNS сервера:
nc -zvw3 1.1.1.1 53
# Проверка прохождения больших пакетов EDNS0:
dig @1.1.1.1 +edns=0 +bufsize=1232 example.comСценарий 2: Фиксация размера буфера EDNS0 и протокола в resolved.conf
Установите безопасный размер буфера EDNS0 (1232 байта) во избежание фрагментации IP-пакетов:
# Добавьте настройки в /etc/systemd/resolved.conf.d/dns-tuning.conf:
sudo mkdir -p /etc/systemd/resolved.conf.d/
cat <<EOF | sudo tee /etc/systemd/resolved.conf.d/dns-tuning.conf
[Resolve]
DNS=8.8.8.8#dns.google 1.1.1.1#cloudflare-dns.com
DNSSEC=allow-downgrade
DNSOverTLS=opportunistic
ReadEtcHosts=yes
EOF
# Перезапустите службу:
sudo systemctl restart systemd-resolvedСценарий 3: Настройка правил межсетевого экрана для TCP 53
Убедитесь, что локальный фаервол (iptables / ufw / nftables) не блокирует исходящий TCP-трафик на порт 53:
# Разрешение исходящего DNS по TCP и UDP:
sudo iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
sudo iptables -A OUTPUT -p tcp --dport 53 -j ACCEPTITSTM проведет тюнинг параметров EDNS0/DoT и устранит скрытые блокировки в корпоративных сетевых экранах.
Частые вопросы (FAQ)
Почему размер буфера EDNS0 рекомендуется выставлять именно в 1232 байта?
Размер 1232 байта (DNS Flag Day standard) гарантирует, что общий размер IPv6/IPv4 пакета с заголовками не превысит стандартный минимальный MTU 1280 байт, исключая потерю пакетов из-за IP-фрагментации.
Чем опасен деградированный режим (degraded feature set)?
В этом режиме резолвер не может получать большие ответы (например, TXT-записи для DKIM/SPF или списки IP-адресов CDN), что приводит к сбоям в работе почты и веб-сервисов.
Как проверить текущий статус подключения к конкретному DNS серверу?
Выполните команду resolvectl status eth0 и найдите строку 'Current DNS Server'.
Что означает DNSOverTLS=opportunistic?
Резолвер сначала пытается установить зашифрованное соединение по порту 853 (DoT). Если сервер не поддерживает шифрование, он безопасно откатывается на стандартный порт 53.