如何让Windows Server DNS使用主机文件来解析特定的主机名


18

[注意:这个问题的解决方案是完美的,与标题所示的内容有些偏离。]

我遇到了一个小问题Windows Server 2003 DNS service。在我的公司中,我正在运行Microsoft DNS服务器(172.16.0.12)对公司内部网进行域名dev.nls解析(域名以。解析为IP 172.16 。。),并且还配置为DNS转发器以转发其他域名(例如* .google.com,*。sf.net)Internet real DNS servers。该内部DNS服务器从不倾向于为外部用户提供服务。

而且,我们正在公司防火墙内运行一个邮件服务器(为一个真实的 Internet域服务传入邮件@nlscan.com),可以通过以下两种方式之一进行访问:

  1. 通过172.16.0.10从Intranet内部连接到。
  2. 通过从Internet 连接到mail.nlscan.com(解析为202.101.116.9)。

注意,172.16.0.10202.101.116.9物理机不是同一台。在202一个有防火墙的机器谁做端口的端口转发25,并110以内部网络地址172.16.0.10

现在我的问题是:如果公司LAN内部的用户想要解决mail.nlscan.com,则解决为202.101.116.9。这是正确且可行的,但不是很好,因为邮件流量先进入防火墙计算机,然后反弹到172.16.0.10。希望我们internal DNS server可以截取该名称mail.nlscan.com并将其解析为172.16.0.10。因此,我希望我可以在“主机”文件中写一个条目172.16.0.12来做到这一点。但是,如何Microsoft DNS server识别此“主机”文件?

也许您建议,为什么不让Intranet用户172.16.0.10访问我的邮件服务器?我不得不说这很不方便,假设用户(员工)在笔记本电脑上工作,白天在办公室工作,晚上在家里工作。当他在家时,他不能使用172.16.0.10

nlscan.com在我们内部的内部创建区域DNS server是不可行的,因为nlscan.comdomain 的名称服务器位于我们的ISP上,并且它负责解析nlscan.com下的其他主机名和子域。

[编辑]

WesleyDavid建议的那样,我遵循简单地创建一个名为的区域并将mailserver.nlscan.com无名A记录放置在该区域中的解决方案。时间证明这很好。


+1,因为这正是我的工作。我的内部DNS解析器将mail.example.com指向192.168 ...,即使我的主DNS将mail.example.com指向其他人的Internet IP。我想听到任何不利之处。
科里(Cory J)2010年

嗨,科里,恐怕您没有弄清事实。就像joeqwerty在后面的主题中所述:主机文件由DNS客户端解析器组件而不是DNS服务器组件使用。因此,在172.16.0.12上编辑主机不会帮助Microsoft DNS服务。
Jimm Chen 2010年

Jun,您可以将答案标记为已接受,以便其他人知道解决方案是什么。很高兴为您解决了!=)
韦斯利2010年

Answers:


12

这篇文章的后半部分是错误的。根据我在网上阅读的一些内容(如果是在网上,那一定是真的!),我感到印象深刻,即Windows DNS服务器服务创建其缓存的部分任务是还将其主机文件加载到缓存及其本地区域数据。我四处搜寻,找不到确切的证据。我在自己的Server 2008 R2计算机上测试了该理论,发现没有使用hosts文件来构建DNS服务器的缓存。

但是,我相信我有一个比Massimo更优雅的解决方案。无需为整个nlscan.com区域创建一个权威区域,只需创建一个名为mailserver.nlscan.com的区域,然后在该区域中放置一个无名A记录即可。无名的A记录将具有与区域本身相同的名称,您可以为其指定所需的IP地址。nlscan.com下的所有其他域以及nlscan.com本身都将通过公共DNS进行解析。

我刚刚在自己的Server 2008 R2 DNS服务器上进行了测试,并能够通过公共DNS服务器使朋友的网站(nessus.nl)解析,但是特定的子域(blog.nessus.nl)解析为Apple.com IP地址。试试看,看看它是否适合您。

较早的错误帖子开始于:

如果我的理解是正确的(编辑:并非如此),则在Server 2003计算机中构建DNS缓存时,它将从主机文件及其区域数据中提取条目。将其放置172.16.0.10 mailserver.nlscan.com在Server 2003计算机的hosts文件中应该可以解决该问题。更改主机文件后,重新启动DNS服务。

在任何Windows计算机(特别是Server 2003 DNS计算机)上使用ipconfig / displaydns来查看主机文件条目。还请记住,负面响应会缓存在您的客户端中,因此请始终在您正在尝试的客户端上运行ipconfig / flushdns。否则,当您想知道为什么客户无法解析您刚刚输入到zone / hosts文件中的名称时,您最终将面对各种硬对象。=)

您尝试过并失败了吗?


2
Windows Server 2003的DNS将使用该hosts文件来解析名称。它将使用自己的数据,转发器或递归查询,但使用本地hosts文件。
Massimo 2010年

@Massimo,你是对的!我测试了一下,但失败了。但是,我想我采纳了您的建议并将其简化为更加优雅。告诉我你的想法。
韦斯利2010年

删除了downvote :-)
Massimo

@Massimo TY。感谢您激励我自己测试一下。我学到了新东西。总是很有趣。=)
Wesley

1
邓诺(Dunno)为什么再次感到沮丧,这似乎是解决我经常遇到的问题的巧妙解决方案,比为整个(公共)互联网区域设置阴影要简单得多。
Helvick 2010年

3

