127.0.0.1
我的文件中解析了几个本地域/etc/hosts
。一段时间内一切都正常,但现在当我运行时:
nslookup test.local
其结果是:
Server: 192.168.1.3
Address: 192.168.1.3#53
** server can't find test.local: NXDOMAIN
这192.168.1.3
是我们的网络 DNS,它不应该知道我的本地域test.local
。经过几次搜索,我发现该/etc/nsswitch.conf
文件包含有关查询 DNS 源优先级的信息。但那里没有问题!这是我的:
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.
passwd: compat
group: compat
shadow: compat
hosts: files mdns4_minimal [NOTFOUND=return] dns
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: nis
那么有人知道为什么我的hosts
文件没有包含在 DNS 查找中吗?
答案1
nslookup
只做恰当的DNS 解析,与名称服务交换机您的其他应用程序使用的子系统;也就是说nslookup
忽略/etc/hosts
mDNS。
要测试这样的本地解析,请使用使用 NSS 的工具。ping <hostname>
例如。这是一个基于/etc/hosts
我的网络条目的简单演示。
$ nslookup bert
Server: 8.8.8.8
Address: 8.8.8.8#53
** server can't find bert: NXDOMAIN
$ ping bert
PING bert (10.10.0.4) 56(84) bytes of data.
64 bytes from bert (10.10.0.4): icmp_seq=1 ttl=64 time=0.352 ms
64 bytes from bert (10.10.0.4): icmp_seq=2 ttl=64 time=0.407 ms
请注意,有些 DNS 服务器和代理会考虑文件/etc/hosts
。在这些情况下,nslookup
可能会返回来自本地源的结果。
答案2
我看到的另一种常见现象是某人(通常是我)用主机名反转 IP 地址/etc/hosts
- 例如:
mysite.com 10.2.3.4
乍一看,这看起来很正常...这是我大约 50% 的时间的解决方案:
10.2.3.4 mysite.com
答案3
/etc/hosts
我猜您想从文件中获得特定主机(mysite.com)的名称解析。
可能导致此行为的另一个常见问题是,文件中可能有许多/etc/hosts
针对同一 IP 的条目,例如:
1.1.1.1 host1.domain1.com
1.1.1.1 host2.domain2.com
在某些实现中,这可能会导致名称解析交给 DNS。快速修复方法是将所有内容分组到一行中
1.1.1.1 host1.domain1.com host2.domain2.com