標籤:負載平衡 dns policy windows server2016
隨著資訊技術的不斷髮展,人們對於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的網站內容
開始做之前,我們先來看一下重要的新概念
DnsServerClientSubnet
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裡面用英文逗號隔開輸入
650) this.width=650;" src="https://s5.51cto.com/wyfs02/M02/92/CB/wKiom1kC-FHRIYMbAACd4vahWxo235.jpg" title="2017-04-28_160519.jpg" alt="wKiom1kC-FHRIYMbAACd4vahWxo235.jpg" />
建立完成子網範圍後再來建立邏輯地理地區,執行命令
Add-DnsServerZoneScope -ZoneName "eip.com" -Name "dalian"
Add-DnsServerZoneScope -ZoneName "eip.com" -Name "weihai"
可以看到,上面的子網命令是在DnsServer層級定義的,這裡的邏輯地理地區劃分是在現有的DNS地區中進行定義
650) this.width=650;" src="https://s1.51cto.com/wyfs02/M01/92/C9/wKioL1kC-X6w2hz2AADSjGcUG98530.jpg" title="2017-04-28_161202.jpg" alt="wKioL1kC-X6w2hz2AADSjGcUG98530.jpg" />
接下來關鍵的一步,添加主機記錄,起到決定性作用的就是新增的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"
650) this.width=650;" src="https://s4.51cto.com/wyfs02/M01/92/CB/wKiom1kC-sXy3m4CAAFCRcYj8BU908.jpg" title="2017-04-28_161721.jpg" alt="wKiom1kC-sXy3m4CAAFCRcYj8BU908.jpg" />
最後我們建立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"
650) this.width=650;" src="https://s5.51cto.com/wyfs02/M01/92/CA/wKioL1kC_NGDV5T1AACu8Cxr-Zw715.jpg" title="2017-04-28_162641.jpg" alt="wKioL1kC_NGDV5T1AACu8Cxr-Zw715.jpg" />
登入dalian用戶端,開啟訪問www.eip.com,可以看到是大連的伺服器內容
650) this.width=650;" src="https://s1.51cto.com/wyfs02/M02/92/CC/wKiom1kC_seztttwAAHo5TpO1BI726.jpg" style="float:none;" title="2017-04-28_163257.jpg" alt="wKiom1kC_seztttwAAHo5TpO1BI726.jpg" />
運行nslookup,發現只能看到大連的Web主機回應,如果在2016之前,我們建立了多個一樣的DNS主機記錄,是會看到所有輪詢主機的,這裡只看到大連的Web主機,說明我們定義的邏輯地理地區生效了。
650) this.width=650;" src="https://s4.51cto.com/wyfs02/M02/92/CA/wKioL1kC_sjw41FqAAFFTDDfpEo434.jpg" style="float:none;" title="2017-04-28_163502.jpg" alt="wKioL1kC_sjw41FqAAFFTDDfpEo434.jpg" />
登入weihai用戶端,開啟訪問www.eip.com,可以看到是威海的伺服器內容
650) this.width=650;" src="https://s2.51cto.com/wyfs02/M00/92/CB/wKioL1kC_8SjyRgUAAHohD8oUzg085.jpg" style="float:none;" title="2017-04-28_163845.jpg" alt="wKioL1kC_8SjyRgUAAHohD8oUzg085.jpg" />
運行nslookup,發現只能看到威海的Web主機回應
650) this.width=650;" src="https://s1.51cto.com/wyfs02/M01/92/CC/wKiom1kC_8XA0cYqAAGtrG4PyKU849.jpg" style="float:none;" title="2017-04-28_163913.jpg" alt="wKiom1kC_8XA0cYqAAGtrG4PyKU849.jpg" />
到這裡相信大家已經看懂這項功能了,作者相信這是項很實用的功能,和一些業內朋友聊天也都感覺是一項不錯的技術,開發測試的環境的隔離,跨地區之間的流量分流,甚至是網路虛擬化情境下租戶隔離的情境,如果使用這個新功能,是不是就不用多搭建那麼多DNS Server了。
在使用過程中老王發現這項功能還是很方便,也沒什麼先決條件,你只需要一台2016 Server上面裝DNS角色就可以了,可以是工作群組或者域環境,對於用戶端版本沒有限制,至少目前發現2003,win7用戶端都沒問題。
在使用過程中老王發現三個值得注意的地方
使用命令建立的主機記錄,不會出現在DNS控制台中,如果你簽發完建立主機記錄那條命令之後沒在Console看到,不要擔心,只要命令輸入正確就可以,這點希望後期微軟可以改善下
老王實際測試中文版2016 Server在刪除策略的時候會出現bug,已經建立好的dns policy會無法刪除,這點希望是我的操作失誤,大家可以試下
雖然我們實現了基於地理地區的主機記錄隔離,大連用戶端訪問大連伺服器,威海用戶端訪問威海伺服器,但是!老王親自測試,一旦按照文中方法做了,除了大連子網用戶端和威海子網用戶端之外,別的子網範圍用戶端將無法訪問這兩個主機記錄,因為已經綁死了
假設,你要實現不光僅僅做到不同地理地區用戶端的隔離訪問,還希望主機記錄在別的網段也可以訪問,那你需要再執行以下命令,通過這條命令建立出來的記錄,會出現在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"
這樣做了之後,凡是不在大連子網範圍和威海子網範圍的其它用戶端訪問,將使用輪詢的方式分別訪問大連和威海的伺服器
650) this.width=650;" src="https://s1.51cto.com/wyfs02/M01/92/CD/wKiom1kDBMfBZF9mAABbrw7f3KM980.jpg" title="2017-04-28_165403.jpg" alt="wKiom1kDBMfBZF9mAABbrw7f3KM980.jpg" />
沒執行這兩條命令之前,在總部DNS ,網段100.0.0.0/24 nslookup提示無法解析www.eip.com
650) this.width=650;" src="https://s5.51cto.com/wyfs02/M02/92/CD/wKiom1kDBQGhRF8QAAAlrDNeVUE547.jpg" title="2017-04-28_165351.jpg" alt="wKiom1kDBQGhRF8QAAAlrDNeVUE547.jpg" />
執行之後清理下dns緩衝16dns再次執行nslookup,發現已經開始輪詢
650) this.width=650;" src="https://s1.51cto.com/wyfs02/M01/92/CD/wKiom1kDBT-gQ6QEAACNGi8VIp0142.jpg" title="2017-04-28_170031.jpg" alt="wKiom1kDBT-gQ6QEAACNGi8VIp0142.jpg" />
第一篇到這裡也接近尾聲,由於環境有限,另外一種情境我沒有示範,如果你的環境夠大還可以實現,總部一台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