人们通常希望内部用户获得内部IP资源资源,而外部用户获得相同资源的外部IP。它被称为裂脑DNS。您有一台面向Internet的DNS服务器,另一台面向本地用户的内部DNS服务器。内部用户在您的网络上使用DHCP,并且您要在您的DHCP服务器上发布内部DNS服务器。当您的用户不在办公室时,他们的DHCP服务器会将他们分配给仅了解外部区域的DNS服务器。

您似乎想在不实际在内部托管区域的情况下使用裂脑DNS。您建议内部托管区域是有问题的,因为您不希望用户在家中工作时获取内部IP,但这没有意义,因为用户在家中时会从其他DHCP服务器获取IP。不会宣传您的内部DNS服务器。它将宣传他们的ISP的DNS服务器,该服务器只会知道您的外部区域,因此只会为他们提供外部IP地址。

最后,我认为要求DNS服务器提供来自DNS服务器上主机文件中的记录的服务不会成功。DNS服务器通过其区域文件提供记录。该DNS服务器上的本地主机文件将条目传播到本地客户端解析缓存中,该缓存仅适用于该计算机上的查找。DNS服务器不提供这些条目,这是一种不同的机制。

阅读有关裂脑DNS的信息-这是处理这种情况的正常方法。


“但是那没有道理”-抱歉,您误会我了。目前,我打算让公司员工在家中将mail.nlscan.com正确解析为202.101.116.9,但不希望他们在家中解析somehomt.dev.nls(除非我设置了VPN服务器)。并且感谢您指出裂脑DNS。由于我只想对公司内部网中的mail.nlscan.com这个名称进行调整,因此设置裂脑DNS可能不太方便。
Jimm Chen 2010年

2

韦斯:我不确定是谁来找你,但我想澄清一下主机文件的使用:主机文件由DNS客户端解析器组件而不是DNS服务器组件使用。当DNS服务器充当DNS客户端时,DNS服务器上的hosts文件中的条目将由DNS服务器使用。例如,在我的W2K8 DNS服务器的主机文件中的条目如下:

1.1.1.1 test.test.com

已加载到DNS服务器的DNS客户端缓存(而不是服务器缓存)中。如果从我的DNS服务器ping test.test.com,它将按预期返回1.1.1.1。如果随后在DNS服务器上运行nslookup并要求其提供test.test.com,则它将返回为test.test.com注册的正确公共IP地址,因为DNS服务器上的DNS客户端组件现在正在向DNS服务器组件请求解析(就像其他任何DNS客户端一样)。这是一个令人困惑的想法,但是DNS服务器也是DNS客户端,当调用DNS客户端组件时,它通过查看其自己的DNS客户端缓存(包括所有从主机文件加载。仅当DNS客户端组件使用DNS服务器组件时(通过查询其中配置的DNS服务器),

任何查询DNS服务器的DNS客户端都将始终获得“真实”答案,而不是主机条目,因为DNS服务器的DNS客户端缓存由服务器本身(作为DNS客户端)而非DNS服务器组件使用。


您的测试和结果完全反映了我今天下午的任务。出于某种原因,我认为我已经读过DNS服务器服务还使用hosts文件来为其缓存提供种子,而不仅仅是解析器。只需致电我们Savage和Hyneman!=)
Wesley

野蛮人和海尼曼,太棒了!但是谁是谁?请不要告诉我,我必须长出海象胡子并开始戴贝雷帽。;)
joeqwerty 2010年

1

据我所知,没有办法让Windows DNS使用该hosts文件来处理名称解析;但这不是必需的。

您可以在内部DNS服务器上安全地创建与公共Internet区域同名的区域;将会发生的是,您的服务器将使用自己的数据处理该区域中的名称请求,而不是将这些请求转发到该区域的权威名称服务器;这有时称为“阴影”,因为它使内部客户端无法使用“真实”公共区域,而是使用“伪造”数据进行回答。

您应该注意的是,应该在内部区域中填充所有需要的名称,甚至在需要的地方使用公共IP地址。否则,内部客户将无法解析这些名称。

假设您的公共区域如下所示:

www.nlscan.com    202.101.116.8
mail.nlscan.com   202.101.116.9

您希望内部客户端将mail.nlscan.com解析为172.16.0.10。没关系,因此您可以在内部DNS服务器上创建一个“ nlscan.com”区域,并将“ mail.nlscan.com-> 172.16.0.10”放入其中。
但是现在您的内部客户无法解析“ www.nlscan.com”,因为服务器认为该区域是该区域的权威,因此它不会回答查询(因为它不知道该主机),但是它也可以不会转发给任何人。
为了解决这个问题,您需要在内部区域中也放置“ www.nlscan.com”。如果您希望客户以这种方式访问​​它,则可以指向其真实的公共IP地址,或者如果您使用“ www”,则可以使用与“ mail.nlscan.com”相同的重定向。也被防火墙转发到某些内部服务器。
相同的原则适用于区域中的任何名称。

此设置不会对外部客户端或网络之外的任何用户产生任何影响,因为内部的“阴影”区域永远不会从Internet上看到。


我认为您不需要为整个nlscan.com域设置一个权威区域。我认为您可以创建一个子域:mailserver.nlscan.com,然后创建一个无名A记录。有关更多详细信息,请参见我的帖子。
韦斯利2010年

是的,那行得通;并且实际上会更简单。。。如果您只需要重定向单个主机;如果您需要重定向其中一些,则最好使用完整区域。
Massimo 2010年

将nlscan.com添加到DNS服务器中的条件转发器文件夹中

1

不用管主机文件,只需在DNS mail.domain.com中添加一个新区域,然后在该区域中添加一个主机。将名称保留为空白(它将自动使用区域名称),然后输入本地邮件服务器的IP地址;-)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.