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


17

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

Коли я переходжу в офлайн, він перестає працювати, тому що OS X порожній вміст resoluv.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, але все ж ви не можете ним користуватися, коли ви працюєте в автономному режимі.

EDIT: спробувала 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 порожній, але що вхід / сервер / імені / посилання, що походить з роздільника, залишається.

Виявляється, оскільки ви можете вказати домен reslaver безпосередньо у файлі / etc / resolutionver /, вказівка ​​спеціального кореневого домену в Інтернеті . спричиняє створення глобальної записи резолюції, яка виглядає так:

resolver #8
  nameserver[0] : 127.0.0.1

Тепер усі запити DNS перенаправляються до localhost, навіть у режимі офлайн.

Звичайно, вам все одно доведеться вирішити вибрані вами домени як 127.0.0.1, використовуючи щось на зразок 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 / resolutionver / що завгодно:
    сервер імен 127.0.0.1
    домен.
  • Налаштуйте локальний DNS-сервер і будьте раді.

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


Саме це і використовується порошок ( pow.cx ).
daeltar

але, на жаль, це не працює - github.com/37signals/pow/isissue/104
daeltar

3
@guns це рішення все ще працює в йосеміті? dnsmasq добре працював для мене в режимі офлайн, поки я не оновився. Тепер усе, що я отримую, коли бігаю, scutil --dnsколи не підключений до Інтернету, все, що я отримую, - це No DNS configuration available я дотримувався ваших інструкцій вище, але не пощастило
MatthewLee

1
@MatthewLee, так, ви маєте рацію, здається, єдиною проблемою є додавання записів у файл хостів.
Ленсьєль

1
Хтось знайшов рішення для Yosemite?
jmagnusson

2

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

Роздільник в OS X працює інакше, ніж у Linux або інших Unixes. Це, мабуть, частина того, що викликає у вас горе. Як і, наприклад, він має переваги, який метод вирішення використовувати перший, і він кешує результати всіх запитів протягом певного періоду часу.

Ви додали сервер DNS до інтерфейсу на панелі мережних налаштувань? Це повинно гарантувати, що резолютор використовує цей сервер для своїх запитів, якщо він вирішить шукати запис DNS.


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

1

(відповідаючи 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.


Зміна DNS-конфігурації в NetworkPreferences змінює файл /etc/resolv.conf.
Фабіан Зейндл

0

Чи має OSX файл / конфігурацію /etc/dhcp3/dhclient.conf, який мають звичайні конфігурації клієнта Linux / UNIX DHCP?

Якщо це так, у ньому повинна бути лінія, за якою ви можете відміняти коментарі

prepend domain-name-servers 127.0.0.1;

щоб клієнт DHCP завжди додавав цей рядок у свою резолюцію.conf


Додавання до reslav.conf не допомагає в OS X. Вміст резолюв.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.