Windows 10名称parsing跳过/忽略子网

这是一个相当复杂的问题,但我会尽量让它容易理解:

我有三个子网。 我们将它们称为10.10.0.0/22,10.20.0.0/22和10.30.0.0/16。 我有两个AD域,但我不认为这是重要的。

10.30.0.x子网是我networking中大部分机器都在的地方。 10.10和10.20子网专用于服务器之间的繁忙stream量。 (存储和虚拟机迁移)

域控制器(和DNS服务器)在所有三个子网上都有接口,因此它们可以在所有三个子网上对计算机进行身份validation。 因此,我们已经在DNS服务器上启用了子网优先级,这意味着他们将尝试对DNS客户的子网进行优先sorting。 因此,例如,我从10.30子网中请求server.company.com(它也在所有三个子网上都有接口),它将返回该机器的全部三个IP地址,但是它将以10.30的顺序返回它们。 0.5,10.20.0.5,10.10.0.5。 (最后两个可能会倒过来)

在DNS中的一切似乎按预期工作。 我的工作站在10.30子网上。 但是,当我ping server.company.com,它总是解决10.20.0.5或10.10.0.5,而不是 10.30.0.5。 我运行了Wireshark捕获的DNSstream量,而DNS服务器肯定是以正确的顺序返回结果。 但是,我的客户完全忽略了10.30条目。 它始终parsing为10.20或10.10,具体取决于DNS答复中的下一个。 nslookup查询似乎总是看起来正确,但nslookup实际上并没有解决查询,它只提供了DNS服务器的答案,据我所知,这是正确的。

我正在运行Windows 10,所有可用的Windows更新。 (没有内部组件)我已经确认这至less有四个运行Windows 10的其他机器上的相同的行为,但运行Windows 10的一些其他机器正常工作。 我已经在Windows 8,7,所有最新版本的服务器和几台Linux机器上进行了testing,并且都能正确parsing。 它只能在一些Windows 10机器上出现,尽pipe我不能确定地排除它在其他地方发生的可能性。

这里有些奇怪:我可以在我的机器上编辑HOSTS文件,如果10.30条目是服务器的唯一条目,则它可以正确parsing。 但是,如果有其他select,它会select。 如果10.30条目名列第一,这并没有什么不同。

然后真的很奇怪:我可以RDP到server.company.com就好,100%的时间。 我打开一个cmd窗口,并pingtracert server.company.com,它parsing为10.10.0.5。 我键入mstsc -v:10.10.0.5并超时,所以不能在该地址到达。 (而且不应该)然而, mstsc -v:10.30.0.5mstsc -v:server.company.com实际上工作,这意味着ping似乎没有使用与Microsoft RDP客户端相同的parsing机制。 我也没有清除我的DNScaching。 实际上,当我inputipconfig /displaydns时,条目按正确顺序列出。 服务器pipe理器(RSAT)似乎可以从我的工作站pipe理服务器,但Hyper-Vpipe理器不能。 RPC似乎工作,但我有一些function奇怪的身份validation错误。 出于某种原因,一些应用程序只是完全跳过了10.30子网。

组策略中是否可以告诉Windows去某些子网的优先级? 所有子网列在Active Directory站点和服务中,我不认为我在那里做过任何事情。 (只有一个站点。)还有什么可能导致名称parsing跳过一个子网由于某种原因?

编辑:我非常感谢对Active Directory中的多宿主DC的build议,但是,这是不必要的,我不相信是在这个问题的一个因素。 Wireshark跟踪显示,DNS列表返回的顺序是正确的,本地子网是第一个入口。 但是,Windows,它看起来特别像ICMP,select忽略该条目,并使用返回的第二个。 (除非Windows使用一些其他的地址parsing方法,并且在你问之前,NetBIOS被禁用:))

如果你真的需要把你的DC复活,请按照以下步骤操作。 我从那里带走了他们。 该文档链接到旧的KB,但它是由知名博客更新的文档。

以下是configuration多宿主DC的手动步骤

  1. 确保所有的NICS只指向你的内部DNS服务器,而不是其他的,比如你的ISP的DNS服务器的IP地址。

  2. 在“networking和拨号”属性中的“高级菜单项”“高级设置”中,将内部NIC(AD所在的networking)移动到绑定顺序的顶部(列表顶部)。

  3. 禁用外部NIC注册的function。 如上所述,该过程涉及识别外部NIC的GUID号码。 以下链接将告诉你如何:

246804 – 如何启用 – 禁用Windows 2000dynamicDNS注册(每个NIC): http : //support.microsoft.com/? id=246804

  1. 禁用外部NIC上的NetBIOS。 这是通过select禁用NetBIOS在IP属性,高级,您会发现在“WINS”选项卡下。

