我们是一家拥有 300 个席位的小型组织,拥有混合的 BYOD 和 Active Directory 环境(Windows Server 2012 Standard、Windows 7 Enterprise),我们遇到了一个非常奇怪的问题,涉及在加入域、由公司控制的机器上解析我们组织的域名时出现非常特定范围的故障。为了进行讨论,我将使用company.com而不是我们的域名。
背景:
- Active Directory 域控制器位于 172.16.1.3
- AD/DC 计算机还运行 DHCP、DNS 和 HTTP(IIS)
- 我们的组织网站为company.com和子域名.company.com由 AD/DC 计算机上的 IIS 托管
- 我们有一个拆分 DNS 方案,其中 AD/DC 服务器用于内部 DNS 解析,但另一个异地服务器为公共查询提供 DNS 解析
- 对应的IP地址company.com和子域名.company.com是我们网络边缘防火墙使用的公共 IP 地址(位于 AD/DC DNS 服务器和异地 DNS 服务器上)
- 防火墙已正确配置为 NAT,以便将其在公共 IP 地址上收到的 HTTP 和 HTTPS 请求传递到 AD/DC 服务器的内部 IP,并反映
场景 1:
- 加入域的 Windows 7 Enterprise 计算机上的用户直接连接到我们的本地网络,本地地址为 DHCP 服务器颁发的 172.16.6.100 /16。
- DNS 服务器条目由 DHCP 提供(172.16.1.3)
- 该用户可以访问托管在 company.com 和 subdomain.company.com 上的网站
- 编辑:nslookup 已在此场景中运行,并从内部 DNS 服务器 (172.16.1.3) 正确返回正确的 DNS 记录
场景 2:
- 同一台加入域的 Windows 7 Enterprise 计算机上的同一用户回家并使用其住宅 ISP 连接到 Internet
- 客户端计算机的 IP 和 DNS 服务器条目由 DHCP 提供
- 该用户可以访问任何互联网资源,例如 google.com
- 该用户无法访问网站company.com或者子域名.company.com(返回“主机未解析”错误)
- 当此用户运行 nslookup 时company.com他们做接收 DNS 提供的正确公网 IP 地址
- 对该 IP 地址的 HTTP/HTTPS 请求成功,并且服务器正确返回网页
- 此问题存在于所有网络浏览器中
- 使用tracert company.com返回“无法解析目标系统名称”
- 使用ping company.com返回“无法找到主机 company.com”
- 在请求失败之前/期间在客户端上运行 Wireshark 时,客户端计算机不会发送任何数据包(无论是用于 DNS 解析还是初始 HTTP/ping/tracert 请求)
- 重新启动 DNS 客户端服务无法解决问题
- 停止 DNS 客户端服务无法解决问题
- 使用ipconfig /flushdns没有解决这个问题
- 使用路线/f没有解决这个问题
- 使用重置网络连接netsh int ip 重置没有解决这个问题
- 编辑:在这种情况下,nslookup 已运行,并从用户使用的网络的 DHCP 设置指定的 DNS 服务器正确返回正确的 DNS 记录
场景 3:
- 同一用户在个人(未加入域)Windows 7 Professional 计算机上可以访问以下网站:company.com和子域名.company.com当连接到我们的本地网络时
- 编辑:nslookup 已在此场景中运行,并从内部 DNS 服务器 (172.16.1.3) 正确返回正确的 DNS 记录
场景 4:
- 同一用户在个人(未加入域)Windows 7 Professional 计算机上可以访问以下网站:company.com和子域名.company.com当连接家庭网络时
- 编辑:在这种情况下,nslookup 已运行,并从用户使用的网络的 DHCP 设置指定的 DNS 服务器正确返回正确的 DNS 记录
最后说明:
这个问题似乎普遍影响到公司所有的电脑。我们为所有公司电脑使用一个通用的系统映像,该映像于 8 月刚刚加载。我一直在互联网上搜索可能的解决方案,但到目前为止一无所获——我非常感谢你们的任何建议或意见。
答案1
加入域的计算机将寻找其 DC,而不仅仅是进行基于 DNS 的查找。由于域与公共网站相同,他们将搜索 SRV 记录以告诉他们如何到达 DC 并获取域信息。由于远程网络中没有 DC,他们无法使用常规 AD 感知 Windows 部件解析此名称。
当您使用 ping 或(几乎)任何 Windows 应用程序时,它会使用完整的 Windows IP 堆栈,包括与 AD 通信的部分。而 NSLookup 实际上只是执行 DNS 查询。您已使用 Wireshark 跟踪验证了这一点,尝试访问 company.com 时,Windows 不会执行任何查找,但 nslookup 会显示正确的 DNS 查找。这就是为什么您无法通过 ping 或 Web 浏览器解析域,但 nslookup 可以正常工作的原因。
第一部分的解决方案是使用 www.company.com 在内部和外部访问网站,以便客户完全无需寻找 DC。
第二部分的解决方案比较棘手,具体取决于 subdomain.company.com 在内部和外部引用的内容。DC 是否有子域的 DNS 记录,或者这些请求是否仅发送到外部 DNS 服务器?如果它确实有 DNS 记录,那么该记录指向哪里?
答案2
我会检查 HOSTS 文件(http://en.wikipedia.org/wiki/Hosts_%28file%29#Location_in_the_file_system) 不包含您尝试访问的主机的任何条目。我认为 NSLOOKUP 工具会绕过 hosts 文件,但 Web 浏览器不会。
我还会检查您是否在 Web 浏览器中配置了代理,因为某些类型的代理也会解析 DNS。
我还会尝试在 IE(“iexplore -extoff”)或 Firefox(启动时按住 Shift 键或“firefox -safe-mode”)下以“安全模式”(即禁用所有附加组件和插件)运行浏览器。
理想情况下,如果可能的话,请尝试使用另一个网络浏览器来缩小范围,以确定是网络浏览器还是操作系统的问题。
然后,如果我仍然没有取得任何进展,我会检查哪些服务绑定到网络适配器(疯狂的防火墙有特定的规则阻碍了?)
最后,这越来越不可能了,但 NSLOOKUP 会自动将计算机或连接特定的域名附加到查询中。例如,我的路由器将域名设置为“router”,因此任何类似“matthew”的 nslookup 实际上都会在 DNS 中搜索“matthew.router”,可能是 Web 浏览器没有这样做。正如您所说,您进行了数据包捕获,这听起来不像是您的问题。但万一您在数据包捕获中错过了它,或者您的捕获环境不太正确 :-)。
这些是我想尝试的事情,希望这也能帮助你:-)。