首页 > 代码库 > Windows Server 2016 DNS Policy Geo-Location 1

Windows Server 2016 DNS Policy Geo-Location 1

     随着信息技术的不断发展,人们对于IT基础架构的要求也越高,开始要求提供快速交付,批量部署,数据分析,网络虚拟化等新需求,各大厂商也针对自己的产品进行不断地完善,DNS最开始在Windows Server上面只是提供最简单的域名解析,缓存,转发等功能,后来越来越完善,到了2008时代新增了DNSSEC,单标域,名称保护等新功能,使DNS更加安全规范化,Windows Server 2016上面,DNS新增了在作者看来非常不错的功能,DNS policy,近日测试了许多里面的新功能,甚是为之惊艳,作者甚至认为这项功能将Windows Server上面的DNS提升到了“ 基本智能化 ”的程度,决定分享给大家

    在接下来几篇文章中,老王将通过搭建环境,实际操作的方式,为大家导入DNS新功能DNS policy的使用方法,使用场景,希望能为大家抛砖引玉。


  开篇第一章,作者将介绍2016 DNS policy里面基于地理位置进行隔离流量访问,我将设计一个场景,假设Contoso是一家图书公司,分别在大连和威海设有分公司,公司有一个办公网站,大连和威海的员工都需要访问,在以前是通过DNS轮询实现负载均衡,有时候经常大连的人访问到了威海的服务器,导致出现访问延迟,在Windows Server 2016里面将通过DNS地域隔离技术,实现检查到来自大连的客户端就分流到大连的服务器,威海的客户端访问就分流到威海的服务器,很神奇有没有,以前的Windows Server DNS要实现这样的功能是非常困难的,现在自身就可以实现了


实验环境介绍


16DNS:承担DNS服务器,设置在公司总部  IP地址:100.0.0.2  GW:100.0.0.1

Web01:承担大连的Web服务器,同时也承担连接总部DNS,威海客户端,大连客户端的路由器

IP地址1:80.0.0.1 

IP地址2:90.0.0.1

IP地址3:100.0.0.1 DNS 100.0.0.2

Web02:承担威海的Web服务器,假设在威海DC,IP地址:90.0.0.2 GW:90.0.0.1

dalian:模仿大连客户端 IP地址:80.0.0.100 GW:80.0.0.1 DNS : 100.0.0.2

weihai:模仿威海客户端 IP地址:90.0.0.100 GW:90.0.0.1 DNS:100.0.0.2


老王已经做好了网页,分别放在Web01和Web02上面,访问不同的服务器可以看到不同的网页内容


注:Web01虽然具备三个IP地址,但是笔者已经在IIS上面绑定了80.0.0.1,即只有输入80.0.0.1才可以访问到Web01的网站内容


开始做之前,我们先来看一下重要的新概念


  1. DnsServerClientSubnet 

  2. DnsServerZoneScope


这两个命令是之前没有的,也是要实现DNS逻辑地理范围隔离的关键


要实现地域隔离,首先要先创建DnsServerClientSubnet 

也就是说,你要先告诉DNS,那一段子网是属于大连的客户端,那一段子网是属于威海的客户端,你告诉了DNS之后,他才知道以后该怎么判断转发请求


子网创建好了,我们还需要创建DnsServerZoneScope,这里是核心中的核心,我们需要在一个DNS区域里面创建出来多个逻辑的地理区域,一定要理解这个概念,例如,现在有个DNS主区域叫eip.com,OK,我们就要在eip.com这个区域里面再划分出来逻辑地理范围,比如需要创建一个大连区域,一个威海区域,这样做了之后,就实现了同一个DNS主区域下面,包括了多个地理区域。


上一步我们创建的逻辑地理区域,主要用来包含主机记录,串起来做Policy 判断使用,例如我们创建了逻辑地理区域dalian,接着我们就需要创建大连Web服务器的主机记录,在创建主机记录过程中,最主要的一步就是指定-ZoneScope,指定了这个参数之后创建出来的这个主机记录就会绑定在这个地理区域内,之后创建策略,只有策略中指定的子网范围内客户端可以访问对应的“包括地理区域的主机记录”


调料放好了,下面该上主菜了,最关键的三步准备好了之后,我们需要创建一个policy,来把这三个东西包起来,再定义出来判断及转发条件,告诉DNS,那些客户端来了,他们是属于哪个地理区域的,这个地理区域应该由那台服务器来提供服务。


OK,思路整理好了之后我们直接来进行操作


首先,来到16dns上面,打开powershell,执行命令,创建子网范围



Add-DnsServerClientSubnet -Name "daliansubnet" -IPv4Subnet "80.0.0.0/24"

Add-DnsServerClientSubnet -Name "weihaisubnet" -IPv4Subnet "90.0.0.0/24"


详细命令参数可以参考technet,如果同一个地理位置有很多个子网,可以在IPv4Subnet里面用英文逗号隔开输入


技术分享


创建完成子网范围后再来创建逻辑地理区域,执行命令


Add-DnsServerZoneScope -ZoneName "eip.com" -Name "dalian"  

Add-DnsServerZoneScope -ZoneName "eip.com" -Name "weihai"  


