当谷歌首次发布他们的 8.8.8.8 和 8.8.4.4 DNS 服务器时,我做了一些分析,它们方式速度更快,适合我们的位置。最近的测试证实情况仍然如此。但是,经过仔细考虑,我拒绝放弃使用我们的 ISP DNS,因为查看我们的流量快照,我们的许多请求都是针对 CDN 地址的。使用中央 DNS 查找 CDN 站点可以产生有效的结果(并快速产生结果),但会使速度变慢,因为它们可能会返回不太理想的节点。
那么,我的问题是,是否可以通过某种方式区分 CDN 网络并将这些查找指向我的 ISP DNS,但将正常查找指向 Google 的 8.8.8.8 DNS。
答案1
当您进行分析时,您是否通过现有的 AD DNS 服务器进行分析 - 比较您的 ISP 和 Google 之间设置不同的 AD DNS 转发器?还是您直接分析了您的 ISP 和 Google 的 DNS?
我的意思是,如果您已经有一个本地 DNS 服务器(AD、BIND 或其他),并且您的所有客户端都在使用该本地转发 DNS 服务器 - 只要本地 DNS 服务器配置正确,它就会缓存上游结果。因此,在合理的 TTL 时间内,只需要将给定资源名称的第一个 DNS 查询转发到您的网络之外进行解析。考虑到这一点,您难道不能只使用 ISP 的 DNS 作为配置的转发服务器来解析外部结果,同时从本地化结果中受益 - 了解所有内容都将被缓存?
答案2
这只是水平分割 DNS 服务在代理 DNS 服务器上,这在简单的情况下相当简单。
- 为一个转发代理 DNS 服务器只是使用条件转发。请参阅 DNS 服务器软件手册以了解如何进行条件转发。djbdns、Microsoft 的 DNS 服务器、ISC 的 BIND、我的域名系统功能缺陷以及其他几个都可以进行条件转发。
- 为一个解决对于代理 DNS 服务器,可以使用服务器软件提供的任何委派覆盖机制。对于 djbdns,可以将文件添加到目录中
servers/
。对于 ISC 的 BIND 和 Microsoft 的 DNS 服务器,可以使用存根区域。
问题在于 CDN不是简单的案例,而你却在为自己准备永久的维护麻烦。
有时 CDN 会使用相当长的别名链。您无法知道 CDN 分发信息在链中的哪个位置进行编码,因为每个 CDN 都可以按照自己的方式进行编码。
例如:www.microsoft.com.
是 的别名toggle.www.ms.akadns.net.
是 的别名g.www.ms.akadns.net.
是 的别名lb1.www.ms.akadns.net.
映射到 IP 地址。您可以在、、、或 处65.55.12.249
执行修剪和嫁接。但如果不知道 两者,您就不知道哪个是合适的位置microsoft.com.
g.www.ms.akadns.net.
www.ms.akadns.net.
ms.akadns.net.
akadns.net.
特定于该一个 CDN和你甚至不一定知道首先。如果做错了,您就会再次遇到后端查询来自第三方 IP 地址的问题,并且 DNS 数据适用于该地址,而不适用于您的地址。
此外,Akamai 可以在十分钟后自由更改所有这些中间域名,无需通知您,以便您可以重新配置水平分割覆盖。明天再做一遍也是免费的。乘以全部您打算使用分割水平 DNS 服务的不同 CDN,并且您面临一场巨大的红皇后竞赛。
无论如何,其他的有指出,首先使用第三方、无合同、外部、广告商资助、混杂的代理 DNS 服务器并不是一个好主意。人们不会梦把代理 HTTP 服务或 SMTP 提交服务交给广告商资助、无合同的外部第三方。代理 DNS 服务稍有不同,适用相同的原理。你想要做的事情实际上是一个相当糟糕的想法。
如果您想让 LAN 的 DNS 查找性能更好,请努力做到这一点。
答案3
这是我在提出问题时就得到了明确答案的案例之一。我并不指望任何 DNS 服务器能够自动做出这种区分。我只是想手动将我们网络中一些最常请求的 CDN 定向到正确的位置。要做到这一点,我必须手动输入值,然后我也可以进行查找并将这些记录直接放入我们的 AD DNS 服务器中。条件转发器会更好,但我还没有看到 AD 中有这样做的方法。
不过,我会考虑一段时间,因为这样做有影响(例如,需要经常检查事情是否没有改变,检查是否仍然值得保留某些记录等),而且可能还有更好的方法。在我们的例子中,我们是一所小型学院,因此真正重要的主要是两个 cdn:netflix 和 facebook。按大小和点击量计算,这两个分别占我们流量的 40% 左右,并且通常具有更快的查找速度,特别是对这两个有正确的结果,可能会是一个明显的改进。