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 wgetvà pingcó 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?
wget.
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ể.
/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 )
/etc/resolv.conf?