Windows DNS Server的DNS策略

内网LINUX主机访问DC认证时的问题

客户公司的统一认证系统是Windows AD, 域名为owl.local。在全国有十几个站点,每个站点都有至少2台域控制器(DC)。 这种结构下,Windows客户端配合正确配置的Windows AD域的站点和子网规划在使用上是没有问题的,即Windows客户端在做认证的时候,总是会去找本站点内的域控制器。

然而, 客户在上海总部有一个隔离外网的研发内网,其中全是使用sssd加域的Linux客户机。 网络策略规定该网络内的只能访问上海本地的两台DC。 尽管这些客户机配置的DNS服务器是上海的两台DC, 但是, Linux客户机在做账户认证的时候,仍然会去通过DNS查询返回的A记录, 尝试去联系外地的DC,造成登录认证过程缓慢,碰到网络不可达的DC还会失败。为了解决这个问题, 有以下几种方法:

  1. 在所有的Linux客户机的host文件中,指定owl.local指向上海本地的域服务器。 如:

    192.168.10.8 owl.local  #DC01
    192.168.20.8 owl.local  #DC02
    

​ 这个方法需要在几百台LINUX客户机上修改host文件,而且sssd在认证时并不会从host文件中的两条同名记录中做轮询,只会去使用第一条记录。

  1. 修改网络策略,让内网主机可以访问所有的DC。 这个可以解决认证失败的问题, 但上海的客户机在认证的时候的确没有什么理由去使用西安的DC做认证。而且以后新增加的DC都需要去修改网络策略,如果漏加了策略,也会引发认证失败的问题。这个也是客户历史上的作法。 最开始的时候公司只有上海和北京两个站点,就允许内网可以访问所有的4台DC。 后来增加一个站点,加了两台DC,但是忘记更新内网的防火墙策略,就会有登录失败的事情发生。
  2. 修改sssd.conf文件,指定ldap_uri, 指向指定的DC, 比如 ldap://192.168.10.8。 这个方法是的有效的,但是也得去改100多台Linux客户机的配置。

本文要介绍的是使用Windows DNS服务器提供的DNS策略来解决这个问题。 原理是指定一个子网的客户机发起AD域名查询的时候,只返回上海的两台DC的地址。 方法如下:

使用Windows DNS策略

在owl.local的中创建一个ZoneScope

此配置会被复制到所有的AD集成的DNS服务器上

这是一个小型DNS区域子集,不配合策略的情况下这个ZoneScope是无效的,配合策略,可以指定在一定条件下,查询这个子集中的记录

Add-DnsServerZoneScope -ZoneName owl.local -name Dev_Net_DC

ZoneScope中添加两条A记录

该配置会被复制到所有AD集成的DNS服务器,使用@代表主机名和区域的域名相同

Add-DnsServerResourceRecord -ZoneName owl.local -ZoneScope Dev_Net_DC -A -Name "@" -IPv4Address 192.168.20.8
Add-DnsServerResourceRecord -ZoneName owl.local -ZoneScope Dev_Net_DC -A -Name "@" -IPv4Address 192.168.10.8

# 这个命令和本试验不相关, 记录一下如果要添加NS记录的话如何添加
# Add-DnsServerResourceRecord -ZoneName "vastai.com" -ZoneScope "Dev_Net_DC" -NameServer "dc01.vastai.com" -NS -Name "@"
# Add-DnsServerResourceRecord -ZoneName "vastai.com" -ZoneScope "Dev_Net_DC" -NameServer "dc02.vastai.com" -NS -Name "@"

定义客户网段

此定义仅存在于执行该命令的DNS服务器上,此命令需要在两台DC上都执行,其中192.168.160.0/24是客户的内网网段,如果有多个内网,可以执行多次命令逐个添加。

Add-DnsServerClientSubnet -name "Dev_Net" -IPv4Subnet "192.168.160.0/24"

添加DNS策略

这个操作需要在期望查询生效的DNS服务器进行,即两台上海本地的DNS上。该策略并不会被复制到AD集成的DNS服务器上

指定当客户机的子网是特定子网时, 使用Dev_Net_DC进行查询, 排序序号为1,即第一位

Add-DnsServerQueryResolutionPolicy -name "Dev_Net_DC_Policy" `
    -ZoneName owl.local `
    -Action ALLOW `
    -ClientSubnet "EQ,Dev_Net" `
    -Fqdn "EQ,owl.local" `
    -ZoneScope "Dev_Net_DC,1" `
    -ProcessingOrder 1 

如果要禁用策略,执行

remove-DnsServerQueryResolutionPolicy -name "Dev_Net_DC_Policy"

验证

在内网的客户机上执行nslookup owl.local, 返回的结果就只有两台上海DC的地址。 在策略生效之前,是会返回全国各站点20几台DC的地址。

posted @ 2025-04-05 12:23  陈大玉  阅读(183)  评论(0)    收藏  举报