您可能需要查看下面的文章中的第3步,以向您展示如何禁用RRAS接口上的NetBIOS(如果这是一个RRAS服务器)。

第11章 – TCP / IP上的NetBIOS http://technet.microsoft.com/zh-cn/library/bb727013.aspx

或者在registry的一个接口上启用/禁用NetBIOS:

要在registry中执行此操作,但需要确定该接口的GUID(这可能不适用于PPP接口)HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Services \ NetBT \ Parameters \ Interfaces,findNetbiosOptions设置的GUID设置为0并将其设置为2.使用WMIC:

首先,获取接口列表:wmic nicconfig获取标题,索引,TcpipNetbiosOptions

然后在下一个命令中使用“索引号”:wmic nicconfig where index = 1 call SetTcpipNetbios 2

SetTcpopNetbios选项是:

0 – 从DHCP服务器使用NetBIOS设置1 – 通过TCP / IP启用NetBIOS 2 – 禁用TCP / IP上的NetBIOS

有关wmic命令和registry项的更多信息可以在此论坛主题链接中find:

主题 – 通过TCP / IPconfigurationNetBIOS http://social.technet.microsoft.com/Forums/en-US/winservercore/thread/d18bd172-e1a0-4a61-ba52-0952a1e3cabc/

configurationTCP / IP使用WINS http://technet.microsoft.com/en-us/library/cc757386(WS.10).aspx

注意:称为“浏览器服务”的标准Windows服务提供了您在“我的网上邻居”(或旧有术语“网上邻居”)中看到的机器,工作组和域名列表。 浏览器服务依赖于NetBIOS服务。 NetBIOS服务的一个主要要求是一台机器只能有一个名称到一个IP地址。 这是一种指纹。 你不能有两个兄弟叫Darrell。 多宿主计算机本身会导致重复的名称错误,因为Windows在浏览列表(我的networking位置)中使用相同的名称,但具有不同的IP。 你只能有一个,所以产生的错误。

  1. 禁用“文件和打印服务”并禁用外部NIC上的“MS客户端服务”。 这是通过取消选中常规属性页面下的相应服务在NIC属性中完成的。 如果您需要在外部网卡上使用这些服务(这种情况不太可能),而这些服务允许其他计算机连接到您的计算机以访问计算机上的资源(共享文件夹,打印机等),则可能需要将其保持启用状态。

  2. 取消选中IP属性,高级设置,“DNS”选项卡下的“注册此连接”。

  3. 删除外部NIC IP地址,禁用Netlogon注册,并手动创build所需的logging

    一个。 在区域名称(您的DNS域名)下的DNS中,删除“LdapIpAddress”的外部NIC的IP参考。

    湾 如果这是GC,则还需要删除GC IPlogging(“GcIpAddress”)。 为此,在DNS控制台的区域名称下,您将看到_msdcs文件夹。 在_msdcs文件夹下,您将看到_gc文件夹。 在右边,您将看到引用GC地址的IP地址。 这就是所谓的GcIpAddress。 删除引用外部NIC的IP地址。

      1. To stop these two records from registering that information, use the steps provided in the links below: Private Network Interfaces on a Domain Controller Are Registered in DNS http://support.microsoft.com/?id=295328 2.. The one section of the article that disables these records is done with this registry entry: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters (Create this Multi-String Value under it): Registry value: DnsAvoidRegisterRecords Data type: REG_MULTI_SZ Values: LdapIpAddress GcIpAddress The following link provides more information on the LdapIpAddress and GcIpAddress, as well as other Netlogon Service records: Restrict the DNS SRV resource records updated by the Netlogon service[includingGC]: http://technet.microsoft.com/en-us/library/cc778029(WS.10).aspx 3. Then you will need to manually create GcIpAddress and IpAddress records in DNS with the IP addresses that you need for the DC. To create the LdapIpAddress, manually create a new host under the domain, but leave the “hostname” field blank, and provide the internal IP of the DC, which results in a record that looks like: 

    (与父母一样)A 192.168.5.200(本例使用192.168.5.200)

      4. You need to also manually create the GcIpAddress as well, if this is a GC. That would be under the _msdcs._gc SRV record under the zone. It is created in the same fashion as the LdapIpAddress mentioned above. 
  4. 在DNS控制台中,右键单击服务器名称,select属性,然后在“接口”选项卡下,强制它仅侦听内部网卡的IP地址,而不是侦听外部网卡的IP地址。

  5. 由于这也是DNS服务器,即使您告诉它不要在NIC属性中,所有NIC的IP也会注册。 看到这个向你展示如何停止这个行为(这个过程适用于Windows 2000,但也适用于Windows 2003):

