最近我问了一个关于路由器 DNS 缓存的问题,现在我又想问一些其他的问题:
假设 Bob 和 Alice 共享一个 LAN,该路由器具有本地 DNS 缓存。
Bob 访问一个新域名,该域名由 DNS 提供商解析,并存储在路由器的缓存中。
现在,如果 Alice 稍后访问同一个域,她是否可以使用缓存中 Bob 的早期信息?
换句话说,路由器的 DNS 缓存是在所有用户之间共享,还是仅供每个单独的用户共享?
最近我问了一个关于路由器 DNS 缓存的问题,现在我又想问一些其他的问题:
假设 Bob 和 Alice 共享一个 LAN,该路由器具有本地 DNS 缓存。
Bob 访问一个新域名,该域名由 DNS 提供商解析,并存储在路由器的缓存中。
现在,如果 Alice 稍后访问同一个域,她是否可以使用缓存中 Bob 的早期信息?
换句话说,路由器的 DNS 缓存是在所有用户之间共享,还是仅供每个单独的用户共享?
路由器和 DNS 服务器上只有一个 DNS 缓存,因此它最终在用户/客户端之间共享。
可能有例外,但我还没有见过。
DNS 服务器缓存 DNS 查询,任何在该 DNS 服务器上请求 DNS 解析的客户端都将使用 DNS 服务器的缓存。
DNS 服务器位于何处并不重要。它可以位于 Windows Server 上,也可以位于路由器上。它们的工作原理相同。
请注意,当 DNS 服务器执行 DNS 查询时,它不仅会获取该域的 IP 地址,还会获取 TTL 值(即生存时间)。
这个 TTL 值基本上会告诉 DNS 服务器这个结果在过期之前应该缓存多长时间。
因此,即使 Bob 首先请求 DNS 并获取缓存的 ipaddress,如果该条目的 TTL 仅为 1 小时,而 Alice 在 1.5 小时后请求同一域,则 TTL 已过期,因此 DNS 会首先刷新,因此 Alice 可能会获得与 Bob 不同的 ip 地址,具体取决于 DNS 的配置方式。
当然,如果缓存条目尚未过期,Alice 将获得相同的 IP 地址。第二个请求当然不会刷新缓存中的 TTL 值。假设 Bob 发出一个 TTL 为 1 小时的 DNS 请求,Alice 在 45 分钟后发出相同的请求,结果从缓存中获取。现在 Andrew 在 30 分钟后发出另一个请求,条目 TTL 已过期 15 分钟,因此 DNS 服务器执行新的互联网请求,并将新条目存储在缓存中。它可能是相同的 IP 地址,但也可能是不同的 IP 地址。
一个域可能有多个具有不同 IP 地址和短 TTL 值的 A 记录,因此 Bob 和 Alice 将获得不同的 IP 地址。
您实际上在这里问两个问题:
DNS 协议中没有任何内容可以识别特定用户,因此 DNS 服务器无法根据特定用户缓存数据。
在典型的家庭路由器配置中,缓存几乎肯定是共享的。
但是有一些不常见的选项(读取服务器必须明确配置才能执行此操作)允许 DNS 服务器根据请求所处的接口、请求客户端的 IP 以及客户端可能提供的身份验证密钥(加密签名的 DNS)提供不同的响应。
TL;DR - 由于(ACL)过滤,两个客户端可能具有不同的(活动)配置 - 一个客户端可能启用缓存,而另一个客户端可能不启用,因此在这种情况下,缓存不会在它们之间共享。