我在 Kali Linux 和 AIX 5.x 中看到了这种行为:
/etc/resolv.conf的内容:
domain biman.net
nameserver 192.168.1.126
#nameserver 192.168.5.1
当使用短名称(例如“tttt”)搜索主机时,第一个 DNS 查询是 tttt.biman.net。DNS 中不存在“tttt”记录。第二个查询没有域名。为什么?我该如何阻止它?
查看证据——查询:
nslookup -q=AAAA ttttt
Server: 192.168.1.126
Address: 192.168.1.126#53
** server can't find ttttt: SERVFAIL
证据---tcpdump:
14:42:56.073872 IP 192.168.1.119.58163 > 192.168.1.126.53: 58597+
AAAA? ttttt.biman.net. (33)
14:42:56.074407 IP 192.168.1.126.53 > 192.168.1.119.58163: 58597
NXDomain* 0/1/0 (105)
14:42:56.074655 IP 192.168.1.119.34699 > 192.168.1.126.53: 32815+
AAAA? ttttt. (23)
14:42:56.074903 IP 192.168.1.126.53 > 192.168.1.119.34699: 32815
ServFail 0/0/0 (23)
答案1
通常的行为自由解析对于单标签查询是:
search
将指令(或过时的指令)中列出的域附加domain
到标签并执行 DNS 查询。- 对顶级域执行 DNS 查询。
然而,至少在glibc版本 2.14 或更高版本(参见resolv.conf 手册页),第二部分可以这样抑制:
options no-tld-query
在/etc/resolv.conf
。
编辑:如果您通过以下方式解析主机名,则此解决方案有效库,更准确地说是通过libnss_dns名称服务。假设您有:
hosts: files dns
在你的/etc/nsswitch.conf文件(大多数 Linux 桌面发行版都配置了许多其他名称服务),您可以no-tld-query
使用以下命令检查选项:
getent hosts name_of_host
nslookup是一种绕过名称服务交换机并独立执行 DNS 查询的工具。如您的示例所示,此解决方案不适用于 nslookup,但适用于大多数其他程序。