OS/X "etc/resolver/dev" не работает - почему бы и нет?

Я ожидаю, что смогу разрешить имя DNS www.foobar.dev используя DNS-сервер, который работает в виртуальной машине в моей системе OS / X (High Sierra), потому что я создал /etc/resolver/dev файл, содержащий следующую строку: (с указанием виртуального адреса виртуальной машины)

nameserver ww.xx.yy.zz

... но dig www.foobar.dev продолжает консультироваться с интернет-сервером имен,

в то время как dig @ww.xx.yy.zz www.foobar.dev успешно извлекает запись из DNS виртуальной машины.

Я использовал dscacheutil команда, чтобы убедиться, что ошибочная запись не находится в кэше распознавателя DNS.

Итак, почему нет присутствия /etc/resolver/dev файл с указанным содержимым, достаточным для прямого anything.dev на указанный DNS-сервер?

Интересно - иногда это похоже на работу. Также команда scutil --dns производит следующую ожидаемую запись, которая, кажется, указывает на то, что /etc/resolver/dev файл обнаружен!

resolver #8
  domain   : dev
  nameserver[0] : ww.xx.yy.zz
  flags    : Request A records
  reach    : 0x00020002 (Reachable,Directly Reachable Address)

1 ответ

Это, вероятно, работает нормально, вы просто проверяете это неправильно. dig (а также host а также nslookup) не используют системный преобразователь и не полностью реализуют политику поиска системного преобразователя. В результате они полезны для тестирования самой системы DNS, но не для проверки того, как ОС использует DNS. Официальный способ тестирования системного резольвера dscacheutil (например dscacheutil -q host -a name www.foobar.dev), но это досадно многословно, поэтому я склонен просто использовать ping и посмотрите на IP, который он сообщает.

Как сказал @GordonDavisson в другом ответе - ping Команда полезна для тестирования системного резольвера. Мое дополнение заключается в том, что он также может потерпеть неудачу из-за кеша DNS Не забудьте очистить это:

sudo killall -HUP mDNSResponder

Лучше заменить /etc/resolver файлы с истинной конфигурацией DNS, как и /etc/resolv.conf это все устаревшие вещи, сохраненные только для обратной совместимости (и, может быть, потому, что этого требует POSIX?).

Вот как это можно сделать из командной строки, используяscutil, это действительно просто.

Конечно, для всего этого есть программный интерфейс.
См. Apple SystemConfiguration Framework.

Другие вопросы по тегам