Выбор ответа Middle Сеть в Linux обновлено

dig не видит /etc/hosts

Вопрос

В /etc/hosts есть 10.0.0.9 api.local. curl http://api.local работает, а dig api.local возвращает NXDOMAIN. Почему?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: dig спрашивает DNS напрямую и не читает /etc/hosts. Обычные программы резолвят через glibc (getaddrinfo), которая по /etc/nsswitch.conf сначала смотрит files (/etc/hosts), затем dns. dig и nslookup это DNS-клиенты, они спрашивают сервер напрямую.

Варианты ответа

  1. dig спрашивает DNS напрямую и не читает /etc/hostsправильный ответ
  2. /etc/hosts применяется только после перезагрузки сервера
  3. curl кеширует старые ответы и не видит отсутствие записи
  4. Имена в домене .local DNS-серверы не поддерживают вовсе

Разбор

Обычные программы резолвят через glibc (getaddrinfo), которая по /etc/nsswitch.conf сначала смотрит files (/etc/hosts), затем dns. dig и nslookup это DNS-клиенты, они спрашивают сервер напрямую. Как видит система, показывает getent hosts api.local. /etc/hosts читается сразу, а кеша между запусками у curl нет.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.