Чому мій файл / 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може повернутися результат з локального джерела.


6
Замість 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
Зазвичай файли хостів постачаються із заздалегідь заданими 127.0.0.1 localhost записом. Робити це неправильно, так сильно неправильно :-)
m3nda
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.