Tại sao tệp / etc / hosts của tôi không được truy vấn khi nslookup cố gắng giải quyết một địa chỉ?


15

Tôi có một vài tên miền cục bộ được giải quyết 127.0.0.1trong /etc/hoststệp của tôi . Và tất cả đều ổn trong một khoảng thời gian nhưng bây giờ khi tôi chạy:

nslookup test.local

Nó dẫn đến:

Server:     192.168.1.3
Address:    192.168.1.3#53

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

Đây 192.168.1.3là DNS mạng của chúng tôi và không được biết tên miền địa phương của tôi test.local. Sau một vài lần tìm kiếm, tôi thấy rằng /etc/nsswitch.conftập tin chứa thông tin về mức độ ưu tiên của các nguồn DNS cần truy vấn. Nhưng không có vấn đề ở đó! Đây là của tôi:

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

Vậy có ai biết tại sao hoststập tin của tôi không được bao gồm trong tra cứu DNS không?

Câu trả lời:


20

nslookupchỉ thực hiện độ phân giải DNS thích hợp , khác biệt đáng kể so với hệ thống con Chuyển đổi dịch vụ tên mà các ứng dụng khác của bạn sử dụng; đó là nói nslookupbỏ qua /etc/hostsvà mDNS.

Để kiểm tra độ phân giải cục bộ như thế, hãy sử dụng cái gì đó sử dụng NSS. ping <hostname>ví dụ. Đây là một bản demo đơn giản dựa trên một /etc/hostsmục trên mạng của tôi.

$ 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

Lưu ý rằng có các máy chủ DNS và proxy có thể tạo thành một /etc/hoststệp. Trong những trường hợp này,nslookup có thể trả về kết quả từ nguồn cục bộ.


5
Thay vì pingmột người nên sử dụng getent ahostsvì điều đó không yêu cầu tất cả những thứ bổ sung pingcó.
Mikko Rantalainen

2

Tôi đoán rằng bạn muốn phân giải tên từ /etc/hoststệp cho máy chủ lưu trữ cụ thể (mysite.com).

Một vấn đề phổ biến khác có thể gây ra hành vi này là bạn có thể có nhiều mục trên /etc/hoststệp cho cùng một IP, ví dụ:

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

Trong một số triển khai, điều này có thể khiến độ phân giải tên được chuyển sang DNS. Một sửa chữa nhanh chóng, nhóm mọi thứ trong 1 hàng

1.1.1.1 host1.domain1.com host2.domain2.com

1

Một điều phổ biến khác mà tôi thấy là nơi ai đó (thường là tôi) đảo ngược địa chỉ IP với tên máy chủ trong /etc/hosts- ví dụ:

mysite.com    10.2.3.4

Thoạt nhìn, nó có vẻ bình thường ... Đây là giải pháp của tôi khoảng 50% thời gian:

10.2.3.4    mysite.com

phạm tội lần này ... # thở dài
Cybex

1
Thông thường các tệp lưu trữ đi kèm với mục nhập localhost 127.0.0.1 được xác định trước. Làm sai là rất nhiều sai :-)
m3nda
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.