我有一个旧的 Ubuntu 16.04 (LTS) 安装,今天注意到,ping 和 curl 被告知(我假设是 libc 所为),任何未知主机的 IP 与本地主机的 IP 相同(例如“nslookup $(</etc/hostname)”)。
“nslookup”和“dig”正确报告“NXDOMAIN”。
在/etc/nsswitch.conf
,我有
passwd: compat
group: compat
shadow: compat
gshadow: files
hosts: files dns
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: nis
/etc/hosts
看起来像这样:
127.0.0.1 localhost.localdomain localhost
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
/etc/hostname
:host1.mydomain.net
(与实际值有差异)
看起来/etc/resolv.conf
像:
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 213.133.98.98
nameserver 213.133.99.99
nameserver 213.133.100.100
今天我完全糊涂了,当curl https://undefinedhost
打印出来的时候,
curl: (51) SSL: certificate subject name (host1.mydomain.net) does not match target host name 'undefinedhost'
只有当我看到输出时ping undefinedhost
我才开始明白似乎发生了什么:
$ ping unknownhost
PING host1.mydomain.net (138.201.175.226) 56(84) bytes of data.
64 bytes from host1.mydomain.net (138.201.175.226): icmp_seq=1 ttl=63 time=0.237 ms
最后,dig
也表现如预期:
$ dig unresolvedhost @213.133.98.98
; <<>> DiG 9.10.3-P4-Ubuntu <<>> unresolvedhost @213.133.98.98
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 28972
有人能解释一下哪里出了问题吗?
答案1
解释是存在一个隐式主机名查找域搜索列表与我在此机器所在的本地域下配置的通配符子域,例如 mydomain.net。
引用man resolv.conf
:
搜索列表一般由本地域名确定;默认情况下,它包含仅有的本地域名。
我有一个正在运行的本地绑定服务器,并且我的域已注册并处于活动状态。我的/etc/bind/local/db.mydomain.net
看起来如下:
...
@ IN SOA mydomain.net. ....
...
host1 IN A 138.201.175.226
* IN CNAME host1.mydomain.net.
....
因此,这种行为是完全正确且符合预期的。我只是感到困惑。:-)