Установите сервер DNS на OS X даже когда без интернет-соединения

Чистое Решение для Bash, с помощью расширения параметра. Посмотрите это для объяснения PE.

foo='date-web2-v.7.052509.csv'
file=${foo%*.csv}
date=${file##*.}

month=${date:0:2}
day=${date:2:2}
year=${date:4:2}

Я, вероятно, использовал бы Perl для этого и круглой скобки использования для получения то, что я хочу в группах от регулярного выражения.

17
задан 5 July 2010 в 15:34
6 ответов

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

Я также люблю использовать 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 направляются к localhost, даже когда офлайн.

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

# 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/whatever:
    nameserver 127.0.0.1
    domain .
  • Настройте локальный сервер DNS и будьте счастливы.

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

29
ответ дан 2 December 2019 в 20:29
  • 1
    @guns это решение все еще работает в Йосемити? dnsmasq хорошо работал для меня офлайн, пока я не обновил. Теперь все, что я получаю, когда я работаю scutil --dns при отсутствии соединения с Интернетом все, которое я добираюсь, No DNS configuration available, я следовал инструкциям выше, но никакой удаче –  MatthewLee 23 October 2014 в 20:36

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

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

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

2
ответ дан 2 December 2019 в 20:29

(отвечающий 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.

Так, необходимо смочь ввести что-то в UI, и он должен придерживаться. Я сделал это пару раз, когда я не имел как сервер DNS, мой локальный сервер DHCP обеспечивает.

1
ответ дан 2 December 2019 в 20:29

OSX имеет/etc/dhcp3/dhclient.conf конфигурационный файл, который имеют нормальные конфигурации клиента DHCP Linux/UNIX?

Если так, это должно иметь строку, для которой можно не прокомментировать

prepend domain-name-servers 127.0.0.1;

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

0
ответ дан 2 December 2019 в 20:29
  • 1
    Добавление к resolv.conf не помогает на OS X. Содержание resolv.conf сгенерировано, и оно символьная ссылка на/var/run/resolv.conf и даже когда я изменяю/var/run/resolv.conf, это не отражает изменения. –  daeltar 10 June 2009 в 12:34

Попытайтесь добавить второй сервис Ethernet, настроенный со статическим адресом и 127.0.0.1 как Ваш сервер DNS. Или, добавьте сеть Location, которая устанавливает Ваш сервер DNS на 127.0.0.1. Оба из этих изменений были бы внесены в "Установках системы" под панелью "Network".

0
ответ дан 2 December 2019 в 20:29

Это могло бы помочь просто поместить

127.0.0.1       localhost

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

-2
ответ дан 2 December 2019 в 20:29
  • 1
    Мне нужен он для субдоменов, таким образом, это нет нет. –  daeltar 10 June 2009 в 12:32

Теги

Похожие вопросы