Я установил, настроил DNS-сервер (локальный экземпляр Dnsmasq), который разрешает локальный хост, как я хочу, все в порядке.
Когда я перехожу в автономный режим, он перестает работать, потому что OS X пустое содержимое файла resolv.conf и игнорирует попытку отразить изменения в этом файле.
Есть идеи, как настроить DNS даже в автономном режиме?
Аналогичная проблема (нерешенная): http://blog.steamshift.com/geek/leopard-lookupd-and-local-web-development-sites
Основная мотивация - простота разработки приложения RoR, которое использует субдомены в качестве ключей учетной записи. И вы не можете использовать 127.0.0.1 * .yourapp.local в / etc / hosts. Кто-то зарегистрировал для него домен smackaho.st и srt DNS, например .smackaho.st на 127.0.0.1, но все же вы не можете использовать его, когда работаете в автономном режиме.
РЕДАКТИРОВАТЬ: пробовал команду scutil, но кажется, что вы можете изменить DNS, если в автономном режиме
ПРИМЕЧАНИЕ: когда у вас отключены все интерфейсы, вы не можете установить DNS-серверы в Pref. панель.
Мне также нравится использовать Dnsmasq на моем локальном компьютере, и у меня тоже была эта проблема. Вот решение:
Из man 5 resolver
:
The configuration for a particular client may be read from a file
having the format described in this man page. These are at present
located by the system in the /etc/resolv.conf file and in the files
found in the /etc/resolver directory.
/etc/resolver/
по умолчанию отсутствует; вы должны создать это сами.
Также со страницы руководства:
domain
Domain name associated with this resolver configuration. This
option is normally not required by the Mac OS X DNS search system
when the resolver configuration is read from a file in the
/etc/resolver directory. In that case the file name is used as the
domain name.
Итак, если вам нужны все запросы DNS для домена верхнего уровня dev
для перенаправления на локальный сервер имен вы должны:
# mkdir /etc/resolver
# echo 'nameserver 127.0.0.1' > /etc/resolver/dev
configd
не изменяет файлы в /etc/resolver/
, поэтому этот параметр будет сохраняться при изменении сети и перезагрузке.
К сожалению, начиная с OS X Lion, верхний преобразователь (как показано scutil
--dns
) исчезает при отсутствии активных интерфейсов:
# scutil --dns # Online
DNS configuration
resolver #1
nameserver[0] : 127.0.0.1
...
resolver #8
domain : dev
nameserver[0] : 127.0.0.1
# scutil --dns # Offline
DNS configuration
resolver #1
...
resolver #8
domain : dev
nameserver[0] : 127.0.0.1
Обратите внимание, что преобразователь № 1 пуст, но запись о сервере имен, производном от / etc / resolver, остается.
Оказывается, поскольку вы можете указать домен преобразователя непосредственно в файле / etc / resolver /, указав специальный корневой домен Интернета .
вызывает создание записи глобального преобразователя, которая выглядит так:
resolver #8
nameserver[0] : 127.0.0.1
Теперь все DNS-запросы направляются на localhost, даже в автономном режиме.
Конечно, вам все равно придется разрешить выбранные вами домены как 127.0.0.1, используя что-то вроде опции dnsmasq --address:
# dnsmasq --address=/dev/127.0.0.1
networksetup -setdnsservers Ethernet 127.0.0.1 networksetup -setdnsservers Wi-Fi 127.0.0.1 ...
nameserver 127.0.0.1 domain .
ср. http://opensource.apple.com/source/configd/configd-395.11/dnsinfo/dnsinfo_flatfile.c
Почему бы вместо этого не сделать записи в / etc / hosts? У меня проблемы с представлением ситуации, когда вам действительно нужно запустить полноценный DNS-сервер. Я постоянно использую записи файла хоста для выполнения подобных задач на своих Mac.
Резолвер в OS X работает иначе, чем в Linux или других Unix. Вероятно, это часть того, что вызывает у вас горе. Например, у него есть предпочтения относительно того, какой метод разрешения использовать в первую очередь, и он кэширует результаты всех запросов в течение определенного периода времени.
Вы добавили DNS-сервер в интерфейс на панели настроек сети? Это должно гарантировать, что распознаватель использует этот сервер для своих запросов, если он решит искать запись DNS.
(отвечая на b / c, я пока не могу комментировать ...)
Как у тебя дела?
(лучший ответ, который я получил прямо сейчас)
# man -S 5 resolver
.
.
.
Note that the /etc/resolv.conf file,
which contains configuration for the default (or "primary") DNS resolver
client, is maintained automatically by Mac OS X and should not be edited manu-
ally. Changes to the DNS configuration should be made by using the Network
Preferences panel.
Итак, вы должны иметь возможность вводить что-то в пользовательском интерфейсе, и это должно прилипнуть. Я делал это пару раз, когда мне не нравился DNS-сервер, который предоставляет мой локальный DHCP-сервер.
Есть ли в OSX файл конфигурации /etc/dhcp3/dhclient.conf, который есть в обычных конфигурациях DHCP-клиента Linux / UNIX?
В таком случае в нем должна быть строка, которую можно раскомментировать
prepend domain-name-servers 127.0.0.1;
чтобы клиент DHCP всегда добавлял эту строку в файл resolv.conf
Попробуйте добавить вторую службу Ethernet, настроенную со статическим адресом и 127.0.0.1 в качестве DNS-сервера. Или добавьте сетевое расположение, которое устанавливает для вашего DNS-сервера значение 127.0.0.1. Оба эти изменения будут внесены в «Системные настройки» на панели «Сеть».
Может помочь просто поставить
127.0.0.1 localhost
в / etc / hosts, поэтому для поиска localhost не требуется преобразователь.