ทำไม nslookup ไม่ใช้ mdns ในขณะที่ ping ทำ


9

ใน dnsmasq.conf:

address=/local/127.0.0.1

ใน resolv.conf:

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

ฉันสามารถใช้ nslookup:

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

Name:   www.local
Address: 127.0.0.1

แต่ฉันไม่สามารถใช้ ping:

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

ฉันใช้ tcpdump เพื่อจับภาพในขณะที่กระตุก www.local ไม่มีแพ็คเก็ตในขณะที่แพ็คเก็ตเช่น

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

ปรากฏขึ้นจากส่วนต่อประสานทางกายภาพ

ซึ่งหมายความว่า ping ใช้ mdns แต่ทำไม nslookup ไม่ใช้ mdns ทำไม ping จะไม่ใช้ dns ปกติเมื่อ mdns ไม่ส่งคืนค่าที่เป็นประโยชน์

ขอบคุณ

คำตอบ:


8

pingใช้ระบบการจำแนกชื่อของ glibc เรียกว่า Name Service Switch สิ่งนี้ใช้/etc/nsswitch.confไฟล์เพื่อทราบตำแหน่งที่จะค้นหาเพื่อแก้ไขชื่อเป็น IP hosts:บรรทัดในแฟ้มนี้หมายถึงคำสั่งของการตั้งค่าสำหรับแต่ละบริการ สำหรับตัวอย่างให้filesแสดง/etc/hostsไฟล์โลคัลdnsใช้/etc/resolv.confไฟล์เพื่อติดต่อเซิร์ฟเวอร์ DNS และmdnsใช้ mdns

อย่างไรก็ตามnslookupไม่ควรใช้ มันพูดโดยตรงกับเซิร์ฟเวอร์ DNS ที่ระบุ/etc/resolv.confและไม่สามารถใช้งานmdnsได้

แต่ฉันไม่สามารถตอบคำถามสุดท้ายของคุณ หากคุณมีทั้งmdnsและdnsใน/etc/nsswitch.confแม้จะมีmdnsครั้งแรกก็ตอนแรกควรพยายามที่จะแก้ไขชื่อด้วยแล้วหากไม่มีการใช้คำตอบmdnsdns


ขอบคุณ @priernov ฉันพบคำตอบของคำตอบสุดท้ายของฉันด้วยซึ่งก็คือบรรทัด "hosts: files mdns4_minimal [NOTFOUND = return] dns myhostname" ใน nsswitch.conf มันจะกลับมาถ้าไม่พบ mdns ip
dspjm

1
ที่จริง nslookup สามารถโน้มน้าวให้แก้ไขที่อยู่. local โดยการระบุเซิร์ฟเวอร์ 224.0.0.251 และพอร์ต 5353: เข้าสู่โหมดโต้ตอบ nslookup, ปัญหา 'เซิร์ฟเวอร์ 224.0.0.251', 'set port = 5353' และจากนั้นชื่อโฮสต์ที่จะแก้ไขเช่น ' Microknoppix.local' (ทดสอบบนระบบเดเบียน 2 ระบบบน Windows 10 nslookup.exe ที่จัดทำโดย Microsoft ไม่ทำงานหนึ่งที่ดาวน์โหลดจากisc.org/downloads/bindทำ)
NameOfTheRose

โดยวิธีการใช้getent hosts foo.localถ้าคุณเพียงแค่ต้องการค้นหาที่อยู่ IP ไม่ว่าจะเป็น mDNS หรือ DNS ซึ่งแตกต่างจากnslookupการgetentสั่งใช้ nsswitch ลิขสิทธิ์ GNU C Library ดังนั้นมันก็ทำงาน
hackerb9

3

มันง่ายมาก - nslookupเป็นเครื่องมือ DNS โดยเฉพาะ - เป็นส่วนหนึ่งของเครื่องมือ BIND

มันไม่ทราบเกี่ยวกับบริการชื่ออื่น ๆ ที่ห้องสมุดโทรเช่นgethostbynameสามารถเข้าถึงผ่าน NSS เพราะnslookupไม่ได้ใช้gethostbynameฯลฯ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.