Назад | Перейти на главную страницу

dnsmasq читает / etc / hosts, но не использует его

Я установил dnsmasq по умолчанию. Когда я запускаю dig, похоже, используется dnsmasq (127.0.0.1), но результаты не включают имена хостов, включенные в / etc / hosts.

/ etc / hosts:

192.168.1.13 sun

в терминале:

$ dig sun

; <<>> DiG 9.6-ESV-R4 <<>> sun
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 32131
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;sun.               IN  A

;; AUTHORITY SECTION:
.           9699    IN  SOA a.root-servers.net. nstld.verisign-grs.com. 2011041100 1800 900 604800 86400

;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Tue Apr 12 05:20:56 2011
;; MSG SIZE  rcvd: 96

в терминале:

$ dig @localhost sun

; <<>> DiG 9.6-ESV-R4 <<>> @localhost sun
; (2 servers found)
;; global options: +cmd
;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 43763
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;sun.               IN  A

;; AUTHORITY SECTION:
.           10800   IN  SOA a.root-servers.net. nstld.verisign-grs.com. 2011041800 1800 900 604800 86400

;; Query time: 40 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Mon Apr 18 17:15:23 2011
;; MSG SIZE  rcvd: 96

Я пробовал использовать local и expand-hosts / domain, но, похоже, ни один из них не работает. Моя основная цель - иметь возможность использовать одну машину для размещения DNS в локальной сети, меня не волнует, будут ли имена в конечном итоге быть sun или sun.domain, в зависимости от того, что работает.

Вот мой /etc/resolv.conf

nameserver 127.0.0.1
domain members.linode.com
search members.linode.com
nameserver 72.14.188.5
nameserver 72.14.179.5

и /etc/dnsmasq.conf

domain-needed
bogus-priv

Все это на машине с Ubuntu 10.04, если это имеет значение. Я следил за этим руководством: http://www.mythicalbeast.co.uk/linux/dnsmasq_howto.html (хотя и не дословно, так как это также устанавливает DHCP)

Я знаю, что это с 2011 года, но поскольку до сих пор нет принятого ответа:

Сегодня у меня была похожая проблема. Curl работал, чтобы получить ожидаемый ответ от haproxy lxc с соответствующим заголовком, но каким-то образом мой локальный dnsmasq не предоставил разрешение для container.test (подтверждено nslookup).

Google нашел меня эта почта Хьюго Хеден, который сказал, что это может быть проблемой с /etc/hosts форматирование.

Что решило проблему для меня:

  1. Раскомментировать no-hosts в /etc/dnsmasq.conf
  2. Положив 123.123.123.12 container.test в новый файл, например /etc/dnsmasq.hosts
  3. Указал dnsmasq на новый файл, добавив addn-hosts=/etc/dnsmasq.hosts к /etc/dnsmasq.conf

Этот фрагмент из dnsmaq FAQ кажется актуальным:

В: Имена в Интернете работают нормально, но поиск локальных имен в / etc / hosts или DHCP не работает.

О: Код резольвера иногда делает странные вещи, когда ему дают имена без точек. Win2k и WinXP могут вообще не использовать DNS и просто пытаться найти имя с помощью WINS. В unix смотрите "options ndots:" в "man resolv.conf" для получения подробной информации по этой теме. Проверка поиска с использованием «nslookup» или «dig» будет работать, но затем попытка запустить «ping» приведет к ошибке поиска, добавление точки в конце имени хоста исправит ситуацию. (т.е. «ping myhost» не работает, но «ping myhost.» работает. Решение состоит в том, чтобы убедиться, что все ваши хосты имеют установленный домен («домен» в resolv.conf, или установите домен на вашем DHCP-сервере, см. ниже fr Windows XP и Mac OS X). Подойдет любой домен, но "localnet" является традиционным. Теперь, когда вы разрешаете "myhost", преобразователь попытается найти "myhost.localnet", поэтому вам нужно, чтобы dnsmasq ответил на это имя Для этого нужно включить домен в каждое имя в / etc / hosts и / или использовать параметры --expand-hosts и --domain.

Поэтому я предлагаю вам разместить свой /etc/resolv.conf, а также аргументы, которые вы передаете в dnsmasq при его запуске.

Как выглядит ваш /etc/resolv.conf? Ищите домен или элементы поиска.

Настройте домен .local для dnsmasq, а затем добавьте его в свой файл resolv.conf, и он должен работать.

Попробуйте копать sun.local @localhost.

dig, а также host и nslookup специально созданы для запроса DNS-серверов. Он не будет смотреть на / etc / hosts и фактически проигнорирует /etc/nsswitch.conf

Однако все, что использует вызов gethostbyname, будет использовать /etc/nsswitch.conf

Например, ping должен использовать / etc / hosts при условии, что файлы находятся перед dns в /etc/nsswitch.conf, как обычно.