Приложение пишет Could not resolve host, но коллега уверяет, что DNS-запись есть. Как пройдёшь путь резолвинга и локализуешь сбой?
getent ahosts api.example.com
dig api.example.com A
dig api.example.com AAAA как ответить Сначала повторяю запрос тем же системным resolver path, что и приложение, например через getent, а затем сравниваю его с прямым DNS-запросом через dig. Проверяю имя, тип записи, CNAME-цепочку, настроенные resolver-адреса и код ответа. Различаю NXDOMAIN, отсутствие нужного типа, SERVFAIL и timeout: у них разные причины и разные действия.
getent ahosts проходит через системную конфигурацию имён и потому ближе к поведению обычного приложения. dig полезен для точного DNS-ответа, но может отличаться, если приложение использует NSS, локальный stub resolver, собственный кэш или свой DNS-клиент.
Проверяю по слоям:
- точное имя без опечатки и search suffix;
/etc/nsswitch.confи фактический/etc/resolv.conf;- A и AAAA отдельно, затем CNAME до конечного ответа;
- код ответа, секции authority и оставшийся TTL;
- доступность настроенного recursive resolver по UDP и, при необходимости, TCP.
NXDOMAIN означает, что имени не существует по авторитетному ответу; NODATA — имя есть, но записи запрошенного типа нет; SERVFAIL часто указывает на проблему резолвера, делегации или DNSSEC; timeout — на сетевой путь или недоступность сервера. Ошибки тоже могут кэшироваться, поэтому мгновенное исправление зоны не обязано сразу изменить ответ всех клиентов.
чтобы прозвучать сильнее Покажи, как запросить цепочку делегации и authoritative server напрямую, не смешивая это с обычным recursive lookup. Объясни split-horizon DNS и почему ответ внутри корпоративной сети может законно отличаться от публичного.