Назад | Перейти на главную страницу

Понимание разницы между DNS-резолверами

вступление

При попытке отладить сетевую проблему, локальную для нашей интрасети, стало очевидно, что curl host nslookup и dig вести себя иначе. куда dig и host возвращает IP-адрес рассматриваемого URL, curl и nslookup возвращение:

 curl: (6) Could not resolve host: internal.site.company.com

и

 nslookup: can't resolve 'internal.site.company.com`

Контекст

Хотя это не должно иметь значения, по сути, чтобы дать больше контекста проблемы, эта проблема возникает на и за docker-machine (проверено с использованием докер-машины на обоих virtualbox и parallels если быть точным). В docker-machine и все контейнеры, на которых он расположен, имеют правильный IP-адрес желаемого внутреннего DNS-сервера в своих /etc/resolv.conf. IP-адрес желаемого URL-адреса также доступен с компьютеров, которые не могут разрешить имя. Как упоминалось выше, адрес является внутренним сайтом, и наш DNS-сервер также является внутренним. Сайт доступен и разрешается с компьютера, на котором docker-machine установлен.

Вопросы

Это подводит меня к вопросам ...

1) Под капотом какие dig и host делать иначе, чем оба cURL и nslookup?

2) Что может мешать браузеру или curl от разрешения URL как host и dig успешно разрешаете имя?

Настроить

dig -v: DiG 9.11.1

host -v: host 9.11.1

curl -V: curl 7.49.1

версия докера: Version 17.06.0-ce-mac19 (18663) Channel: stable

 Boot2Docker version 17.06.0-ce, build HEAD : 0672754

Я ожидал curl нам библиотеку преобразователя, которая будет использовать поставщиков услуг имен, перечисленных в /etc/nsswitch.conf Спецификация хостов по порядку. Если это не включает DNS, разрешение DNS не произойдет. nslookup не документировано использование этого файла, но, судя по вашему опыту, может. Часто эти данные кэшируются демоном кэширования службы имен. Если демон не работает, вы можете столкнуться с такой проблемой, даже если другие конфигурации верны.

host и dig являются чистыми программами поиска DNS. Оба они разрешают имена только через DNS. Они не будут разрешать имена с помощью файлов или других поставщиков, не относящихся к DNS. Я ожидаю, что они воспользуются информацией в /etc/resolv.conf прямо.