ping
告诉我它无法解析 URL 中的某些主机名(“ping:未知主机 domain.company.local”),但是当我在命令行上使用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?
编辑2按照 harrymc 的建议禁用dnsmasq
并没有帮助。所以我运行了,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 对话!?
这让我看到了这个论坛帖子:ping 不会发出 dns 请求。
我的/etc/nsswitch.conf
也包含这一行:
hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4
如果我有ping
一个工作地址,我会看到该过程也会加载,/lib/libnss_mdns4_minimal.so.2
但随后它会通过端口 53 执行 DNS 查询。
所以我现在的猜测是,以/lib/libnss_mdns4_minimal.so.2
某种方式注意到 IP 地址以.local
而不是结尾.com
,然后[NOTFOUND=return]
触发。
我该如何解决?
答案1
答案2
修改 /etc/nsswitch.conf 并替换:
hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4
经过:
hosts: files dns
对我有用。
答案3
简单的事情:编辑/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
答案4
如果您没有通过计算机与其他设备或虚拟机进行连接共享,则可以在网络管理器中关闭 dnsmasq。
编辑/etc/NetworkManager/NetworkManager.conf
并注释掉此行(在前面加上#):
dns=dnsmasq
然后做 :
sudo restart network-manager
这将关闭本地解析器。