可以看到,上面的子网命令是在DnsServer级别定义的,这里的逻辑地理区域划分是在现有的DNS区域中进行定义


技术分享

接下来关键的一步,添加主机记录,起到决定性作用的就是新增的ZoneScope参数,如果不加这个参数那和以前我们在界面上新增DNS记录没区别,添加好了后随机轮询,添加了这个参数之后,就可以根据定义的逻辑地理区域进行流量隔离


Add-DnsServerResourceRecord -ZoneName "eip.com" -A -Name "www" -IPv4Address "80.0.0.1" -ZoneScope "dalian"

Add-DnsServerResourceRecord -ZoneName "eip.com" -A -Name "www" -IPv4Address "90.0.0.2" -ZoneScope "weihai"

技术分享

最后我们创建DNS查询返回策略,也是重中之重,在这里我们指定客户端子网范围,eq代表等于的意思,一旦客户端子网等于已经定义好的范围,即有对应区域内的主机记录给予响应,Zone Scope参数后面有一个1,这个在之后的文章我们会多次用到,在本次场景中我们是一个完全的分流的场景,如果不完全分流,例如大连用户百分之70访问大连服务器,百分之30访问威海服务器,这里就可以定义,dalian,7;weihai3  ,我们写1,代表大连客户端访问百分之百是由大连区域的主机记录给予响应


Add-DnsServerQueryResolutionPolicy -Name "dalianPolicy" -Action ALLOW -ClientSubnet "eq,daliansubnet" -ZoneScope "dalian,1" -ZoneName "eip.com"  


Add-DnsServerQueryResolutionPolicy -Name "dalianPolicy" -Action ALLOW -ClientSubnet "eq,weihaisubnet" -ZoneScope "weihai,1" -ZoneName "eip.com"  


技术分享

登录dalian客户端,打开访问www.eip.com,可以看到是大连的服务器内容


技术分享

运行nslookup,发现只能看到大连的Web主机回应,如果在2016之前,我们创建了多个一样的DNS主机记录,是会看到所有轮询主机的,这里只看到大连的Web主机,说明我们定义的逻辑地理区域生效了。

技术分享

登录weihai客户端,打开访问www.eip.com,可以看到是威海的服务器内容

技术分享

运行nslookup,发现只能看到威海的Web主机回应

技术分享

到这里相信大家已经看懂这项功能了,作者相信这是项很实用的功能,和一些业内朋友聊天也都感觉是一项不错的技术,开发测试的环境的隔离,跨地域之间的流量分流,甚至是网络虚拟化场景下租户隔离的场景,如果使用这个新功能,是不是就不用多搭建那么多DNS Server了。


在使用过程中老王发现这项功能还是很方便,也没什么先决条件,你只需要一台2016 Server上面装DNS角色就可以了,可以是工作组或者域环境,对于客户端版本没有限制,至少目前发现2003,win7客户端都没问题。


在使用过程中老王发现三个值得注意的地方


  1. 使用命令创建的主机记录,不会出现在DNS控制台中,如果你签发完创建主机记录那条命令之后没在Console看到,不要担心,只要命令输入正确就可以,这点希望后期微软可以改善下

  2. 老王实际测试中文版2016 Server在删除策略的时候会出现bug,已经创建好的dns policy会无法删除,这点希望是我的操作失误,大家可以试下

  3. 虽然我们实现了基于地理区域的主机记录隔离,大连客户端访问大连服务器,威海客户端访问威海服务器,但是!老王亲自测试,一旦按照文中方法做了,除了大连子网客户端和威海子网客户端之外,别的子网范围客户端将无法访问这两个主机记录,因为已经绑死了


    假设,你要实现不光仅仅做到不同地理区域客户端的隔离访问,还希望主机记录在别的网段也可以访问,那你需要再执行以下命令,通过这条命令创建出来的记录,会出现在DNS管理控制台中。


Add-DnsServerResourceRecord -ZoneName "eip.com" -A -Name "www" -IPv4Address "80.0.0.1" 

Add-DnsServerResourceRecord -ZoneName "eip.com" -A -Name "www" -IPv4Address "90.0.0.2" 


这样做了之后,凡是不在大连子网范围和威海子网范围的其它客户端访问,将使用轮询的方式分别访问大连和威海的服务器

技术分享

没执行这两条命令之前,在总部DNS ,网段100.0.0.0/24 nslookup提示无法解析www.eip.com
技术分享

执行之后清理下dns缓存16dns再次执行nslookup,发现已经开始轮询

技术分享

第一篇到这里也接近尾声,由于环境有限,另外一种场景我没有演示,如果你的环境够大还可以实现,总部一台16dns,大连和威海也分别部署一台dns做区域传送,这样做了可以减轻DNS服务器的负担,帮助本地客户端更快的进行智能定位,实际使用时需要注意,大连和威海的DNS服务器,需要复制使用命令复制总部DNS的客户端子网范围,主机记录,逻辑范围,policy等数据


后续老王还将继续连载2016 dns policy系列,包括分脑,应用负载均衡,基于时间的智能DNS定位等



本文出自 “一个倔强的孤岛” 博客,请务必保留此出处http://wzde2012.blog.51cto.com/6474289/1920559

Windows Server 2016 DNS Policy Geo-Location 1