Windows DNS服务器的子网掩码排序

对于跨多个站点部署的应用服务,会在各个站点都有服务器,并且对应不同的IP地址。我们希望每个客户端访问就近的资源。这个时候可以启用Windows DNS服务器中的子网掩码排序(子网优先)netmask ordering功能。其实Windows服务器默认是启用这个功能的,但是默认是按照C类地址划分的。只要DNS记录和客户端不在同一个C类地址内就会以轮询round robin的方式返回DNS查询记录。

由于一个站点中会有多个网段,通常服务器和客户端不会放在同一个C类网段里,这个时候就需要修改默认按C类IP返回最近的IP地址了。我的环境中,按A类划分了地址段。命令是dnscmd /config /localnetprioritynetmask 0x00ffffff。可以用dnscmd /info /localnetprioritynetmask来查询设置的值,Windows默认的是0x000000ff。

参数0x00ffffff的意思是,0对应的是网路号,1对应的是主机号。只要网络号相同就判断为和客户端的IP段是一致的,返回同网段的DNS记录对应的IP解析回到客户端。如果想改成按B类地址划分,那么参数就相应的变为0x0000ffff。如果网段划分不是标准的类别,可以手动计算。比如掩码是255.255.128.0对应的参数就是0x007fffff;掩码如果是255.255.240.0那么对应的参数就是0x00000fff。

对应的注册表键值HKLM\SYSTEM\CurrentControlSet\Services\DNS\Parameters\LocalNetPriorityNetMask

经过设置之后,发现客户端查询都生效了。但是服务自己查询却仍然是按照轮询的结果来的。似乎设置对自己并不生效。经过启用DNS调式日志,重启服务器都没有找到原因。最后发现,服务器的网卡DNS里配置的是127.0.0.1。这个是提升域控制器的时候默认自己写进去的,后来我也没把它改成服务器自己的IP。因为127.0.0.0这个段里并没有对应的DNS记录,所以就按轮询来返回查询结果了。如果你有2台域控制器,首选DNS要填对方的IP,然后备选填自己的IP,不要使用127.0.0.1这个默认设置。为了验证我的想法,在DNS里手动添加了127段的记录,并用nslookup查询。https://www.cnblogs.com/qishine/p/12768749.html



结果就能优先返回127段的地址了。如果同一个段中有多个地址,那么对于这些地址也将按轮询的方式返回。

猜你喜欢

转载自www.cnblogs.com/qishine/p/12768749.html