2

Я пытаюсь использовать dnsmasq для разрешения определенных известных доменов, используя его конфигурацию, но оставляю остальные запросы на обычный DNS-сервер, назначенный DHCP. Я не могу заставить это работать. Когда я устанавливаю DNS на 127.0.0.1 через панель «Сеть», мне приходится жестко задавать назначенные DHCP-серверы DNS для конфигурации dnsmasq. Однако, когда я нахожусь в другой сети, например на работе, на клиенте, эти адреса разные. Я должен перенастроить каждый раз, когда я меняю сети.

Как я могу настроить OS X для использования 127.0.0.1 И любых DNS-серверов, назначенных через DHCP?

Если это невозможно, то как я могу сказать dnsmasq, чтобы получать вышестоящие DNS-серверы через DHCP?

Вот что я знаю до сих пор.

  1. /etc/resolv.conf в OS X является динамическим, он изменяется в зависимости от того, что вы установили в настройках сети, или с использованием DHCP. Он меняется каждый раз, когда вы подключаетесь. Он даже удаляется, когда вы выходите из сети. Поэтому, как только я использую 127.0.0.1, это отражается в /etc/resolv.conf, и я не знаю, есть ли место, где можно найти ранее назначенные DHCP-адреса DNS.

  2. OS X не использует /etc/resolv.conf.head.

  3. OS X не использует /etc/dhclient.conf, где вы можете добавить DNS-серверы в список DHCP.

  4. /etc/resolver/tld.conf не является решением, потому что он пытается использовать DNS-сервер на основе соответствия tld (хорошо, если вы используете .dev или что-то в этом роде).

Edit: Существует скриншот настройки сетевого DNS здесь это выглядит как то , что я хочу, но я понятия не имею , как автор этой статьи достигнута.

2 ответа2

5

Во-первых, использование 127.0.0.1 И назначенный DHCP DNS-сервер не будет работать. Если в OS X настроено несколько DNS-серверов, он не пробует их по очереди, он выполняет нечто вроде циклического перебора - отправка разных запросов на разные серверы более или менее случайным образом. Итоговый результат: некоторые из запросов, которые вы хотели обработать с помощью dnsmasq, вместо этого перейдут на обычный сервер (и получат неправильный результат), а некоторые, которые вы хотели отправить на обычный сервер, перейдут на dnsmasq (и не получат). Нехорошо.

Сказать dnsmasq использовать DNS-сервер, предоставленный DHCP, возможно, но я не вижу чистого способа сделать это. Вместо этого я бы порекомендовал использовать конфигурацию DNS, которая переопределяет обычную конфигурацию DNS для доменов, которые вы хотите специально обработать. Для этого есть два варианта:

  1. Пропустите dnsmasq и поместите хосты, которые вы хотите специально обработать, в /etc /hosts (см. Эту статью, например).
  2. Используйте /etc /resolver / files для направления запросов для определенных доменов на 127.0.0.1, переопределяя общий (предоставляемый DHCP) DNS-сервер (см. Справочную страницу для /etc /resolver и эту статью Mac OS X Hints. По сути, вы создаете папку /etc /resolver и помещаете в нее файл для каждого домена, который хотите переопределить. Например, /etc/resolver/somedomain.com будет содержать «nameserver 127.0.0.1».
1

Используя ответ Гордона в качестве отправной точки, я смог решить эту проблему для своих целей, а именно для создания имен хостов для проектов веб-разработки. Это было проверено на OS X 10.9 (Mavericks).

Я использую суффикс .dev для своих тестовых сайтов (например, project1.dev , project2.dev). Этот подход позволяет мне создавать произвольно много доменов .dev , но не нужно создавать файл для каждого из них в /etc/resolver . Это небольшое улучшение по сравнению с ответом Гордона; вам нужно создать файл только один раз для суффикса.

Это работает независимо от того, нахожусь ли я в моей рабочей сети, домашней сети или VPN.

  1. На панели «Сетевые настройки» перейдите в раздел «Дополнительно», «DNS» и удалите все добавленные пользовательские DNS-серверы, поэтому вы просто используете назначенные значения DHCP.
  2. sudo mkdir /etc/resolver/
  3. sudo sh -c 'echo nameserver 127.0.0.1 > /etc/resolver/dev'
  4. Если вы этого еще не сделали, добавьте следующее в /usr/local/etc/dnsmasq.conf (при условии, что вы установили dnsmasq с помощью homebrew; в противном случае его расположение может отличаться):

    address=/dev/127.0.0.1
    

Если вы используете дополнительные суффиксы (например, project1.loc), просто повторите шаги 3 и 4, заменив суффикс dev на оба шага.

Попытка разрешить имя хоста с помощью dig , host или nslookup не удастся, но имя хоста будет разрешено в веб-браузере или, например, curl . curl http://project1.dev работает как положено.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .