许多网站使用来自 Cloudflare 等 CDN 的 DNS 服务器,这些服务器通过反向代理隐藏其原始 IP。DNS 缓存服务器在这些情况下如何工作?因为许多网站可以显示使用相同的 IP 地址,Cloudflare 的,所以我认为这会导致 DNS 缓存服务的客户端/用户出现许多错误,例如 Windows 操作系统中的错误。
特别是对于 Cloudflare,您在 Cloudflare 的“控制面板”中看到的 DNS 记录表实际上并不是 Cloudflare 为用户提供的 DNS 记录。一旦您为域名启用代理,Cloudflare 的权威 DNS 服务器就会开始使用CDN 自己的IP 地址而不是您输入的 IP 地址进行回复。
使用 CDN 的公司将在世界各地设置重复的服务器。所有 CDN 服务器都知道这些服务器。
您提到的同一个 IP 地址指向一个 DNS 服务器,它是 CDN 的一部分。
此 DNS 服务器只会将 DNS 请求转发到另一个 DNS 服务器,该服务器将成为域的权威服务器。它本身可能不会给出最终答案(不是必需的),因此这将表现为通常的 DNS 服务器层次结构。这个权威服务器的选择主要受客户端IP的地理位置影响。
DNS 查询的最终答案将是服务于查询域(属于查询域)的公司 Web 服务器,该服务器被判断为“最近”。
为避免出现问题和拥塞,DNS 响应将具有较小的生存时间 (TTL),因此该过程可能会不时重复,并可能在下一次返回另一台服务器。
他们不需要知道这一点。所有 DNS 缓存,就像 DNS 本身一样,仅将域名映射到值(“A”记录)——绝不会反过来。
不,这根本不是 DNS 缓存软件所记得的。它的作用恰恰相反——DNS 缓存和整个 DNS 系统都只关心
google.com
指向1.2.3.4
,而不是地址“指向”回来。DNS 缓存中的条目看起来与权威 DNS 服务器中的条目完全相同,以域名作为查找键。(事实上,在 Windows 之外,大多数 DNS 缓存只是普通的 DNS 服务器,它们接受标准查询并回答它们。)
将多个 DNS 条目解析到同一个地址也不是什么新鲜事。(例如,即使没有 CDN,每个人都在使用 HTTP“虚拟主机”在同一服务器上托管数十或数百个不同的网站——因此数百个 DNS 名称解析到相同的服务器地址。)
通常是的,但是,当您使用诸如 Cloudflare 之类的 CDN 时,该 DNS 查询的最终结果不再是源服务器 - 它是 CDN 服务器。
特别是对于 Cloudflare,您在 Cloudflare 的“控制面板”中看到的 DNS 记录表实际上并不是 Cloudflare 为用户提供的 DNS 记录。一旦您为域名启用代理,Cloudflare 的权威 DNS 服务器就会开始使用CDN 自己的IP 地址而不是您输入的 IP 地址进行回复。
(其他 CDN 的工作方式相同,因为使用 CDN 的全部意义在于您的客户端与其通信。例如,
superuser.com
域使用 Fastly CDN,因此它始终解析为附近 Fastly 节点的 IP 地址。)因此,使用 CDN 使用短 TTL 的目的不是保护,而是负载平衡(CDN 的权威服务器目前动态响应“最佳”节点,包括负载和地理位置)。
它实际上是客户端和服务器,而不是网络。
每个 HTTP 客户端都将请求的域指定为 HTTP 请求的一部分——即 HTTP/1.1 中的“Host”标头(或 HTTP/2 中的“:authority”伪标头)。Web 服务器或反向代理会将接收到的主机值映射到相应的 <VirtualHost> 或类似配置。
(您可以在浏览器中使用“开发者工具”查看所有请求标头F12——打开“网络”选项卡开始收集数据,然后返回浏览器并按 F5 重新加载网页,然后返回“网络”部分。)
同样,TLS 客户端也将请求的域指定为 TLS ClientHello 中的“服务器名称指示”扩展,以便服务器可以发送正确的证书。
一般来说,每个协议都有自己的方式来做到这一点,并不是所有的协议都真正区分不同的域名。(例如,SSH 不向服务器提供此类信息,因为目标不是连接到“域”,而是连接到机器本身。)
但是网络(IP 层)根本不关心域(或网站)——它唯一的工作就是将数据包传送到 1.2.3.4,如果 IP 地址相同,那么目标服务器也相同. (在这种情况下,“目标服务器”是 CDN 反向代理前端。)