Mengapa file / etc / hosts saya tidak di-query ketika nslookup mencoba menyelesaikan suatu alamat?

15

Saya memiliki beberapa domain lokal yang diselesaikan 127.0.0.1dalam /etc/hostsfile saya . Dan itu semua baik-baik saja untuk jangka waktu tertentu tetapi sekarang ketika saya berlari:

nslookup test.local

Ini menghasilkan:

Server:     192.168.1.3
Address:    192.168.1.3#53

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

Ini 192.168.1.3adalah DNS jaringan kami dan tidak seharusnya mengetahui domain lokal saya test.local. Setelah beberapa pencarian, saya menemukan /etc/nsswitch.conffile itu menyimpan informasi tentang prioritas sumber DNS untuk di-query. Tapi tidak ada masalah di sana! Ini milik saya:

# /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

Jadi, adakah yang tahu mengapa hostsfile saya tidak termasuk dalam pencarian DNS?

Mehran
sumber

Jawaban:

20

nslookuphanya resolusi DNS yang tepat , yang sangat berbeda dari subsistem Name Service Switch yang digunakan aplikasi Anda lainnya; artinya nslookupmengabaikan /etc/hostsdan mDNS.

Untuk menguji resolusi lokal seperti itu, gunakan sesuatu yang menggunakan NSS. ping <hostname>sebagai contoh. Ini demo sederhana berdasarkan /etc/hostsentri di jaringan saya.

$ 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

Perhatikan bahwa ada server DNS dan proksi yang dapat memfaktorkan suatu /etc/hostsfile. Dalam kasus ini, nslookupmungkin mengembalikan hasil dari sumber lokal.

Oli
sumber
5
Sebagai gantinya pingseseorang harus menggunakan getent ahostskarena itu tidak memerlukan semua barang ekstra yang pingdimilikinya.
Mikko Rantalainen
2

Saya kira Anda menginginkan resolusi nama dari /etc/hostsfile untuk host tertentu (mysite.com).

Masalah umum lain yang dapat menyebabkan perilaku ini adalah bahwa Anda mungkin memiliki banyak entri pada /etc/hostsfile untuk IP yang sama, contoh:

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

Dalam beberapa implementasi, ini dapat menyebabkan resolusi nama untuk diserahkan ke DNS. Perbaikan cepat, kelompokkan semuanya dalam 1 baris

1.1.1.1 host1.domain1.com host2.domain2.com
afe038
sumber
1

Hal umum lainnya yang saya lihat adalah ketika seseorang (biasanya saya) membalikkan alamat IP dengan nama host di /etc/hosts- misalnya:

mysite.com    10.2.3.4

Sekilas, kelihatannya normal ... Ini solusi saya sekitar 50% dari waktu:

10.2.3.4    mysite.com
KLaw
sumber
bersalah kali ini ... # sigh
Cybex
1
Biasanya file host dilengkapi dengan entri localhost yang telah ditentukan 127.0.0.1. Melakukannya salah sangat salah :-)
m3nda