DNS на стороне клиента [109.4]

Рейтинг: 68.5% · 14 голосов
Полный курс LPIC-1 (экзамены 101-500 и 102-500): архитектура, загрузка, пакеты, команды и текст, ФС и права, шелл-скрипты, пользователи, сервисы, сеть, безопасность. Debian и RHEL.
Ответить
Аватара пользователя
Sergey_Sysadmin
Сообщения: 134
Зарегистрирован: 11 май 2026, 05:31

DNS на стороне клиента [109.4]

Сообщение Sergey_Sysadmin »

Оглавление курса (41)
  1. Введение в LPIC-1 и как устроен путь администратора
  2. Железо, устройства и модули ядра [101.1]
  3. Загрузка системы: от BIOS до systemd [101.2]
  4. systemd, цели и уровни выполнения [101.3]
  5. План разметки диска и swap [102.1]
  6. Загрузчик GRUB 2 [102.2]
  7. Разделяемые библиотеки [102.3]
  8. Управление пакетами в Debian: dpkg и apt [102.4]
  9. Управление пакетами RPM, DNF и Zypper [102.5]
  10. Linux как гость виртуализации [102.6]
  11. Командная строка Bash [103.1]
  12. Обработка текста фильтрами [103.2]
  13. Базовое управление файлами [103.3]
  14. Потоки, конвейеры и перенаправление [103.4]
  15. Процессы: создание, мониторинг, сигналы [103.5]
  16. Приоритеты выполнения процессов [103.6]
  17. Регулярные выражения [103.7]
  18. Редактор vi и vim [103.8]
  19. Разделы и создание файловых систем [104.1]
  20. Целостность и обслуживание ФС [104.2]
  21. Монтирование файловых систем [104.3]
  22. Урок 21. Права доступа и владение: rwx, chmod, umask и специальные биты
  23. Жёсткие и символические ссылки
  24. FHS и поиск файлов в системе [104.7]
  25. Окружение и кастомизация оболочки [105.1]
  26. Урок 25. Написание простых bash-скриптов [105.2]
  27. Графика, рабочие столы и доступность
  28. Учётные записи пользователей и групп
  29. Автоматизация задач: cron, at, таймеры [107.2]
  30. Локализация и интернационализация [107.3]
  31. Системное время и синхронизация [108.1]
  32. Системное логирование [108.2]
  33. Основы почтового агента (MTA) [108.3]
  34. Печать и CUPS [108.4]
  35. Основы интернет-протоколов [109.1]
  36. Постоянная конфигурация сети [109.2]
  37. Диагностика сети [109.3]
  38. DNS на стороне клиента [109.4] (вы здесь)
  39. Задачи администрирования безопасности [110.1]
  40. Настройка безопасности хоста [110.2]
  41. Шифрование данных: SSH и GnuPG [110.3]
Урок 37. DNS на стороне клиента [109.4]

Когда программа хочет открыть соединение с хостом по имени, ей сначала нужно превратить это имя в IP-адрес. Этот процесс называется разрешением имён, и происходит он целиком на клиенте - ещё до того, как улетит первый пакет к серверу. Администратор должен понимать, кто и в каком порядке отвечает на вопрос "какой адрес у этого имени", уметь подсунуть локальную запись, переключить DNS-сервер и быстро отличить проблему резолвинга от проблемы сети. В этом уроке разбираем resolv.conf, systemd-resolved с утилитой resolvectl, nsswitch.conf, файл hosts и инструменты диагностики host, dig, getent, nslookup.

Изображение

Как это работает

Ключевой момент: приложение почти никогда не ходит в DNS напрямую. Оно дёргает функцию libc getaddrinfo, а та смотрит в /etc/nsswitch.conf - файл, который описывает, из каких источников и в каком порядке брать данные для разных баз (hosts, passwd, group и других). Для имён хостов важна строка hosts. Типичное значение - files dns или files resolve dns: сперва проверяется локальный файл, потом сетевой резолвер. Порядок здесь решает всё: если files стоит первым, запись в /etc/hosts всегда победит реальный DNS.

Сам DNS-запрос отправляет резолвер. Классический путь - стаб-резолвер внутри glibc читает /etc/resolv.conf, где перечислены строки nameserver (адреса DNS-серверов), search (домены для дописывания коротких имён) и options (тонкая настройка, например timeout или ndots). Это простой механизм без кэша: каждый запрос уходит на сервер заново.

В современных дистрибутивах между приложением и сетью обычно стоит systemd-resolved. Он поднимает локальный кэширующий стаб-резолвер на адресе 127.0.0.53 (а в новых версиях ещё и 127.0.0.54 для обхода кэша). Тогда /etc/resolv.conf - это симлинк на файл, сгенерированный resolved, и в нём один nameserver 127.0.0.53. Запросы идут в resolved, тот кэширует ответы, уважает TTL, умеет работать с несколькими аплинками, разделять запросы по доменам (split-DNS на интерфейсах от NetworkManager или systemd-networkd) и при настройке - шифровать трафик через DNS-over-TLS. Управляют этим через resolvectl.

Ubuntu 24.04 и Fedora 41+ по умолчанию используют systemd-resolved. В Debian 13 он есть, но не всегда активен из коробки - там часто хватает обычного resolv.conf, который пишет NetworkManager или dhclient. RHEL 10 тоже опирается на NetworkManager, а resolved подключают по желанию. Поэтому первым делом всегда смотрите, чем является resolv.conf - реальным файлом или симлинком.

