avahi: ping không thể giải quyết tên máy chủ, nhưng nslookup có thể


41

pingnói với tôi rằng nó không thể giải quyết một số tên máy chủ ("ping: domain host domain.company.local") trong một URL nhưng khi tôi sử dụng hosthoặc nslookuptrên cùng một máy tính trên dòng lệnh, độ phân giải hoạt động tốt (nghĩa là nhanh và đáng tin cậy ).

Điều gì có thể gây ra điều này?

Thử nghiệm nhiều hơn: Firefox wgetpingcó cùng một vấn đề. Ping địa chỉ IP hoạt động.

HĐH: Linux (Ubuntu 13.04)

EDIT My /etc/resolv.confđọc:

nameserver 127.0.1.1
search domain.company.local

netstat báo cáo:

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      -               

vì vậy một cái gì đó đang chạy trên cổng này ( nslookupcũng báo cáo nó sử dụng 127.0.1.1như máy chủ DNS).

Không có /etc/*inetd.conf, vì vậy tôi không chắc ứng dụng nào phục vụ cổng này.

Có vẻ như dnsmasqđược sử dụng:

/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

Tất cả các tập tin cấu hình và thư mục đều trống. Kể từ khi nslookupnói nó sử dụng 127.0.1.1#53tôi đoán là nó dnsmasqhoạt động ngay cả khi không có cấu hình. Nhưng làm thế nào để biết DNS cha nào sẽ truy vấn?

EDIT2 Vô hiệu hóa dnsmasqtheo đề xuất của harrymc đã không giúp đỡ. Vì vậy, tôi đã chạy strace pingcho tôi đầu ra kỳ lạ này (chỉ là những phần thú vị):

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

Vì vậy, pingnhìn trong /etc/hostsđó có ý nghĩa. Sau đó, nó tải và mmap()s /lib/libnss_mdns4_minimal.so.2có ý nghĩa là tốt.

Nhưng sau đó nó nói chuyện với avahi!?

Điều này dẫn tôi đến bài đăng trên diễn đàn này: ping không đưa ra yêu cầu dns .

Của tôi /etc/nsswitch.confcũng chứa dòng này:

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4

Nếu tôi pinglà một địa chỉ làm việc, tôi thấy rằng quá trình cũng tải /lib/libnss_mdns4_minimal.so.2nhưng sau đó, nó thực hiện một truy vấn DNS thông qua cổng 53.

Vì vậy, dự đoán của tôi bây giờ /lib/libnss_mdns4_minimal.so.2là bằng cách nào đó nhận thấy rằng địa chỉ IP kết thúc .localvà không có .comvà sau đó [NOTFOUND=return]được kích hoạt.

Làm thế nào để tôi sửa lỗi này?


Có gì trong bạn /etc/resolv.conf?
Joseph R.

Cái nào đúng và cái nào không đúng? Tên máy chủ nên giải quyết hay không nên? Bạn đã không cho chúng tôi biết vấn đề nào trong hai vấn đề hoàn toàn khác nhau mà bạn gặp phải. (Và nếu nó cần giải quyết, giải thích như chi tiết nhiều càng tốt như thế nàotại sao nó cần giải quyết, vì điều đó có thể sẽ dẫn đến sự giải thích về lý do tại sao nó không.)
David Schwartz

... và cài đặt proxy HTTP của bạn là gì cho Chrome, Firefox và wget.
JdeBP

@DavidSchwartz: Tôi đang mong đợi giải pháp hoạt động. Những gì tôi không hiểu làm thế nào nslookuphoặc hostcó thể giải quyết tên và bất cứ điều gì khác trên hệ thống không thể.
Aaron Digulla

1
Nếu bạn không thực hiện chia sẻ kết nối với các thiết bị hoặc máy ảo khác thông qua máy tính của mình, bạn có thể tắt dnsmasq trong Trình quản lý mạng. Chỉnh sửa /etc/NetworkManager/NetworkManager.confvà nhận xét dns=dnsmasqdòng (đặt một # ở phía trước của nó) sau đó làm a sudo restart network-manager. Điều đó sẽ tắt trình giải quyết cục bộ. ( nguồn )
harrymc

Câu trả lời:


33

Như được mô tả chi tiết trong bài đăng trên blog này , bạn cần chỉnh sửa /etc/avahi/avahi-daemon.conf:

[server]
domain-name=.alocal

Điều này liên kết daemon với tên miền .alocalthay vì mặc định .local.

và khởi động lại daemon với:

sudo service avahi-daemon restart

Lưu ý từ bài viết trên blog:

Bạn có thể cần phải xóa bộ đệm DNS, mDNS và bộ giải quyết, cũng như khởi động lại trình duyệt web của bạn để xóa bộ đệm trong của chúng.

Sau đó, pingnslookupbắt đầu đồng ý.

Cảm ơn harrymc đã giúp tôi đi đúng hướng.


1
Cũng lưu ý, pingsẽ sử dụng nss, nslookupkhông. (nó sử dụng lwres và, tốt, liên kết, để nói chuyện trực tiếp với một người giải quyết)
Ricky Beam

Đối với tôi nó có ý nghĩa hơn để cấu hình nó đúng thay vì vô hiệu hóa nó cho cục bộ.
keiki

@ otakun85: Và tôi sẽ làm điều đó như thế nào?
Aaron Digulla

@AaronDigulla Bạn đã cấu hình nó và câu trả lời được bình chọn cao nhất hiện tại đã vô hiệu hóa nó cho địa phương.
keiki

2
Thật đáng kinh ngạc. Cám ơn rất nhiều. Chiến đấu với điều này trong nhiều giờ trước khi tìm thấy bài này.
fpghost

11

Sửa đổi /etc/nsswitch.conf và thay thế:

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4

bởi:

hosts:          files dns

đã làm cho tôi.


2
Điều này hoạt động với chi phí của các dịch vụ AVAHI
Aaron Digulla

8

Điều dễ làm: Chỉnh sửa /etc/default/avahi-daemon

Thay đổi dòng:

AVAHI_DAEMON_DETECT_LOCAL=1

đến

AVAHI_DAEMON_DETECT_LOCAL=0

Khởi động lại avahi-daemon, hoặc giết nó.

Tôi không thích Avahi và tôi không sử dụng bất kỳ tính năng nào của nó. Nếu bạn muốn thực sự vô hiệu hóa avahi, hãy sửa đổi /etc/init/avahi-daemon.conf, tương tự như sau:

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

2
Tôi không quan tâm nếu bạn không nên đưa ý kiến ​​"cảm ơn" vào đây, tôi chỉ muốn bày tỏ lời cảm ơn và bạn đã tiết kiệm được bao nhiêu thời gian và năng lượng cho tôi. Cảm ơn bạn rất nhiều! Tôi đang sử dụng VPN của công ty để thực hiện một số công việc khẩn cấp từ trung tâm mua sắm và không thể khiến một số trang web của chúng tôi hoạt động bất chấp mọi thứ tôi nghĩ là đã thử. Tôi đã không thể tự mình tìm ra điều này, điều đó là chắc chắn ...
thay đổi vào

7

có vẻ như địa chỉ .local không thể truy cập trong Ubuntu.

một giải pháp là chỉnh sửa /etc/nsswitch.confvà thay đổi dòng này:

hosts:          files mdns4_minimal [NOTFOUND=return] dns

bằng cách này

hosts:          files dns

Đây là loại làm việc cho tôi. Trong trường hợp của tôi, dòng máy chủ có "tập tin giải quyết [! UNAVAIL = return] mdns4_minimal [NOTFOUND = return] dns" và thay đổi nó thành "tập tin mdns4_minimal [NOTFOUND = return] dns" đã hoạt động. Cảm ơn con trỏ đi đúng hướng.
Andorbal

Đã thử các câu trả lời khác ở trên, avahi bị vô hiệu hóa (đó là một cứu trợ) và vẫn có vấn đề. Câu trả lời này đã giải quyết nó cho tôi. Cảm ơn
Adam Plocher

3

Nếu bạn không thực hiện chia sẻ kết nối với các thiết bị hoặc máy ảo khác thông qua máy tính của mình, bạn có thể tắt dnsmasq trong Trình quản lý mạng.

Chỉnh sửa /etc/NetworkManager/NetworkManager.confvà nhận xét dòng (đặt dấu # phía trước dòng):

dns=dnsmasq

Sau đó làm:

sudo restart network-manager

Điều đó sẽ tắt trình giải quyết cục bộ.

Nguồn: DNS trong Ubuntu 12.04 .


2

Vì vậy, dự đoán của tôi bây giờ là /lib/libnss_mdns4_minimal.so.2 bằng cách nào đó nhận thấy rằng địa chỉ IP kết thúc bằng .local chứ không phải với .com và sau đó [NOTFOUND = return] được kích hoạt.

Làm thế nào để tôi sửa lỗi này?

Dự đoán khá tốt, nhưng các câu trả lời khác là quá mức cần thiết. Giải pháp đơn giản là loại bỏ bit thực sự được kích hoạt, tức là loại bỏ chỉ [NOTFOUND=return] .

Loại bỏ nó có nghĩa là nếu mdns4_minimaltrả về NOTFOUND, mục tiếp theo trong danh sách trình phân giải được sử dụng. Đây là hành vi bình thường; [NOTFOUND=return]là một tối ưu hóa để thất bại nhanh hơn trên các tên chưa biết nhưng nó giả sử tất cả các .localtên đều nằm trong mDNS.


1

Tôi đã có một trường hợp thú vị với các triệu chứng tương tự (ping, mount, v.v. không hoạt động, nhưng máy chủ, đào làm việc). Kiểm tra quyền trên tệp /etc/resolv.conf . Trong trường hợp của tôi, ai đó đã thay đổi nó và tôi không có quyền đọc nó (mặc dù cat /etc/resolv.confvà chỉnh sửa tệp hoạt động tốt).

Dù sao, strace đã được hiển thị:

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

Và kết quả là, nó đã cố gắng truy vấn localhost (127.0.0.1) thay vì IP của máy chủ tên từ tệp giải quyếtvv:

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 đã không hiển thị bất kỳ lưu lượng DNS nào khi ping. Tất cả đang hoạt động sau khi sửa lỗi cho phép:

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

Một vấn đề khác có thể là các thuộc tính mở rộng của tệp hoặc bất kỳ vấn đề truy cập nào khác. Trong trường hợp đó, chỉ cần xóa tệp /etc/resolv.conf và tạo lại từ đầu.


Một vấn đề khác mà tôi có một máy chủ là tất cả các thư mục gốc đã bị mất xcờ và do đó, rất nhiều nhị phân không hoạt động đúng. Các sửa chữa là chmod +x /*.
Silex

0

Một lý do khác là định dạng của /etc/hosts. Đảm bảo không có khoảng trắng giữa IP và tên máy chủ, thay vào đó hãy sử dụng TAB. Sau khi thay đổi thành TAB, tên máy chủ có thể được giải quyết bằng ping.

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

nó có thể là một câu trả lời nhưng nó được định dạng như bình luận ...
Francisco Tapia

-1

Thiết lập avahi-daemon trên Ubuntu để bạn có thể tiếp cận tên máy chủ ubuntu.localtừ hệ điều hành máy chủ

sudo apt-get install avahi-daemon avahi-khám phá avahi-utils libnss-mdns mdns-scan


Xin lỗi, câu trả lời này không liên quan đến câu hỏi. Chúng tôi không hỏi cách cài đặt Avahi Câu hỏi là làm thế nào Avahi có thể phá vỡ tra cứu DNS sau khi được cài đặt.
Aaron Digulla
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.