Почему мой файл / etc / hosts не запрашивается, когда nslookup пытается разрешить адрес?


15

У меня есть несколько локальных доменов, разрешенных 127.0.0.1в моем /etc/hostsфайле. И все было хорошо в течение некоторого времени, но теперь, когда я бегу:

nslookup test.local

Это приводит к:

Server:     192.168.1.3
Address:    192.168.1.3#53

** server can't find test.local: NXDOMAIN

192.168.1.3Наша сеть DNS и он не должен знать свой локальный домен test.local. После нескольких поисков я обнаружил, что этот /etc/nsswitch.confфайл содержит информацию о приоритете источников DNS для запроса. Но там не было никаких проблем! Вот мой:

# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         compat
group:          compat
shadow:         compat

hosts:          files mdns4_minimal [NOTFOUND=return] dns
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

Так кто-нибудь знает, почему мой hostsфайл не включен в поиск DNS?

Ответы:


20

nslookupиспользуется только правильное разрешение DNS, которое значительно отличается от подсистемы переключателя службы имен , используемой другими приложениями; то есть nslookupигнорирует /etc/hostsи mDNS.

Для проверки локальных разрешений, подобных этому, используйте что-то, использующее NSS ping <hostname>например. Вот простая демонстрация, основанная на /etc/hostsзаписи в моей сети.

$ nslookup bert
Server:     8.8.8.8
Address:    8.8.8.8#53

** server can't find bert: NXDOMAIN

$ ping bert
PING bert (10.10.0.4) 56(84) bytes of data.
64 bytes from bert (10.10.0.4): icmp_seq=1 ttl=64 time=0.352 ms
64 bytes from bert (10.10.0.4): icmp_seq=2 ttl=64 time=0.407 ms

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


5
Вместо pingодного следует использовать, getent ahostsпотому что это не требует всех дополнительных вещей, которые pingесть.
Микко Ранталайнен

2

Я предполагаю, что вы хотите разрешение имени из /etc/hostsфайла для конкретного хоста (mysite.com).

Другая распространенная проблема, которая может вызывать такое поведение, заключается в том, что в /etc/hostsфайле может быть много записей для одного и того же IP, например:

1.1.1.1 host1.domain1.com
1.1.1.1 host2.domain2.com

В некоторых реализациях это может привести к передаче разрешения имени в DNS. Быстрое решение, сгруппируйте все в 1 ряд

1.1.1.1 host1.domain1.com host2.domain2.com

1

Еще одна распространенная вещь, которую я вижу, это когда кто-то (обычно я) меняет IP-адрес на имя хоста, /etc/hostsнапример:

mysite.com    10.2.3.4

На первый взгляд выглядит нормально ... Вот мое решение примерно в 50% случаев:

10.2.3.4    mysite.com

виновен в этом на этот раз ... # вздох
Cybex

1
Обычно файлы hosts поставляются с предопределенной записью 127.0.0.1 localhost. Делать это неправильно - это так неправильно :-)
m3nda
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.