275554 – 您select不注册连接的地址后,主机的logging在DNS中注册: http : //support.microsoft.com/? id=275554

  1. 禁用DNS服务器上的循环法function。 为此,请执行以下操作:(此步骤已添加2010年5月)1.单击开始,单击设置,单击pipe理工具,然后单击DNS。 2.打开DNS服务器名称的属性。

  2. 如果您还没有这样做,请configuration转发器。 您可以使用4.2.2.2和4.2.2.3,如果不确定要转发到哪个DNS,直到获得您的ISP的DNS地址。 如何设置转发器? 好问题。 根据您的操作系统,请根据您的操作系统select以下文章之一。

300202 – 如何在Windows 2000中为Internet访问configurationDNS http://support.microsoft.com/?id=300202

323380 – 如何在Windows Server 2003中configurationInternet访问DNS(如何configuration转发器): http : //support.microsoft.com/d/id?= 323380

configurationDNS服务器以使用转发器 – Windows 2008和2008 R2 http://technet.microsoft.com/en-us/library/cc754941.aspx

活动目录和NAT

我想通过一个NAT关于AD通信的这个被忽略的事实来触及。

如果要在使用必须穿越NAT的ADauthentication(Kerberos)的AD基础结构中提供计划资源,则基本不会工作。 这是由于安全的RPC通信和NAT由于encryption而不能转换通信。 如果您确实需要使其工作,则有解决scheme可以解决此问题,例如跨NAT设备的服务之间的Direct VPN或直接连接它们的其他NIC。 更多关于它的链接以及微软的采取和解决scheme:

通过NAT的Active Directory的支持边界说明http://support.microsoft.com/default.aspx?scid=kb;en-us;978772&sd=rss&spid=12925

Active Directory通信在多宿主域控制器上失败http://support.microsoft.com/kb/272294

多宿主Windows计算机上的源IP地址select

在发送stream量时,计算机如何select使用哪个适配器通常存在混淆。 本博客介绍了在多宿主计算机上为出站连接selectnetworking适配器的过程,以及如何为该连接select本地源IP地址。

多宿主Windows计算机上的源IP地址selecthttp://blogs.technet.com/b/networking/archive/2009/04/24/source-ip-address-selection-on-a-multi-homed-windows -computer.aspx

根据这篇文章Windows 10中的客户端DNS优先级

不幸的是,这有一个问题。 从今天起,在Windows 10中执行RFC,或者至less执行规则9,从根本上被打破了。 如所示,规则9将客户端IP地址与从DNS查询中检索的每个地址进行比较,标识具有最长匹配前缀的值。 此比较基于IPv4地址的IPv6转换(即使未启用IPv6),但不幸的是,不是比较IPv6地址的长度,而是比较错误地使用了IPv4地址的长度翻译的IPv6地址的一部分实际上用于比较中)。 微软的产品团队已经确认了这个错误,并且开发了一个专用修补程序, 这个修补程序应该在接下来的几周内公开发布

这是从另一篇文章临时解决scheme(直到重新启动):

 netsh int ipv6 set locality state=disabled 

(C) DNS子网优先级在Windows 10上不起作用

尝试:NETSH winsock重置目录并重新启动

好的,多宿主与此无关,因为我也对我的一些Win 10客户端也有同样的问题。 我已经走过了,试过每一个我能find或想到的解决scheme – DNS服务器设置没有循环和DNS子网prio,我已经调整了服务器和主机上的registry设置,以推动DNS子网优先on(设置正确的掩码长度,虽然我们在一个/ 24,所以它应该默认正确无论如何)。 实际上,这很常见,因为这个问题的快速谷歌将显示,并与时髦的networking设置无关 – 您可以在任何足够的子网优先级的networking上得到同样的东西,但它只是一些客户端。

这个问题绝对是100%的客户端问题。 我们只能在Win 10盒子上find问题(我们在一个阶段与Win 8有类似的事情,但是这个问题已经被清除了,Win 10只是笑了起来)。 DNS查询返回正确的答案(我已经使用Wireshark进行了确认),并且在更改为不正确的子网响应之前,客户端将在获取IP后指向正确的地址4-5秒。

目前,我正在通过盗用个人客户端上的主机文件来绕过它。 重新启动后,它将始终指向正确。 我很幸运,只有250台机器,其中只有15台机器到目前为止赢了10台机器,其中只有大约一半受到影响,所以目前是可以pipe理的。 但是,对于大型部署或移动用户来说,这不是一个可行的解决scheme。

但是,只是想让你知道,这不仅仅是你,这不是由于你不寻常的networking设置,也不值得去看DNS,因为DNS显然不会造成它。