说到智能DNS,作为一个IT人员来说并不陌生,但是一般都是第三方提供的,很少可以在本地实现,今天我们说说可以在本地实现配置智能DNS的解决方案,那就是Windows Server 2016下通过配置DNS Policy可以实现智能DNS解析,我们必须要重申一下,只有Windows Server 2016下的DNS才支持哦,Windows Server 2016已经发布很长时间了,所以今天我们对于Windows Server上DNS支持的功能我们做一下功能演示,首先介绍的是DNS Policy Geo-Location,言外之意就是通过DNS Policy里面可以基于地域进行隔流量访问,对于这个功能我们已经应用到了生产环境上,首先说说我们日常环境需求,我们公司的www站点,在中国有一台服务器,美国有一台服务器,两台服务器数据进行同步,在最初DNS中有两条记录同时指向不同的区域服务器,以前是通管局哦DNS轮询机制实现负载及跳转,有的时候中国用户会访问到美国服务器上,这样就出现了访问缓慢的现象,美国用户访问就会访问到中国的服务器,以上问题给用户体验带来很多困扰,但是在Windows server 2016里面外面可以通过配置DNS Policy实现中国用户访问中国服务器,美国用户访问美国服务器,最终的结果是不是很神奇,对于这个神奇的功能,外面今天通过以下实现呈现给大家,如有总结不对的地方欢迎大家来交流。
注:需要注意的是,DNS Policy是针对于本地的,不能在全局环境中进行同步。所以我们需要在负责DNS解析的服务器上均需要配置Policy。
环境介绍:
Hostname:DC.ixmsoft.com
Roles:DC、DNS
IP:192.168.5.20
Hostname:Web1.ixmsoft.com
Roles:Web Server
IP:192.168.6.198
Location:China
Hostname:Web2.ixmsoft.com
Roles:Web Server
IP:192.168.7.198
Location:US
我们先确认两台WEB服务器的访问内容:
首先是中国服务器
Windows Server 2016 智能DNS(一)
然后访问美国服务器:
Windows Server 2016 智能DNS(一)
两个区域的服务器准备好后,我们就可以要配置DNS Policy了,我们配置需要使用Powershell来进行配置,要实现地域隔离,首先要先创建DnsServerClientSubnet
也就是说,你要先告诉DNS,那一段子网是属于北京的客户端,哪一段子网是属于美国的客户端,你告诉了DNS之后,他才知道以后该怎么判断转发请求
我们开始创建北京及美国的子网

Add-DnsServerClientSubnet -Name "beijingsubnet" -IPv4Subnet "192.168.6.0/24"
Add-DnsServerClientSubnet -Name "ussubnet" -IPv4Subnet "192.168.7.0/24"

 智能DNS
创建完成后,我们可以查询
Get-DnsServerClientSubnet
 智能DNS
子网创建好了,我们还需要创建DnsServerZoneScope,这里是核心中的核心,我们需要在一个DNS区域里面创建出来多个逻辑的地理区域,一定要理解这个概念,例如,现在有个DNS主区域叫ixmsoft.com,我们就要在ixmsoft.com这个区域里面再划分出来逻辑地理范围,比如需要创建一个北京区域,一个美国区域,这样做了之后,就实现了同一个DNS主区域下面,包括了多个地理区域

Add-DnsServerZoneScope -ZoneName "ixmsoft.com" -Name "beijing"  
Add-DnsServerZoneScope -ZoneName "ixmsoft.com" -Name "us"

 智能DNS
创建完成后,我们也可以查询
Get-DnsServerZoneScope -ZoneName "ixmsoft.com"
 智能DNS
创建完成逻辑地理区域,主要用来包含主机记录,串起来做Policy 判断使用,例如我们创建了逻辑地理区域北京,接着我们就需要创建北京Web服务器的主机记录,在创建主机记录过程中,最主要的一步就是指定-ZoneScope,指定了这个参数之后创建出来的这个主机记录就会绑定在这个地理区域内,之后创建策略,只有策略中指定的子网范围内客户端可以访问对应的“包括地理区域的主机记录”

Add-DnsServerResourceRecord -ZoneName "ixmsoft.com" -A -Name "web" -IPv4Address "192.168.6.198" -ZoneScope "beijing"
Add-DnsServerResourceRecord -ZoneName "ixmsoft.com" -A -Name "web" -IPv4Address "192.168.7.198" -ZoneScope "us"

我们在此也需要注意:我们定义的-A -Name名称为web,所以我们用户最终是以web.ixmsoft.com来访问服务器的。
 智能DNS
创建完成后,我们可以查询该记录
Get-DnsServerResourceRecord -ZoneName "ixmsoft.com"
 智能DNS
我们上面创建的是基于ZoneScope区域的解析记录,但是我们需要注意的是,如果只有给ZoneScope区域中增加记录,ZoneScope以外没有记录的话,除了自定义的子网用户以外访问都会出现无法解析的问题,所以我们还需要在ZoneScope中增加解析记录

Add-DnsServerResourceRecord -ZoneName "ixmsoft.com" -A -Name "web" -IPv4Address "192.168.6.198"
Add-DnsServerResourceRecord -ZoneName "ixmsoft.com" -A -Name "web" -IPv4Address "192.168.7.198"

执行后,我们就会在DNS中看见刚才上面增加的两条记录
 智能DNS
以上条件配置好后,我们接下来要创建DNS查询返回策略了,也是非常重要的,
在这里我们指定客户端子网范围,eq代表等于的意思,一旦客户端子网等于已经定义好的范围,即有对应区域内的主机记录给予响应,Zone Scope参数后面有一个1,这个在之后的文章我们会多次用到,在本次场景中我们是一个完全的分流的场景,如果不完全分流,例如大连用户百分之70访问北京服务器,百分之30访问美国服务器,我们写1,代表大连客户端访问百分之百是由北京区域的主机记录给予响应

Add-DnsServerQueryResolutionPolicy -Name "beijingPolicy" -Action ALLOW -ClientSubnet "eq,beijingsubnet" -ZoneScope "beijing,1" -ZoneName "ixmsoft.com"  

Add-DnsServerQueryResolutionPolicy -Name "usPolicy" -Action ALLOW -ClientSubnet "eq,ussubnet" -ZoneScope "us,1" -ZoneName "ixmsoft.com" 

 智能DNS
创建好Policy后,我们可以查询的
Get-DnsServerQueryResolutionPolicy -ZoneName "ixmsoft.com"
 智能DNS
接着我们就可以测试了,
我们模拟北京的子网地址,然后访问的是北京的服务器
 智能DNS
我们模拟美国的子网地址,然后访问的是美国的服务器
 智能DNS
在此我们的基本配置已经完成了,我们下一节继续介绍关于Windows Server DNS的相关文章。