Tại sao nslookup không sử dụng mdns trong khi ping làm gì?


9

Trong dnsmasq.conf:

address=/local/127.0.0.1

Trong độ phân giải:

# Generated by NetworkManager
domain example.com
search example.com
nameserver 127.0.0.1
nameserver 10.66.127.17
nameserver 10.68.5.26

Tôi có thể sử dụng nslookup:

# nslookup www.local
Server:     127.0.0.1
Address:    127.0.0.1#53

Name:   www.local
Address: 127.0.0.1

Nhưng tôi không thể sử dụng ping:

# ping www.local
ping: unknown host www.local

Tôi sử dụng tcpdump để chụp lo trong khi ping www.local, không có gói nào, trong khi các gói như

# tcpdump -i em1 -n | grep local

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on em1, link-type EN10MB (Ethernet), capture size 65535 bytes
20:14:38.189335 IP 10.66.65.188.mdns > 224.0.0.251.mdns: 0 A (QM)? www.local. (27)
20:14:39.190700 IP 10.66.65.188.mdns > 224.0.0.251.mdns: 0 A (QM)? www.local. (27)
20:14:41.192979 IP 10.66.65.188.mdns > 224.0.0.251.mdns: 0 A (QM)? www.local. (27)

xuất hiện từ giao diện vật lý.

Điều đó có nghĩa là ping đang sử dụng mdns, nhưng tại sao nslookup không sử dụng mdns? Tại sao ping sẽ không sử dụng dns bình thường khi mdns không trả lại chim ưng hữu ích?

Cảm ơn.

Câu trả lời:


8

pingsử dụng hệ thống phân giải tên của glibc, được gọi là Chuyển đổi dịch vụ tên. Điều này sử dụng /etc/nsswitch.conftệp để biết nơi cần tìm để phân giải tên thành IP. Các hosts:dòng trong tập tin này đại diện cho một thứ tự ưu tiên đối với từng dịch vụ. Ví dụ, filesđại diện cho /etc/hoststệp cục bộ , dnssử dụng /etc/resolv.conftệp để liên hệ với máy chủ DNS và mdnssử dụng mdns.

Tuy nhiên, nslookupkhông sử dụng nó. Nó nói chuyện trực tiếp với máy chủ DNS được chỉ định trong /etc/resolv.confvà vì vậy không thể sử dụng mdns.

Nhưng tôi không thể trả lời câu hỏi cuối cùng của bạn. Nếu bạn có cả hai mdnsdnstrong /etc/nsswitch.conf, ngay cả với mdnslần đầu tiên, trước tiên bạn nên cố gắng giải quyết tên với mdns, sau đó nếu không có câu trả lời sử dụng dns.


Cảm ơn @priernov, tôi cũng đã tìm thấy câu trả lời cho câu trả lời cuối cùng của mình, đó là dòng "hosts: files mdns4_minimal [NOTFOUND = return] dns myhostname" trong nsswitch.conf, nó sẽ trả về nếu không tìm thấy mdns ip.
dspjm

1
Trên thực tế, nslookup có thể được thuyết phục để giải quyết một địa chỉ .local bằng cách chỉ định máy chủ 224.0.0.251 và cổng 5353: nhập chế độ tương tác nslookup, phát hành 'server 224.0.0.251', 'set port = 5353', và sau đó tên máy chủ được giải quyết, ví dụ: ' Microknoppix.local '. (đã thử nghiệm trên 2 hệ thống debian. Trên Windows 10 nslookup.exe do Microsoft cung cấp không hoạt động, hệ thống được tải xuống từ isc.org/doads/bind hiện)
NameOfTheRose

Nhân tiện, sử dụng getent hosts foo.localnếu bạn chỉ muốn tìm kiếm một địa chỉ IP bất kể đó là mDNS hay DNS. Không giống như nslookup, getentlệnh sử dụng nsswitch của Thư viện GNU C, vì vậy nó luôn hoạt động.
hackerb9

3

Nó rất đơn giản - nslookupđặc biệt một công cụ DNS - đó là một phần trong những công cụ BIND.

Nó chỉ đơn giản là không biết về các dịch vụ tên khác mà thư viện gọi như gethostbynamecó thể truy cập qua NSS vì nslookupkhông sử dụng gethostbyname, v.v.

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.