在之前的文章中给大家介绍了基于地理位置感知和基于时间感知的DNS实现应用负载均衡,那么一般的企业是不可能只部署一台这样的DNS服务器的,一般会有辅助DNS防止单点故障,也或者说在分支机构会放一台当地的DNS服务器实现就近解析,那么传统的DNS通过复制同步即可完成,但基于感知的DNS策略复制却略有不同,感知的DNS策略在辅助DNS服务器是采用的(权威)区域传输协议AXFR和增量区域传输协议IXFR来请求和接收区域更新的,包括对主DNS服务器上的区域更新。
还是之前的环境,但我会额外增加一台辅助DNS服务器Windows Server 2019
按照之前的操作实现出来自成都网段的客户端WinVista01访问web.basehome.com.cn网站是由北京的web02服务器承担100%的流量;来自北京网段的客户端WinVista02访问web.basehome.com.cn网站是由成都的web01服务器承担100%的流量;其他网段的客户端访问web.basehome.com.cn网站是由成都的web01服务器和北京的web02服务器各自承担50%的流量:
Add-DnsServerQueryResolutionPolicy -Name "ChengduPolicy" -Action ALLOW -ClientSubnet "eq,ChengduSubnet" -ZoneScope "BeijingZoneScope,1" -ZoneName "basehome.com.cn" -ProcessingOrder 1
Add-DnsServerQueryResolutionPolicy -Name "BeijingPolicy" -Action ALLOW -ClientSubnet "eq,BeijingSubnet" -ZoneScope "ChengduZoneScope,1" -ZoneName "basehome.com.cn" -ProcessingOrder 2
Add-DnsServerQueryResolutionPolicy -Name "RestOfWorldPolicy" -Action ALLOW -FQDN "eq,*.basehome.com.cn" -ZoneScope "ChengduZoneScope,1;BeijingZoneScope,1" -ZoneName "basehome.com.cn" -ProcessingOrder 3
验证下效果:
成都站点的WinVista01客户端访问:
北京站点的WinVista02客户端访问:
接下来我将新部署一台Windows Server 2019作为辅助的DNS服务器用于感知场景的DNS策略,这台服务器我命名为Secondary-DNS
如果是工作组环境,记得在Primary-dns添加好secondary-dns的A记录或WINS或Host记录能相互解析到为前提。
继续回到secondary-dns服务器先安装DNS角色
首先需要在辅助DNS服务器上创建辅助副本域basehome.com.cn,在辅助DNS服务器上执行,有多少个辅助DNS就要更改辅助DNS服务器名执行多少次
Add-DnsServerSecondaryZone -Name "basehome.com.cn" -ZoneFile "basehome.com.cn.dns" -MasterServers 10.0.0.2 -ComputerName "secondary-dns"
接下来配置区域传输设置,允许主服务器的区域传输到指定的辅助服务器区域;区域更新通知由主服务器发送到辅助服务器,命令需要在Primary-DNS服务器上去执行:
示例:
Set-DnsServerPrimaryZone -Name "woodgrove.com" -Notify Notify -SecondaryServers "10.0.0.3,10.0.0.4" -SecureSecondaries TransferToSecureServers -ComputerName PrimaryServer
在我的环境中是执行如下:
Set-DnsServerPrimaryZone -Name "basehome.com.cn" -Notify Notify -SecondaryServers "10.0.0.3" -SecureSecondaries TransferToSecureServers -ComputerName "Primary-DNS"
接下来复制DNS客户端子网,必须是从主服务器复制DNS客户端子网(还是在Primary-DNS服务器上去执行),有多少个辅助DNS就要修改辅助DNS的服务器名执行多少次
Get-DnsServerClientSubnet -ComputerName "Primary-DNS" | Add-DnsServerClientSubnet -ComputerName "Secondary-DNS"
接下来在辅助DNS上复制区域范围,该区域范围会想主DNS服务器请求XFRs,在主DNS服务器上区域范围的任何更改,包含区域范围信息通知都会发给辅助DNS服务器。 辅助DNS服务器可以更新与增量更改其区域范围,接下来命令在辅助DNS服务器上执行,有多少个辅助DNS就要修改辅助DNS的服务器名执行多少次
Get-DnsServerZoneScope -ZoneName "basehome.com.cn" -ComputerName "Primary-DNS" | Add-DnsServerZoneScope -ZoneName "basehome.com.cn" -ComputerName "Secondary-DNS" -ErrorAction Ignore
接下来配置DNS策略,创建了DNS客户端子网以及区域范围以后,必须创建连接子网和分区的策略,以便在查询来自其中一个DNS客户端子网的查询时,查询响应从区域的正确范围返回,映射默认区域范围是不要任何DNS策略的。接下来在辅助DNS服务器上执行,有多少个辅助DNS就要到每一个辅助DNS服务器去执行
Add-DnsServerQueryResolutionPolicy -Name "ChengduPolicy" -Action ALLOW -ClientSubnet "eq,ChengduSubnet" -ZoneScope "BeijingZoneScope,1" -ZoneName "basehome.com.cn" -ProcessingOrder 1
Add-DnsServerQueryResolutionPolicy -Name "BeijingPolicy" -Action ALLOW -ClientSubnet "eq,BeijingSubnet" -ZoneScope "ChengduZoneScope,1" -ZoneName "basehome.com.cn" -ProcessingOrder 2
Add-DnsServerQueryResolutionPolicy -Name "RestOfWorldPolicy" -Action ALLOW -FQDN "eq,*.basehome.com.cn" -ZoneScope "ChengduZoneScope,1;BeijingZoneScope,1" -ZoneName "basehome.com.cn" -ProcessingOrder 3
接下来就把客户端的DNS指向全部改成Secondary-dns的服务器IP 10.0.0.3,再测试下
成都站点的WinVista01客户端访问:
北京站点的WinVista02客户端访问:
接下来我只在Primary-dns服务器的逻辑区域范围内添加一条A记录top,还是指向web01和web02服务器的web服务:
Add-DnsServerResourceRecord -ZoneName "basehome.com.cn" -A -Name "top" -IPv4Address "172.16.1.10" -ZoneScope "ChengduZoneScope"
Add-DnsServerResourceRecord -ZoneName "basehome.com.cn" -A -Name "top" -IPv4Address "192.168.1.10" -ZoneScope "BeijingZoneScope"
我到客户端访问top.basehome.com.cn验证Secondary-dns是否可以自动从Primary-dns获取到我新增的这条top的A记录并对外提供解析服务
成都站点的WinVista01客户端访问:
北京站点的WinVista02客户端访问:
成功,最后总结下:
如果要搭建基于感知场景的DNS辅助服务器,那么必须先在辅助DNS服务器上创建好副本域,接着配置区域传输设置,然后复制DNS客户端子网和复制区域范围,最后配置DNS策略(该策略要和Primary-dns的DNS策略一致,这样Primary-dns增删改的dns记录才能自动同步到secondary-dns服务器上)
详细的可以参考:https://docs.microsoft.com/en-us/windows-server/networking/dns/deploy/primary-secondary-geo-location
备注:上面链接官网写的最后一步是无法执行错误的哟(我是理解原理采用变通的笨办法解决的,所以还请大家注意):