使用 Windows 2008 R2 DNS:
我们有一个正向查找区:
somerealdomain.com
us-wil | A | 10.10.0.1
us-chi | A | 10.10.0.2
us-day | A | 10.10.0.3
us-sea | A | 10.10.0.4
us-sf | A | 10.10.0.5
us-ny | A | 10.10.0.6
give | A | 10.10.0.7
me | A | 10.10.0.8
test | A | 10.10.0.9
如果我NSLookup
对其中任何一个执行操作,它们显然会正确指向内部 IP。
现在,如果我希望使用我们的转发器 8.8.8.8、8.8.4.4 等提供的外部 DNS 解析任何不存在的子域,我该如何实现?比如说,我想解析 get.somerealdomain.com,它不包含在正向查找区域中,但可以在公共 DNS 服务器上解析?
我需要这个,所以如果有人搜索我们未包含在我们的正向查找区域中的子域,它将从公共 DNS 服务器出去并解析。我假设默认情况下会发生这种情况,就像我们没有为其写入记录的任何其他域一样,但是因为我们将 somrealdomain.com 作为正向查找区域,任何没有写入记录的子域都会死掉而不是询问外部域名系统。为什么?我该如何解决这个问题?
DNS 要求给定区域只有一个实例(区域可以由多个权威服务器提供服务,但只允许区域的一个实例)。您根本无法让 DNS 服务器先查询本地转发区域(即本地定义的主区域或从区域),然后在找不到匹配条目时查询另一个 DNS 服务器。您正在有效地覆盖本地服务器上 somerealdomain.com 的定义(就它而言,该区域的公共版本不存在)。
有许多可能的解决方法。如果您有权访问公共区域文件(直接或通过区域传输),则合适的脚本可以使用未在本地覆盖的公共条目回填您的本地区域。这不是微不足道的,需要一些深入的知识。
另一种方法是在您的 DNS 服务器前面放置一个过滤 DNS 代理——这种用于渗透测试的 DNS 代理可以配置为根据查询的内容(或直接伪造答案)将查询转发到不同的 DNS 服务器——这是实际上你在做什么)。
最后,您可以使用 DNS 缓存,例如 dnsmasq(与过滤 DNS 代理的原理相同)- 有关详细信息,请参阅此答案。
通常子域是从更高域指向的。您的 DNS 服务器认为它是 somerealdomain.com 的权威。当收到对 subdomain.somerealdomain.com 的请求时,它会检查自己的记录并说“那不存在。我应该知道我是父亲”。
您需要一条记录来指向您的子域的 DNS 服务器。通常这涉及将子域(或子区域)委托给另一个 DNS 服务器。我相信您在 DNS 控制台中右键单击域并选择“新委派”。也可以使用 dnscmd 命令完成。