В OS X, как я могу добавить 127.0.0.1 к списку серверов DNS, полученных через DHCP?
Я пытаюсь использовать dnsmasq для разрешения определенных известных доменов, используя его конфигурацию, но оставляю остальные запросы на обычный DNS-сервер, назначенный DHCP. Я не могу заставить это работать. Когда я устанавливаю DNS на 127.0.0.1 через панель "Сеть", мне приходится жестко задавать назначенные DHCP-серверы DNS для конфигурации dnsmasq. Однако, когда я нахожусь в другой сети, например на работе, на клиенте, эти адреса разные. Я должен перенастроить каждый раз, когда я меняю сети.
Как я могу настроить OS X для использования 127.0.0.1 И любых DNS-серверов, назначенных через DHCP?
Если это невозможно, то как я могу сказать dnsmasq, чтобы получать вышестоящие DNS-серверы через DHCP?
Вот что я знаю до сих пор.
/etc/resolv.conf в OS X является динамическим, он изменяется в зависимости от того, что вы установили в настройках сети, или с использованием DHCP. Он меняется каждый раз, когда вы подключаетесь. Он даже удаляется, когда вы выходите из сети. Поэтому, как только я использую 127.0.0.1, это отражается в /etc/resolv.conf, и я не знаю, есть ли место, где можно найти ранее назначенные DHCP-адреса DNS.
OS X не использует /etc/resolv.conf.head.
OS X не использует /etc/dhclient.conf, где вы можете добавить DNS-серверы в список DHCP.
/etc/resolver/tld.conf не является решением, потому что он пытается использовать DNS-сервер на основе сопоставления tld (хорошо, если вы используете.dev или что-то еще).
Изменить: здесь есть снимок экрана настройки DNS сети, который выглядит как то, что я хочу, но я понятия не имею, как достиг автор этой статьи.
2 ответа
Во-первых, использование 127.0.0.1 И назначенный DHCP DNS-сервер не будет работать. Если в OS X сконфигурировано несколько DNS-серверов, он не пробует их последовательно, он выполняет нечто вроде циклического перебора - отправка разных запросов на разные серверы более или менее случайным образом. Чистый результат: некоторые из запросов, которые вы хотели обработать с помощью dnsmasq, вместо этого перейдут на обычный сервер (и получат неправильный результат), а некоторые, которые вы хотели отправить на обычный сервер, перейдут на dnsmasq (и потерпят неудачу). Нехорошо.
Сказать dnsmasq использовать DNS-сервер, предоставленный DHCP, возможно, но я не вижу чистого способа сделать это. Вместо этого я бы порекомендовал использовать конфигурацию DNS, которая переопределяет обычную конфигурацию DNS для доменов, которые вы хотите специально обработать. Для этого есть два варианта:
- Пропустите dnsmasq и поместите хосты, которые вы хотите специально обработать, в / etc / hosts (см. Эту статью, например).
- Используйте / 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".
Используя ответ Гордона в качестве отправной точки, я смог решить эту проблему для своих целей, а именно для создания имен хостов для проектов веб-разработки. Это было проверено на OS X 10.9 (Mavericks).
Я использую .dev
суффикс для моих тестовых сайтов (например, project1.dev
, project2.dev
). Такой подход позволяет мне создавать произвольно много .dev
домены, но не нужно создавать файл для каждого в /etc/resolver
, Это небольшое улучшение по сравнению с ответом Гордона; вам нужно создать файл только один раз для суффикса.
Это работает независимо от того, нахожусь ли я в моей рабочей сети, домашней сети или VPN.
- На панели "Параметры сети" перейдите в раздел "Дополнительно", "DNS" и удалите все добавленные пользовательские DNS-серверы, поэтому вы просто используете назначенные значения DHCP.
sudo mkdir /etc/resolver/
sudo sh -c 'echo nameserver 127.0.0.1 > /etc/resolver/dev'
Если вы еще этого не сделали, добавьте следующее в
/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
работает как положено.