Установите DNS-сервер на OS X, даже если без подключения к интернету


17

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

Когда я перехожу в автономный режим, он перестает работать, потому что 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 не работает без подключения к интернету в OS X Yosemite на Super User (без решения, но некоторые ссылки).
Арджан

Ответы:


29

СМОТРЕТЬ ОБНОВЛЕНИЕ НИЖЕ!

Мне также нравится использовать 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/, поэтому этот параметр будет сохраняться при изменениях и перезагрузках сети.

ОБНОВЛЕНИЕ 17 июля 2012

К сожалению, что касается 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-запросы направляются на локальный хост, даже в автономном режиме.

Конечно, вам все равно придется разрешить выбранные домены как 127.0.0.1, используя что-то вроде опции --address в dnsmasq:

# dnsmasq --address=/dev/127.0.0.1

В итоге:

  • Установите все ваши сетевые интерфейсы DNS-серверов на 127.0.0.1:
    networksetup -setdnsservers Ethernet 127.0.0.1
    networksetup -setdnsservers Wi-Fi 127.0.0.1
    ...
  • Создайте файл / etc / resolver / what:
    nameserver 127.0.0.1
    домен .
  • Настройте локальный DNS-сервер и будьте счастливы.

ср http://opensource.apple.com/source/configd/configd-395.11/dnsinfo/dnsinfo_flatfile.c


Это именно то, что использует Pow ( pow.cx ).
Daeltar

но, к сожалению, это не работает - github.com/37signals/pow/issues/104
daeltar

3
@guns это решение до сих пор работает в yosemite? dnsmasq работал нормально для меня в автономном режиме, пока я не обновил. Теперь все, что я получаю, когда я бегу, scutil --dnsкогда не подключен к Интернету, все, что я получаю, это то, что No DNS configuration available я
следую

1
@ MatthewLee, да, вы правы, кажется, единственное, что можно обойти, - это добавить записи в файл hosts.
Ленсиль

1
Кто-нибудь еще нашел решение для Yosemite?
мая

2

Почему бы не сделать записи в / etc / hosts? У меня возникли проблемы при мысли о ситуации, когда вам действительно нужно будет запустить полноценный DNS-сервер. Я все время использую записи файла хоста для выполнения подобных задач на своих компьютерах Mac.

Средство распознавания в OS X работает иначе, чем в Linux или других Unixes. Это, вероятно, часть того, что вызывает у вас горе. Как, например, у него есть предпочтения, какой метод разрешения использовать в первую очередь, и он кэширует результаты всех запросов в течение определенного периода времени.

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


Одна из причин использования DNS-сервера пересылки на клиентском компьютере состоит в том, чтобы поддерживать большой черный список доменов рекламы и вредоносных программ, не испытывая при этом снижения производительности демона распознавателя, который при каждом запросе обрабатывает раздутый файл hosts. Несмотря на достоинства этого подхода, dnsmasq загружает / etc / hosts в память, где время поиска будет минимальным. Кроме того, если вы занимаетесь веб-разработкой, это позволяет вам избежать мелких неудобств, связанных с добавлением локальных доменов для каждого сайта, над которым вы работаете.
оружие

1

(отвечая на б / к, я пока не могу комментировать ...)

Как вы идете в автономном режиме?

(лучший ответ, который я получил прямо сейчас)

# 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-сервер.


Изменение DNS-конфигурации в NetworkPreferences изменяет файл /etc/resolv.conf.
Фабиан Цейндл

0

Есть ли в OSX файл конфигурации /etc/dhcp3/dhclient.conf, который есть в обычных конфигурациях DHCP-клиентов Linux / UNIX?

Если так, то должна быть строка, которую вы можете раскомментировать

prepend domain-name-servers 127.0.0.1;

чтобы клиент DHCP всегда добавлял эту строку в ваш resolv.conf


Добавление в resolv.conf не помогает в OS X. Содержимое resolv.conf генерируется и само является символической ссылкой на /var/run/resolv.conf, и даже когда я изменяю /var/run/resolv.conf, оно не отражает изменения ,
Daeltar

0

Попробуйте добавить вторую службу Ethernet, настроенную со статическим адресом и 127.0.0.1 в качестве DNS-сервера. Или добавьте сетевое расположение, которое устанавливает DNS-сервер на 127.0.0.1. Оба эти изменения будут внесены в «Системные настройки» на панели «Сеть».


-2

Это может помочь просто поставить

127.0.0.1       localhost

в / etc / hosts, поэтому для поиска localhost не требуется распознаватель.


1
Мне это нужно для поддоменов, так что этого нет, нет.
Daeltar
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.