Команды и примеры

Проверяем, кто рулит резолвингом:

Код: Выделить всё

ls -l /etc/resolv.conf
# симлинк на ../run/systemd/resolve/stub-resolv.conf -> работает resolved
cat /etc/resolv.conf
cat /etc/nsswitch.conf | grep hosts
Состояние и статистика systemd-resolved:

Код: Выделить всё

resolvectl status            # серверы, домены, режим DNSSEC по интерфейсам
resolvectl statistics        # размер кэша, попадания/промахи
resolvectl query forum.example.com
resolvectl flush-caches      # сбросить кэш резолвера
Локальная запись в /etc/hosts перебивает DNS (формат: адрес, потом имена):

Код: Выделить всё

192.168.10.5   git.local git
Диагностика. getent проходит ВЕСЬ путь nsswitch (hosts + dns), поэтому показывает то, что реально увидит приложение:

Код: Выделить всё

getent hosts forum.example.com
getent ahosts forum.example.com   # и IPv4, и IPv6
host - короткий и быстрый, dig - подробный и идёт прямо в DNS мимо nsswitch и hosts:

Код: Выделить всё

host -v forum.example.com
dig forum.example.com A +short
dig @9.9.9.9 forum.example.com    # спросить конкретный сервер
dig +trace forum.example.com      # пройти делегирование от корня
dig -x 93.184.216.34              # обратный запрос PTR
Пакеты с этими утилитами называются по-разному:

Код: Выделить всё

# Debian/Ubuntu
apt install dnsutils bind9-host
# RHEL/Fedora
dnf install bind-utils
nslookup - наследие из мира BIND. Для экзамена знать его надо (nslookup, set type=MX, server 8.8.8.8), но в 2026 для скриптов и диагностики предпочитают dig и resolvectl - вывод стабильнее и точнее.

Частые грабли
  • Правите /etc/resolv.conf руками, а через минуту его перезаписывает resolved, NetworkManager или dhclient. Если это симлинк - менять надо источник, а не сам файл.
  • dig и host НЕ читают /etc/hosts и не проходят nsswitch. Запись в hosts работает, а dig её "не видит" - это нормально, проверяйте через getent hosts.
  • Слишком большой ndots (по умолчанию 1) заставляет резолвер сперва приписывать домены из search ко всем именам с точками - лишние запросы и задержки, классическая боль в Kubernetes.
  • Записали в /etc/hosts строку, а имена идут после адреса - если перепутать порядок, парсинг ломается. Адрес всегда первый.
  • Локальный 127.0.0.53 в resolv.conf пугает новичков ("почему не 8.8.8.8?") - это стаб resolved, реальные серверы смотрите через resolvectl status.
  • Кэш отдаёт старый адрес после смены DNS-записи. Ждите истечения TTL или делайте resolvectl flush-caches.
  • nsswitch с порядком dns files прячет ваши локальные правки hosts за публичным DNS - проверяйте порядок источников.
Мини-лаба
  • Выполните ls -l /etc/resolv.conf и определите, управляет ли резолвингом systemd-resolved или это обычный файл.
  • Запустите resolvectl status и выпишите, какие DNS-серверы используются на вашем активном интерфейсе.
  • Добавьте в /etc/hosts строку 203.0.113.77 lab.test и проверьте её через getent hosts lab.test, затем через dig lab.test - сравните результат и объясните разницу.
  • Сделайте dig forum.example.com и dig forum.example.com второй раз подряд; через resolvectl statistics посмотрите, вырос ли счётчик попаданий в кэш.
  • Выполните dig +trace example.com и проследите цепочку от корневых серверов до авторитативного.
  • Сбросьте кэш через resolvectl flush-caches и убедитесь, что следующий запрос снова промахивается мимо кэша.
Контрольные вопросы
  • Какой файл определяет порядок источников для разрешения имён хостов и какая строка в нём за это отвечает?
  • Почему запись в /etc/hosts видна через getent hosts, но не через dig?
  • На каком адресе слушает стаб-резолвер systemd-resolved и как через него узнать реальные вышестоящие DNS-серверы?
  • Что делает параметр options ndots в /etc/resolv.conf и чем опасно большое значение?
  • Какой командой сбросить кэш systemd-resolved и как проверить статистику попаданий в кэш?
  • Чем dig принципиально отличается от getent hosts при диагностике резолвинга?
👍6 ❤️3 🔥 😄 🤔
Аватара пользователя
docker_ninja
Сообщения: 1
Зарегистрирован: 25 май 2026, 04:50

Re: DNS на стороне клиента [109.4]

Сообщение docker_ninja »

А почему dig показывает один адрес, а ping этого же имени совсем другой? Только что напоролся, минут двадцать тупил.
👍1 ❤️ 🔥 😄 🤔
Аватара пользователя
main_marina
Сообщения: 1
Зарегистрирован: 27 май 2026, 14:35

Re: DNS на стороне клиента [109.4]

Сообщение main_marina »

У меня resolv.conf оказался симлинком на stub-resolv.conf, правил его руками - через минуту всё откатывалось. Теперь понятно, надо через resolvectl.
👍1 ❤️ 🔥 😄 🤔
Ответить
← Предыдущая глава
Диагностика сети [109.3]
Следующая глава →
Задачи администрирования безопасности [110.1]

Все главы курса «LPIC-1: администратор Linux (101 + 102)»

Поделиться темой: ✈ Telegram VK

Вернуться в «LPIC-1: администратор Linux»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость