Я использую pfSense 2.0rc3, и я настроил его в качестве сервера пересылки DNS и включил «Регистрация DHCP-аренды в службе пересылки DNS», и я понимаю, что все соответствующие параметры используются для получения DNS-сервера для локальных поисков.
Он работает, как и ожидалось, с Linux, и в частности я могу запускать host abc
и ping abc
(и другие приложения), и все они работают как положено.
Однако в Mac OS X Lion 10.7 он работает не так, как ожидалось. В частности, host
кажется, что работают только поиски с командой, т.е.
$ ping abc
ping: cannot resolve abc: Unknown host
$ host abc
abc.local has address 192.168.1.128
$ ping abc.local
ping: cannot resolve abc.local: Unknown host
$ host abc.local
abc.local has address 192.168.1.128
Почему поиск для abc
работы при использовании host
команды, но не с ping
(и другими приложениями)?
Спасибо за чтение.
Ответы:
Почему они сделали это изменение, я не знаю, но какое-то время это сводило меня с ума.
Я не знаю, почему все работает для хоста, но не для ping, но я думаю, что это связано с природой этих двух утилит. Ping - простая (хотя и очень полезная) диагностическая утилита для отбрасывания пакетов по проводам, которые должны быть возвращены вам. Функциональность поиска имени хоста является лишь побочным эффектом задания и передается рекурсивному распознавателю системы (я полагаю - я не проверял, проверяя связанные библиотеки или что-то в этом роде). Основная задача хоста - выполнять разрешение имен DNS, поэтому он реализует собственный рекурсивный распознаватель.
Рекурсивный распознаватель Apple - это mDNSResponder. По какой-то причине версии mDNSResponder в Lion требуется параметр командной строки -AlwaysAppendSearchDomains, который будет вести себя так же, как в Snow Leopard (по крайней мере).
Вот быстрый способ это исправить:
(В начале последней строки должно быть два символа табуляции, но я не мог понять, как заставить этот маленький редактор вставлять вкладки, поэтому я добавил 16 пробелов. Любой из них должен работать, но вкладки лучше подгонять интервал исходного файла.)
Это добавит аргумент «-AlwaysAppendSearchDomains» в файл plist для запуска mDNSResponder (и сохранит резервную копию), но, поскольку это управляется launchd, этой системе необходимо указать перезапустить mDNSResponder.
Теперь, если вы проверите запущенный процесс mDNSResponder, вы должны увидеть, что он работает с вашим новым аргументом:
(Поддерживает http://www.makingitscale.com/2011/fix-for-broken-search-domain-resolution-in-osx-lion.html и http://kavassalis.com/2011/07/wtf-bug -in-os-x-10-7 / , где я нашел свои ответы на эту проблему.)
источник
sudo defaults write /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist ProgramArguments -array-add "–AlwaysAppendSearchDomains"
С главной страницы хоста (1):
К сожалению, нет информации о том, как именно команда host разрешает имена хостов. Такое поведение делает его несколько бесполезным для отладки, ИМХО.
источник
Базовая история ... nslookup была командой, но она имела собственную реализацию всех своих процедур распознавателя. Началось то, что системные преобразователи на разных платформах работали не так, как nslookup. Иногда это может привести к довольно разным результатам.
Команды host и dig были созданы как «переписать» для nslookup. Они статически связаны в функциях распознавателя системы. Системный преобразователь - это набор функций в стандартной библиотеке C UNIX или UNIX-подобной системы (в Mac OS X эти функции являются частью библиотеки netdb). Делая это, команды host и dig всегда функционируют так же, как системный распознаватель для любой ОС, для которой они созданы, но они не полагаются на это. Таким образом, они являются отличными инструментами диагностики в тех случаях, когда системный распознаватель работает со сбоями.
ПРИМЕЧАНИЕ. Host и dig читают список серверов имен из /etc/resolv.conf, если им не назначен конкретный сервер имен для общения. Только команда host использует список поиска в файле /etc/resolv.conf; dig не делает, поэтому всегда нужно давать dig FQDN для разрешения чего-либо. В остальном обе команды полностью самодостаточны; например, файл /etc/resolv.conf - это единственное, что не находится в двоичном файле, который они используют.
mDNSresponder - это Bonjour. Я не копался в этом слишком глубоко, но я подозреваю, что этот параметр конфигурации не исправляет это или, по крайней мере, не напрямую. Я только что столкнулся с этой же проблемой в Mac OS X 10.9.1, и простой перезапуск mDNSresponder исправил ее для меня. Я никогда не видел эту проблему раньше на 10,5 -> 10,8 / 10,9 на любой другой системе. Кроме того, приложения GUI не были затронуты этим, это были только инструменты командной строки, такие как ping и ssh.
Если я найду время побольше покопаться в библиотеке, я посмотрю, смогу ли я найти более полное объяснение.
источник
Я собрал сценарий оболочки для автоматизации исправления (и деинсталлятор, если он понадобится вам позже), здесь:
https://github.com/michthom/AlwaysAppendSearchDomains
Это должно было дать менее техническим пользователям на работе, которые могли бы уклоняться от ручного редактирования системных файлов.
источник
.local зарезервирован для многоадресной рассылки. Серверы mDNS и DNS в одной сети с использованием .local могут быть проблематичными.
источник
Хост добавляет суффикс .local dns. Пинга нет. Если вы обнаружите, что это сбивает с толку, вы можете добавить .local в качестве суффикса по умолчанию в настройках сетевой системы, и система добавит его при попытке разрешения имен хостов.
источник
ping abc.local
тоже не работает (хотя иhost abc.local
работает). Я исправил вопрос. pfSense автоматически добавляет локальный домен в качестве домена поиска при отправке аренды DHCP, так что это не будет проблемой.ping abc.local.
Если вы попробовали все вышеперечисленное и ничего не помогло, вы можете добавить свои серверы имен и пути поиска в
System Preferences>Network>Advance(bottom right of the window)>DNS tab
Эти обновления /etc/resolv.conf и ping теперь должны работать. Обновление пути поиска путем редактирования /etc/resolv.conf на самом деле не работает, но это по какой-то причине.
ОБНОВИТЬ:
Редактирование /etc/resolv.conf не работает, поскольку ОС перезаписывает файл в соответствии с настройкой панели «Системные настройки».
источник
У меня недостаточно репутации, чтобы комментировать пост Ламонта Петерсона . Перезапуск mDNSresponder работал у меня на Mac OS X 10.7 (Lion). В отличие от Ламонта Петерсона, эта проблема вызвала проблемы с одним приложением с графическим интерфейсом - Safari не смог разрешить публичные или частные имена хостов. Вот конкретные шаги, которые я сделал, и я подозреваю, что Ламонт Петерсон также сделал:
В
unload
выключается mDNSresponder иload
начинает его снова.Это решило проблему немедленно; перезагрузка не требуется.
Вы можете проверить, что он успешно перезапущен, с помощью
list
команды:Наличие идентификатора процесса (PID) означает, что он работает.
708
будет варьироваться в зависимости от назначения ОС. Если в статусе отображается что-то отличное от дефиса или нуля, значит, что-то пошло не так.Я не знаю, как
mDNSResponderHelper
взаимодействует сmDNSResponder
; Я только когда-либо должен был перезагрузитьmDNSResponder
.источник
В одну строку:
источник
Пожалуйста, обратите внимание на имена OSX могут быть нестандартными, поэтому для полноты:
Имена Mac, как правило, НЕ являются: нужно сделать два исправления: а) заменить пробелы на "-" б) добавить .local
так, например, мой Mac: MacBook Pro от Inconti
будет пинговать по адресу: ingcontis-MacBook-Pro.local
И открывая префы вы можете увидеть:
источник