6

При преобразовании полных доменных имен или имен компьютеров в IP-адреса в моей локальной сети (mycompany.internal) я могу использовать dig в командной строке (linux/mac) или nslookup (windows), чтобы запросить настроенный сервер и получить ответ. Но попытка ввести полное доменное имя или даже просто имя компьютера в команде ping или в веб-браузере приводит к ошибкам «Неизвестный хост» или DNS. Вот пример, этот с Mac:

mac:~ atroon$ dig server.mycompany.internal


; <<>> DiG 9.6.0-APPLE-P2 <<>>
server.mycompany.internal ;; global
options: +cmd ;; Got answer: ;;
->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5219 ;; flags: qr aa rd
ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0,
ADDITIONAL: 0

;; QUESTION SECTION:
;server.mycompany.internal.  IN A

;; ANSWER SECTION:
server.mycompany.internal. 1200 IN A 172.16.254.36

;; Query time: 0 msec ;; SERVER:
172.16.254.8#53(172.16.254.8) ;; WHEN: Wed Dec 16 11:39:15 2009 ;; MSG SIZE 
rcvd: 55

mac:~ atroon$ ping server.mycompany.internal<br>
ping: cannot resolve server.mycompany.internal: Unknown host

Я не могу на всю жизнь понять это. DNS-сервер представляет собой SBS 2003, который обрабатывает AD, некоторые файлы / печать и т.д. Для сети небольшой компании. Эта проблема случается со мной примерно три раза в неделю, и когда я подключаюсь к локальной сети напрямую, тот же коммутатор, что и сервер. Я могу установить любое соединение с IP-адресами, которое я хочу, я просто не могу заставить работать DNS. Кроме того, в то же время я испытываю это, другие пользователи в порядке, что заставляет меня думать, что это проблема на моем Mac. Но что за проблема? Как dig может отправить запрос и получить ответ, а ping сказать «неизвестный хост»?

Я пишу здесь против serverfault, потому что я думаю, что это локальная проблема, а не проблема с сервером ... но если кто-то может указать мне на сервер, я думаю, мы пойдем по улице доменом или двумя.

4 ответа4

12

В зависимости от того, какую версию Mac OS X вы используете, способ обращения с DNS системой меняется.

По сути, в Mac OS X есть два механизма разрешения DNS. Стандартный подход UNIX (/etc/resolv.conf), который используется dig а затем подход, используемый остальной частью системы.

В Mac OS X 10.4 и 10.5 два подхода были гораздо более тесно связаны; освежающий, как правило, освежает их обоих. Однако в 10.6 и в гораздо меньшей степени в 10.5 возможно, что dig даст вам правильное значение, в то время как механизм разрешения системы все еще имеет плохое значение.

Чтобы очистить кэш DNS для каждой версии Mac OS X:

  • 10.4: lookupd -flushcache
  • 10.5: dscacheutil -flushcache
  • 10.6: sudo dscacheutil -flushcache или sudo killall -HUP mDNSResponder (первая команда должна выполнить вторую команду для вас сейчас, но в более ранних версиях 10.6 она не появлялась)

ping если я помню, использует поиск системы - так отличается механизм разрешения. /etc/resolv.conf всегда будет использовать DNS-серверы по порядку, в то время как mDNSResponder пытается быть «умным», который может укусить вас сзади в зависимости от ваших настроек.

Кроме того, у вас есть несколько DNS-серверов, указанных на вашем Mac и / или через DHCP? Snow Leopard ввел другое поведение (ошибка?) где порядок DNS-серверов будет меняться. Это приводит к хаосу в разделенной DNS (внутренне вы используете один IP, но внешне другой), поскольку в некоторых случаях он перестает запрашивать внутренний DNS-сервер, прежде чем запрашивать второй сервер (на этот раз внешний) в строке. Предположительно это способ связаться с самым быстрым DNS-сервером, чтобы избежать задержек, связанных с DNS. Простейшее исправление до 10.6.3 - обслуживать только внутренний DNS-сервер через DHCP и убедиться, что настройки пересылки на DNS-сервере установлены соответствующим образом.

Теперь, начиная с 10.6.3, можно указывать mDNSResponder всегда использовать правильный порядок, а не пытаться оптимизировать время DNS-запросов. Вы можете сделать это, добавив ключ StrictUnicastOrdering и присвоив ему значение true для списка запуска демона mDNSResponder (и перезагрузите его при необходимости).

В Mac OS X v10.6 стандартное поведение поиска DNS-сервера заключается в том, что когда сервер не возвращает результат (возвращая SERV_FAIL для запроса), а другие серверы доступны для запроса, сервер временно отключается в порядке поиска для около тридцати секунд. Если для запроса существует более одного сервера, и все они возвратили SERV_FAIL, серверы будут запрашиваться в том порядке, в котором они были отключены (то есть сервер, который был отключен дольше всего, будет использоваться первым).

(Источник: support.apple.com и спасибо Яр, который поднял это раньше, чем я.)

Вы можете автоматизировать это (немного быстрее и проще, чем команды Apple), выполнив следующие команды:

sudo /usr/libexec/PlistBuddy -c "Add :StrictUnicastOrdering bool true" /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist

и обратный ход, запустив:

sudo /usr/libexec/PlistBuddy -c "Delete :StrictUnicastOrdering" com.apple.mDNSResponder.plist

После или вам потребуется перезагрузить задание в launchd, чтобы перезапустить mDNSResponder, выполнив:

sudo launchctl unload /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist
а потом
sudo launchctl load /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist

3

Наконец, исправление благодаря 10.6.3 и немного возни. В основном вы изменяете com.apple.mDNSResponder.plist и затем перезапускаете dnsresponder.

Я могу ошибаться, но я думаю, что инструкции отключены, и должны сказать sudo cp где они говорят sudo mv в начале.

1

Посмотрите, что находится в /etc/resolv.conf чтобы увидеть, какие серверы имен использует ваш Mac. Вы также можете добавить серверы имен в настройках сети - выберите используемый адаптер, нажмите кнопку "Дополнительно" и перейдите на вкладку "DNS".

На Mac инструмент командной строки для очистки кэша DNS:

dscacheutil -flushcache

Обновление:

Я нашел много хороших вещей в этой теме на arguments.apple.com. Например:

dig(1) (и host (1) и nslookup (1)) все напрямую используют преобразователь DNS и, как таковой, порядок DNS-серверов, который представлен в /etc/resolv.conf.

Однако ping (8) использует внутреннюю систему разрешения имен Mac OS X, которая использует «супер-поисковый клиент DNS», который использует результаты, которые можно просмотреть через scutil --dns, для упорядочивания запросов.

Вы можете посмотреть, что было кэшировано, запустив sudo killall -INFO mDNSResponder а затем заглянув в /var/log/system.log

0

Большинство приложений будут полагаться на службу DNS-клиента (ну, они полагаются на ОС, которая использует службу ...) - я бы дважды проверил, что она все еще работает. Может быть, даже перезапустите службу, когда у вас возникнут проблемы.

Вы также можете попробовать очистить кэш DNS, но имейте в виду, что некоторые приложения (в частности, веб-браузеры) будут кэшировать записи DNS внутри, поэтому вам, возможно, придется их перезапустить.

ipconfig /flushdns

Наконец, существует вероятность того, что вредоносное ПО приведет к потере работоспособности. Многие вредоносные программы могут захватить DNS или определенные хосты. Вероятно, стоит это проверить.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .