![为什么我的 Linux 服务器能解析所有域名(甚至不存在的域名)](https://linux22.com/image/646911/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E7%9A%84%20Linux%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%83%BD%E8%A7%A3%E6%9E%90%E6%89%80%E6%9C%89%E5%9F%9F%E5%90%8D%EF%BC%88%E7%94%9A%E8%87%B3%E4%B8%8D%E5%AD%98%E5%9C%A8%E7%9A%84%E5%9F%9F%E5%90%8D%EF%BC%89.png)
目前,每个域名都会解析到我的主服务器primary.example.com
。例如,如果我ping randomdomain123.blah
得到:
PING primary.example.com` (1.2.3.4) 56(84) bytes of data.
但预计会出现“未找到主机”错误。
最初我以为是因为我search example.com
在我的 中有/etc/resolv.conf
。但是,删除该 ping 后randomdomain123.blah
仍解析到我的主域。重新启动服务器也没有任何效果。
我没有指定任何内容/etc/hosts
。
hostname
从集群中的另一台服务器运行可提供secondary.example.com
。
我使用 Route 53 作为 DNS 提供商,相关 DNS 似乎是:
example.com. A 1.2.3.4
primary.example.com. A 1.2.3.4
*.primary.example.com. CNAME primary.example.com
*.example.com. CNAME www.example.com
www.example.com. CNAME primary.example.com
那么这是本地网络配置错误还是某些 DNS 问题?(或两者兼而有之?)
更新:我想要/需要通配符的原因是我运行此域的 Web 应用程序,因此 customer1.example.com 等需要解析到这台机器,并且需要自动执行 - 所以我想避免在每个新客户注册后更改 DNS。
更新 2:我的/etc/resolv.conf
当前情况如下(因为我注释掉了搜索行):
### Hetzner Online AG installimage
# nameserver config
nameserver 213.133.99.99
nameserver 213.133.100.100
nameserver 213.133.98.98
nameserver 2a01:4f8:0:a102::add:9999
nameserver 2a01:4f8:0:a0a1::add:1010
nameserver 2a01:4f8:0:a111::add:9898
# search example.com
更新 3:跑步dig randomdomain123.blah +trace
可获得:
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> randomdomain123.blah +trace
;; global options: +cmd
;; Received 12 bytes from 213.133.99.99#53(213.133.99.99) in 0 ms
更新 4:我可以确认ping randomdomain123.blah.
最后一个点给出:
ping: unknown host randomdomain123.blah.
那么,这是否意味着,从这台机器上的 Java 应用程序中,我需要添加点并使用 URL 来http://randomdomain123.blah./somepage.html
生成 HostNotFoundException?
答案1
您的问题是search
中的字段/etc/resolv.conf
与您的记录相结合*
。您提到您已经尝试删除该设置。但事实证明,从 中删除它/etc/resolv.conf
并不意味着搜索功能将被关闭。
如果没有/etc/resolv.conf
设置search
,将默认使用您的主机名的域。
我不知道是否有官方的方法可以完全禁用该search
功能,但这似乎有效:
search .
或者,您可以将您的域名指向search
没有记录的域名*
,该域名可能包含一些其他记录以方便您使用。例如:
search search.example.com
然后您可以创建诸如server1.search.example.com
但不是的记录*.search.example.com
。
答案2
看起来您已经配置了通配符 DNS 记录,即所谓的全部捕获配置:*.example.com 是 www.example.com 的 CNAME,而后者又是 primary.example.com 的 CNAME,然后解析为 1.2.3.4
这不是一个非常合理的设置,另请参阅:http://en.wikipedia.org/wiki/Wildcard_DNS_record。