avahi: ping ไม่สามารถแก้ไขชื่อโฮสต์ได้ แต่ nslookup can


41

pingบอกฉันว่ามันไม่สามารถแก้ไขชื่อโฮสต์บางส่วน ("ping: unknown host domain.company.local") ใน URL แต่เมื่อฉันใช้hostหรือnslookupบนคอมพิวเตอร์เครื่องเดียวกันในบรรทัดคำสั่งการแก้ปัญหาทำงานได้ดี (เช่นรวดเร็วและเชื่อถือได้ )

สิ่งใดที่ทำให้เกิดสิ่งนี้

การทดสอบเพิ่มเติม: Firefox wgetและpingมีปัญหาเดียวกัน ส่ง Ping การทำงานของที่อยู่ IP

ระบบปฏิบัติการ: Linux (Ubuntu 13.04)

แก้ไข/etc/resolv.confอ่านของฉัน:

nameserver 127.0.1.1
search domain.company.local

netstat รายงาน:

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.1.1:53            0.0.0.0:*               LISTEN      -               

ดังนั้นสิ่งที่ทำงานบนพอร์ตนี้ ( nslookupรายงานว่ามันใช้127.0.1.1เป็นเซิร์ฟเวอร์ DNS)

ไม่มี/etc/*inetd.confดังนั้นฉันไม่แน่ใจว่าแอปพลิเคชันใดให้บริการพอร์ตนี้

ดูเหมือนว่าdnsmasqจะใช้:

/usr/sbin/dnsmasq --no-resolv --keep-in-foreground --no-hosts --bind-interfaces
   --pid-file=/var/run/NetworkManager/dnsmasq.pid --listen-address=127.0.1.1
   --conf-file=/var/run/NetworkManager/dnsmasq.conf --cache-size=0 --proxy-dnssec
   --enable-dbus=org.freedesktop.NetworkManager.dnsmasq
   --conf-dir=/etc/NetworkManager/dnsmasq.d

ไฟล์และโฟลเดอร์การกำหนดค่าทั้งหมดว่างเปล่า ตั้งแต่nslookupบอกว่ามันใช้การ127.0.1.1#53เดาของฉันมันใช้dnsmasqงานได้แม้ไม่มีโครงแบบ แต่จะทราบได้อย่างไรว่า DNS หลักใดที่จะสืบค้น

EDIT2ปิดใช้งานdnsmasqตามที่แนะนำโดย harrymc ไม่ได้ช่วย ดังนั้นฉันจึงวิ่งstrace pingซึ่งให้ผลลัพธ์ที่แปลกนี้ (เฉพาะส่วนที่น่าสนใจ):

open("/etc/host.conf", O_RDONLY|O_CLOEXEC) = 4
read(4, "127.0.0.1\tlocalhost\n#127.0.1.1\ta"..., 4096) = 613
...
open("/lib/libnss_mdns4_minimal.so.2", O_RDONLY|O_CLOEXEC) = 4
read(4, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\f\0\0\0\0\0\0"..., 832) = 832
...
mmap(NULL, 2105560, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 4, 0) = 0x7f7829b00000
...
socket(PF_FILE, SOCK_STREAM, 0)         = 4
fcntl(4, F_GETFD)                       = 0
fcntl(4, F_SETFD, FD_CLOEXEC)           = 0
connect(4, {sa_family=AF_FILE, path="/var/run/avahi-daemon/socket"}, 110) = 0
fcntl(4, F_GETFL)                       = 0x2 (flags O_RDWR)
fstat(4, {st_mode=S_IFSOCK|0777, st_size=0, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f782a4f8000
lseek(4, 0, SEEK_CUR)                   = -1 ESPIPE (Illegal seek)
write(4, "RESOLVE-HOSTNAME-IPV4 domain.com"..., 44) = 44
read(4, "-15 Timeout reached\n", 4096)  = 20

ดังนั้นpingรูปลักษณ์/etc/hostsที่เหมาะสม จากนั้นก็โหลดและmmap()s /lib/libnss_mdns4_minimal.so.2ซึ่งทำให้รู้สึกเช่นกัน

แต่แล้วมันก็คุยกับ avahi!?

ซึ่งนำฉันไปโพสต์ฟอรั่มนี้: ปิงไม่ได้ทำตามคำขอของ DNS

ฉัน/etc/nsswitch.confยังมีบรรทัดนี้:

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4

หากฉันpingเป็นที่อยู่ที่ใช้งานได้ฉันเห็นว่ากระบวนการโหลดเช่นกัน/lib/libnss_mdns4_minimal.so.2แต่จะทำการค้นหา DNS ผ่านพอร์ต 53

ดังนั้นฉันเดาว่าตอนนี้/lib/libnss_mdns4_minimal.so.2ก็สังเกตเห็นว่าที่อยู่ IP ลงท้ายด้วย.localและไม่ได้ด้วย.comและจากนั้น[NOTFOUND=return]จะถูกเรียก

ฉันจะแก้ไขสิ่งนี้ได้อย่างไร


ของคุณ/etc/resolv.confคืออะไร
โจเซฟอาร์

ข้อใดถูกและผิด? ชื่อโฮสต์ควรแก้ไขหรือไม่ คุณไม่ได้บอกเราว่าคุณมีปัญหาที่แตกต่างกันสองอย่างอย่างสิ้นเชิง (และหากควรแก้ไขให้อธิบายรายละเอียดให้มากที่สุดเท่าที่จะเป็นไปได้อย่างไรและทำไมจึงควรแก้ไขอย่างที่น่าจะนำไปสู่คำอธิบายว่าทำไมมันถึงไม่เป็นเช่นนั้น)
David Schwartz

... และสิ่งที่การตั้งค่าพร็อกซี HTTP ของคุณสำหรับ Chrome, Firefox wgetและ
JdeBP

@DavidSchwartz: ฉันคาดว่าจะได้รับการแก้ไข สิ่งที่ฉันไม่เข้าใจวิธีการnslookupหรือhostสามารถแก้ไขชื่อและสิ่งอื่น ๆ ในระบบไม่สามารถ
Aaron Digulla

1
หากคุณไม่ได้แชร์การเชื่อมต่อกับอุปกรณ์อื่นหรือ VM ผ่านคอมพิวเตอร์ของคุณคุณสามารถปิด dnsmasq ใน Network Manager แก้ไข/etc/NetworkManager/NetworkManager.confและแสดงความคิดเห็นdns=dnsmasqบรรทัด (ใส่ # ในด้านหน้าของมัน) sudo restart network-managerแล้วทำ ที่จะปิดตัวแก้ไขท้องถิ่น ( ต้นฉบับ )
harrymc

คำตอบ:


33

ตามที่อธิบายรายละเอียดในโพสต์บล็อกนี้คุณต้องแก้ไข/etc/avahi/avahi-daemon.conf:

[server]
domain-name=.alocal

นี้ผูกภูตกับโดเมนแทนการเริ่มต้น.alocal.local

และรีสตาร์ท daemon ด้วย:

sudo service avahi-daemon restart

หมายเหตุจากโพสต์บล็อก:

คุณอาจจำเป็นต้องล้างข้อมูล DNS, mDNS และตัวแก้ไขแคชรวมถึงรีสตาร์ทเว็บเบราว์เซอร์ของคุณเพื่อล้างแคชภายใน

หลังจากนั้นpingและnslookupเริ่มที่จะเห็นด้วย

ขอบคุณharrymc ที่พาฉันไปในเส้นทางที่ถูกต้อง


1
นอกจากนี้โปรดทราบว่าpingจะใช้ nss nslookupไม่ (มันใช้ lwres และ, ดี, ผูก, พูดคุยกับโดยตรงกับตัวแก้ไข)
Ricky Beam

สำหรับฉันมันสมเหตุสมผลกว่าที่จะกำหนดค่าให้ถูกต้องแทนที่จะปิดใช้งานสำหรับภายในเครื่อง
keiki

@ otakun85: แล้วฉันจะทำยังไงดีล่ะ?
Aaron Digulla

@AaronDigulla คุณตั้งค่าและคำตอบที่โหวตสูงสุดในปัจจุบันปิดการใช้งานสำหรับท้องถิ่น
keiki

2
มันอัศจรรย์มาก. ขอบคุณมาก. ต่อสู้กับสิ่งนี้เป็นเวลาหลายชั่วโมงก่อนค้นหาโพสต์นี้
fpghost


8

สิ่งที่ต้องทำ: แก้ไข /etc/default/avahi-daemon

เปลี่ยนสาย:

AVAHI_DAEMON_DETECT_LOCAL=1

ไปยัง

AVAHI_DAEMON_DETECT_LOCAL=0

รีสตาร์ทavahi-daemonหรือฆ่า

ฉันไม่ชอบ Avahi และฉันไม่ได้ใช้คุณสมบัติใด ๆ เลย หากคุณต้องการปิดการใช้งาน avahi อย่างแท้จริงแก้ไข/etc/init/avahi-daemon.confคล้ายกับต่อไปนี้:

start on (never 
          and filesystem
      and started dbus)
stop on stopping dbus

2
ฉันไม่สนใจว่าคุณไม่ควรใส่ความเห็น "ขอบคุณ" ที่นี่ฉันแค่ต้องการแสดงความขอบคุณและเวลาและพลังงานที่คุณช่วยฉัน ขอบคุณมาก! ฉันใช้ VPN ของ บริษัท เพื่อทำงานฉุกเฉินจากห้างสรรพสินค้าและไม่สามารถทำให้เว็บไซต์ของเราทำงานได้แม้จะพยายามทำทุกอย่าง ฉันจะไม่ได้รับสามารถที่จะคิดออกนี้ด้วยตัวเองที่แน่นอน ...
eresonance

7

ดูเหมือนว่าที่อยู่. local ไม่สามารถเข้าถึงได้ใน ubuntu

ทางออกคือการแก้ไข/etc/nsswitch.confและเปลี่ยนบรรทัดนี้:

hosts:          files mdns4_minimal [NOTFOUND=return] dns

โดยสิ่งนี้ :

hosts:          files dns

งานประเภทนี้สำหรับฉัน ในกรณีของฉันบรรทัดโฮสต์มี "ไฟล์แก้ปัญหา [! UNAVAIL = return] mdns4_minimal [NOTFOUND = return] dns" และเปลี่ยนเป็น "ไฟล์ mdns4_minimal [NOTFOUND = return] dns" ขอบคุณสำหรับตัวชี้ในทิศทางที่ถูกต้อง
Andorbal

พยายามคำตอบอื่น ๆ ด้านบนปิดใช้งาน avahi (ซึ่งเป็นการผ่อนปรน) และยังคงมีปัญหาอยู่ คำตอบนี้แก้ไขได้สำหรับฉัน ขอบคุณ
Adam Plocher

3

หากคุณไม่ได้แชร์การเชื่อมต่อกับอุปกรณ์อื่นหรือ VM ผ่านคอมพิวเตอร์ของคุณคุณสามารถปิด dnsmasq ใน Network Manager

แก้ไข/etc/NetworkManager/NetworkManager.confและแสดงความคิดเห็นบรรทัด (ใส่ # หน้ามัน):

dns=dnsmasq

จากนั้นทำ:

sudo restart network-manager

ที่จะปิดตัวแก้ไขท้องถิ่น

ที่มา: DNS ใน Ubuntu 12.04


2

ดังนั้นฉันเดาว่าตอนนี้ /lib/libnss_mdns4_minimal.so.2 กำลังสังเกตเห็นว่าที่อยู่ IP ลงท้ายด้วย. local และไม่ใช่กับ. com และจากนั้น [NOTFOUND = return] จะถูกเรียกใช้

ฉันจะแก้ไขสิ่งนี้ได้อย่างไร

ค่อนข้างดีเดา แต่คำตอบอื่น ๆ คือ overkill ทางออกที่ง่ายคือการเอาบิตที่จะถูกเรียกแน่นอนคือลบเพียง [NOTFOUND=return]

การลบหมายความว่าหากmdns4_minimalส่งคืนจะNOTFOUNDใช้รายการถัดไปในรายการตัวแก้ไข นี่เป็นพฤติกรรมปกติ [NOTFOUND=return]เป็นการเพิ่มประสิทธิภาพในการล้มเหลวอย่างรวดเร็วในชื่อที่ไม่รู้จัก แต่จะถือว่า.localชื่อทั้งหมดอยู่ใน mDNS


1

ฉันมีกรณีที่น่าสนใจที่มีอาการเดียวกัน (ping, mount ฯลฯ ไม่ทำงาน แต่เป็นโฮสต์, ขุดทำงาน) ตรวจสอบการอนุญาตบนไฟล์/etc/resolv.conf ในกรณีของฉันมีคนเปลี่ยนและฉันไม่มีสิทธิ์ในการอ่าน (แม้ว่าcat /etc/resolv.confและการแก้ไขไฟล์จะทำงานได้ดี)

อย่างไรก็ตาม strace กำลังแสดง:

open("/etc/resolv.conf", O_RDONLY|O_CLOEXEC) = -1 EACCES (Permission denied)

และเป็นผลให้พยายามสืบค้น localhost (127.0.0.1) แทน IP ของ nameserver จากไฟล์ resolv.conf:

socket(PF_INET, SOCK_DGRAM|SOCK_NONBLOCK, IPPROTO_IP) = 4
connect(4, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, 16) = 0
poll([{fd=4, events=POLLOUT}], 1, 0)    = 1 ([{fd=4, revents=POLLOUT}])

และtcpdumpไม่แสดงการรับส่งข้อมูล DNS ใด ๆ เมื่อส่ง Ping ทั้งหมดทำงานหลังจากแก้ไขการอนุญาต:

# chmod 644 /etc/resolv.conf
# ls -l /etc/resolv.conf
-rw-r--r-- 1 root root 111 Oct  3 09:54 /etc/resolv.conf

ปัญหาอื่นอาจเป็นคุณสมบัติเพิ่มเติมของไฟล์หรือปัญหาการเข้าถึงอื่น ๆ ในกรณีนั้นให้ลบไฟล์ /etc/resolv.conf และสร้างใหม่จากศูนย์


ปัญหาอีกประการหนึ่งที่ฉันมีหนึ่งเซิร์ฟเวอร์คือโฟลเดอร์รากทั้งหมดสูญเสียxสถานะของพวกเขาและทำให้ไบนารีจำนวนมากทำงานไม่ถูกต้อง chmod +x /*การแก้ไขคือ
Silex

0

/etc/hostsเหตุผลก็คือรูปแบบของ ตรวจสอบให้แน่ใจว่าไม่มีช่องว่างระหว่าง IP กับชื่อโฮสต์แทนที่จะใช้ TAB หลังจากเปลี่ยนเป็น TAB ชื่อโฮสต์สามารถแก้ไขได้โดย ping

127.0.0.1        test.local
         ^^^^^^^^ → Should be a TAB not multiple spaces.

มันอาจจะเป็นคำตอบ แต่มันมีรูปแบบเป็นความคิดเห็น ...
ฟรานซิส Tapia

-1

ติดตั้ง avahi-daemon บน Ubuntu เพื่อให้คุณสามารถเข้าถึงชื่อโฮสต์ubuntu.localจากโฮสต์ระบบปฏิบัติการ

sudo apt-get install avahi-daemon avahi- ค้นพบ avahi-utils libnss-mdns mdns-scan


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