Как настроен поиск DNS для OSX Mountain Lion?

33

Если я перехожу на свой resolv.conf, я вижу это сообщение:

#
# Mac OS X Notice
#
# This file is not used by the host name and address resolution
# or the DNS query routing mechanisms used by most processes on
# this Mac OS X system.
#
# This file is automatically generated.
#

Я пытаюсь добавить запись DNS. Я отредактировал мой файл hosts и очистил кэш dns, но имя не разрешается, если я использую host servername. Я подумал, что, возможно, это hostне было настроено, чтобы посмотреть на hostsфайл. Как я могу получить разрешение моей новой записи, и что использует OSX, если нет resolv.conf?

Бен Флинн
источник

Ответы:

17

Инструмент хоста не просто разрешает имена (как, например, с использованием системного преобразователя имен), но фактически запрашивает DNS-серверы (например, отправляет пакеты в udp / 53 и, возможно, tcp / 53): он не знает и не использует локальный hostsфайл ,

Если вы хотите протестировать распознаватель операционной системы (например, gethostbyname () и аналогичные функции libc), вы можете попробовать пропинговать добавленное вами имя, /etc/hostsи оно будет учитывать то, что вы поместили в этот файл.

Кроме того, как вы уже узнали, DNS-поиск в Mac OSX не использует /etc/resolv.conf, и правильный способ настроить, какие DNS-серверы запрашиваются, находится в графическом интерфейсе и / или networksetupинструменте командной строки Network Settings . Честно говоря, я не знаю, можете ли вы настроить порядок, в котором проверяются исходные коды, но стандартное поведение - /etc/hostsсначала пробовать, а затем - DNS-серверы.

Luke404
источник
1
Я нашел Perl-упаковщик для getaddrinfo: search.cpan.org/~pevans/Socket-GetAddrInfo-0.22
Бен Флинн
26

DNS-преобразователи могут быть добавлены в OS X с помощью networksetupкоманды:

sudo networksetup -setdnsservers Wi-Fi 8.8.8.8 8.8.4.4

Введите название сетевого подключения, если необходимо. Эти средства распознавания будут отображаться в resolv.conf, поскольку они генерируются автоматически, но прямое редактирование в resolv.conf не приведет к использованию этих преобразователей. Я полагаю, что резольверы хранятся где-то в списке; Я буду искать и сообщать обратно.

Отредактировано, чтобы добавить: Похоже, XML-файл plist, хранящий DNS-серверы /Library/Preferences/SystemConfiguration/preferences.plist.

Файл хоста в / private / etc / hosts должен работать для принудительного разрешения конкретных имен (/ etc является символической ссылкой на / private / etc). Можете ли вы проверить свой синтаксис и правильно ли редактируете файл?

Феб
источник
Чтобы я мог использовать эту команду для добавления файла hosts?
Бен Флинн
вы не можете, и вам не нужно
Luke404
Нет, если вы хотите добавить имена в файл hosts, просто добавьте их напрямую. Файл hosts проверяется сначала при разрешении имен, затем следует локальный кеш разрешения, а затем настраиваемые DNS-серверы. Использование команды «host» для проверки, хотя не проверяет локальный файл hosts. Одним из простых способов проверки было бы использование сетевой утилиты, такой как ping.
Феб
1
Иногда интерфейс получает глупые имена, чтобы получить точное имя, которое вам нужно сделать. networksetup -listallnetworkservices Также, если оно содержит пробелы, вам нужно заключить в кавычки все имя, то есть:sudo networksetup -setdnsservers 'white space' 8.8.8.8 8.8.4.4
Marcin
2
Можно ли настроить преобразователь на использование порта, отличного от 53?
Rune FS