如果在 DNS 区域中添加通配符子域名条目,例如:
*.example.com. 3600 IN A <Some IP>
假设要缓存多少查询somerandomsubdomain.example.com
?经过一番研究,我发现example.com
将在各个点缓存,因此我的 DNS 服务器可以直接查询example.com
DNS 服务器以获取后续查询anotherrandom.example.com
。
但是服务器/路由器/操作系统在缓存时是否也缓存*.example.com
通配符条目,因此所有未来对其他随机子域的查询都会example.com
立即得到解析?
答案1
通配符扩展仅发生在权威名称服务器上,因此通配符记录本身永远不会被缓存。(首先,您需要手头有所有常规记录才能知道通配符实际上适用于哪些名称。)
不过,通配符扩展所产生的各种记录都有望被缓存。
例如,如果进行了查询foo.example.com. IN A
并且发现其与通配符匹配,*.example.com. 3600 IN A 192.0.2.1
则结果答案foo.example.com. 3600 IN A 192.0.2.1
可以(可能)被缓存。
答案2
如果服务器可以进行区域传输,则它们只能缓存通配符部分。只有当它们属于一个组织(或紧密合作的不同组织)时,它们才会这样做。
如果他们不使用区域传输,他们会进行正向查找(您的路由器肯定只会这样做)。在这种情况下,他们只会收到一条回复,该回复看起来与明确定义记录时完全一样,例如:
notdefined.example.com 60168 IN A <someip>
即使他们能得到这样的回报
*.example.com 60168 IN A <someip>
他们仍然必须查找 example.com 的所有其他记录,因为任何明确定义的记录都优先于通配符记录。即:
*.example.com. 3600 IN A <Some IP>
www.example.com. 3600 IN A <Some IP2>
ftp.example.com. 3600 IN A <Some IP3>