我正在考虑使用两个不同的 DNS 主机,并且很好奇客户端系统将如何缓存 CNAME 记录。我选择这种方式的原因是,我想要使用的主域已经托管在一个 DNS 服务中,但应用程序托管在另一个服务中,该服务有自己的与服务集成的 DNS 处理功能。
具体来说,我想了解的是,如果友好网站是指向的 CNAME 记录long-ugly-url.hosted-service.com它本身托管(DNS和应用程序)在另一个IP为1.2.3.4,客户端访问友好网站缓存long-ugly-url.hosted-service.com或者1.2.3.4?我之所以问这个问题,是因为如果是前者,那么long-ugly-url.hosted-service.com记录的 TTL 可以很短,并且可以快速更改,而友好网站可以设置为更高的 TTL,但仍能快速“传播”更改。如果是后者,则两者都需要具有较短的 TTL,以便负责的客户端能够快速看到更改。
答案1
我想说两者都有。实现方式可能有所不同,但考虑到缓存的整个目的不是获取您刚才已经完成的内容,客户端获取 CNAME 和 A 记录并丢弃其中一个或另一个似乎不合逻辑。我在这里使用术语“客户端”是含糊的,因为您在问题中已经提到过,但实现方式可能会有所不同,无论我们谈论的是 DNS 解析器(例如 dig、nslookup)、应用程序 DNS 缓存(例如浏览器)、DNS 缓存服务器(例如 BIND)等。如果您想确定,您必须依赖特定客户端的文档或进行自己的测试。
在我的例子中,我在 BIND9 上进行了测试。我使用的简单测试技术是,首先刷新缓存中的所有 DNS 条目,然后进行 DNS 查询,最后转储 DNS 缓存以供调查。如下所示,CNAME 和 A 记录都已缓存。TTL 与存储在权威区域文件上的实际 TTL 不匹配,因为我是通过转发获取 DNS 的,这意味着我获取的 DNS 条目也可能来自远程 DNS 服务器缓存。
ns1 绑定 # rndc flush && dig www.bbc.co.uk +nodnssec && rndc dumpdb ;; 答案部分: www.bbc.co.uk。238 IN CNAME www.bbc.net.uk。 www.bbc.net.uk.166 IN A 212.58.246.55 www.bbc.net.uk.166 IN A 212.58.246.54 ns1 绑定 # grep www.bbc.co.uk named_dump.db www.bbc.co.uk。234 CNAME www.bbc.net.uk。 ns1 绑定 # grep -P 212.58.246.5[4,5] named_dump.db www.bbc.net.uk.166A 212.58.246.54 166 212.58.246.55
答案2
大多数类 UNIX 操作系统都不会缓存 DNS,除非系统管理员安装相关软件/包。
因此,缓存记录的类型取决于已安装的软件/包(广泛使用的 ISC-BIND 缓存 CNAME 和 A 记录)。
Microsoft Windows 也默认缓存 CNAME 和 A 记录,ipconfig /displaydns | more
命令可以显示它们。