3

Согласно справочной странице, host должен запросить «сервер или серверы, перечисленные в /etc/resolv.conf », но он использует только первую запись в этом файле:

thefourthtower:$cat /etc/resolv.conf
nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver 192.168.1.254
domain gateway.2wire.net
search gateway.2wire.net
thefourthtower:$host thefourthtower
Host thefourthtower not found: 3(NXDOMAIN)
thefourthtower:$host thefourthtower 192.186.1.254
thefourthtower.gateway.2wire.net has address 192.168.1.74

Бит 2wire поставляется с модема / маршрутизатора 2wire . AT & T (или 2Wire?) оснастили устройство очень плохой прошивкой, и его DNS-сервер (кеш), как правило, медленнее, чем Google Public DNS, проблема, усугубляемая собственными ненадежными DNS-серверами AT & T (без альтернативных серверов).

Могу ли я заставить host или nslookup использовать дополнительные записи /etc/resolv.conf (и не указывать серверы вручную)?

Или это единственное решение для ручного сопоставления хостов в /etc/hosts , учитывая желаемый порядок записей resolv.conf ?

ОБНОВИТЬ

Ничто из вышесказанного не подразумевает, что я думаю, что сервер имен Google должен знать о моих локальных хостах.

Я спрашиваю: можно ли использовать определенный сервер имен только для локальных имен (поскольку имя типа 'thefourthtower' должно быть локальным)?

Похоже, что ответ НЕТ, и я должен запустить сервер имен на своем компьютере, потому что существующий локальный сервер имен настолько плох.

3 ответа3

3

Команда host использует библиотеку resolver, и эта библиотека использует записи сервера имен в /etc/resolv.conf по порядку, но только при ошибке. Назначение нескольких записей - для избыточности, в случае сбоя основного сервера по какой-либо причине. Но если основной сервер предоставляет ответ, будь то положительный или отрицательный (например, NXDOMAIN), другие записи сервера имен не используются. Вы можете иметь до трех, для тройного резервирования.

Внешний сервер имен, такой как Googles, не будет знать о ваших локальных именах хостов. Вы должны поместить их в файл /etc /hosts или запустить локальный сервер имен. Запуск локального сервера имен имеет преимущество в кэшировании DNS-запросов, что значительно ускоряет будущие или повторные поиски.

Я использую dnsmasq в качестве локального DNS и кеша. Это действительно очень помогает. Просто настройте ваш /etc/resolv.conf на использование первого (или единственного) сервера имен 127.0.0.1 и настройте dnsmasq для работы с вышестоящими серверами вашего провайдера. Даже если ваш провайдер работает медленно, ваш локальный кеш будет компенсировать большую часть времени.

1

Удалите первые две записи сервера имен из /etc/resolv.conf если они не знают о хостах в вашей локальной сети или о локально используемом домене.

Ответ NXDOMAIN может быть вызван тем, что gateway.2wire.net не является зарегистрированным доменным именем, которое можно использовать в Интернете.

$ dig gateway.2wire.net any

; <<>> DiG 9.3.6-P1-RedHat-9.3.6-4.P1.el5_5.3 <<>> gateway.2wire.net any
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 7984
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;gateway.2wire.net.             IN      ANY

;; AUTHORITY SECTION:
2wire.net.              1200    IN      SOA     ns1.2wire.com. hostmaster.2wire.com. 2007041700 3600 600 604800 1200

;; Query time: 209 msec
;; SERVER: 10.0.0.9#53(10.0.0.9)
;; WHEN: Tue Aug 30 13:29:23 2011
;; MSG SIZE  rcvd: 95

Обратите внимание, что официальные серверы имен для 2wire.net говорят, что нет такого домена, как gateway.2wire.net . Я предполагаю, что это удобство, используемое продуктами 2wire только на уровне локальной сети.

8.8.8.8 - это сервер имен Google, и не следует ожидать, что он будет знать о хостах в вашей частной локальной сети и о некоторых странных вариантах конфигурации, сделанных вашим маршрутизатором 2wire.

Имя компьютера, в котором находится четвертая башня, должно отображаться в его собственной таблице /etc/hosts (которую вы должны согласовать для консультации перед DNS) и действительно должно быть известно серверу имен DNS в вашей локальной сети (то есть на маршрутизаторе 2wire).

Содержит ли ваш /etc/nsswitch.conf hosts: files dns ?

0

Вы можете использовать следующий код для запроса всех серверов имен в вашем /etc/resolv.conf:

grep '^nameserver' /etc/resolv.conf | cut -c 12- | xargs -i host [HOSTNAME] {}

Или, если вы предпочитаете dig(1):

grep '^nameserver' /etc/resolv.conf | cut -c 12- | xargs -i dig @{} [HOSTNAME]

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