这是 DNS 配置:
blog.example.com CNAME example.host.com
那么如果有人对子域名(例如sub.blog.example.com
)进行 DNS 查询,会发生什么情况?
该 DNS 查询是否重定向至example.host.com
?
或者有关子子域名的 DNS 查询与 CNAME 不匹配?
答案1
首先,DNS 中没有重定向。这是 HTTP 世界中定义和使用的术语,DNS 中不存在。在最好的情况下,在 CNAME 的情况下,您可以谈论别名。
DNS 中的解析算法概述如下https://datatracker.ietf.org/doc/html/rfc1034#section-4.3.2
CNAME 的行为并不像您所想的那样像“子域通配符”。
一旦CNAME
存在,下面就不存在任何东西了。因此,尝试使用“子”名称的解析器将得到权威答案,说该名称不存在,应该就此停止。如果它从根向上或向下爬升,它应该找到本身CNAME
,然后继续在那里搜索(但不是以通配符的方式)。您可能需要查看提供您似乎想要的语义的记录(查看DNAME
Wikipedia 页面CNAME
https://en.wikipedia.org/wiki/CNAME_record并查看部分中的相关行DNAME
:“但是,对 xyzzy.foo.example.com 的查找将进行 DNAME 映射并返回 xyzzy.bar.example.com 的 A 记录,即 192.0.2.24;如果 DNAME 记录是 CNAME 记录,则此请求将返回未找到的名称。”)。
或者您可以创建*.blog.example.com
通配符,可以是CNAME
或任何其他东西。请注意,在历史上,CNAME
通配符确实造成了很多混乱和错误,因此当您刚开始使用 DNS 时不要使用它(易于在区域文件中精确配置每个名称)
您现在就可以亲自尝试一下:
$ dig www.icann.org CNAME +noall +ans
www.icann.org. 57m53s IN CNAME www.vip.icann.org.
因此我们有了这个 CNAME。如果我们想尝试您的子名称案例:
$ dig test.www.icann.org CNAME +noall +auth
icann.org. 1m57s IN SOA sns.dns.icann.org. noc.dns.icann.org. (
2022051953 ; serial
10800 ; refresh (3 hours)
3600 ; retry (1 hour)
1209600 ; expire (2 weeks)
3600 ; minimum (1 hour)
)
或(默认为 A)
$ dig test.www.icann.org +noall +auth
icann.org. 2m IN SOA sns.dns.icann.org. noc.dns.icann.org. (
2022051953 ; serial
10800 ; refresh (3 hours)
3600 ; retry (1 hour)
1209600 ; expire (2 weeks)
3600 ; minimum (1 hour)
)
如果您查看状态,您将看到NXDOMAIN
这些情况(域不存在)。