在企業中咱們可能會遇到這樣一種場景,有一個域名www.basehome.com.cn,但願公司內部的用戶訪問它時能解析到內部的服務器IP地址,而公司外部的用戶訪問它時能解析到公網上託管的服務器公網IP地址(固然前提是您公網解析的NS服務器也是您公司的這臺DNS)。web
若是是這樣的需求場景,通常IT會部署2臺DNS服務器分別服務器於內部和外部。那麼是否能夠只部署一臺DNS實現區份內部和外部的請求,而後按照設定的策略返回給來源客戶端讓它們知道各自該去訪問什麼IP嗎?答案是Windows Server 2016/2019能夠搞定。windows
簡單來講就是讓一臺DNS服務器實現相似腦裂的效果,這臺DNS部署一張內部網卡和一張外部網卡,經過感知網卡知道請求來自內部仍是外部,而後根據設定好的策略讓判斷出來的請求知道去訪問對應的服務器地址獲得想要的結果。服務器
下面是我環境的拓撲圖網絡
在沒有DNS策略的狀況下,管理員須要在單獨的Windows Server DNS服務器上分別託管這兩個區域並單獨管理它們。ide
使用DNS策略,這些區域如今能夠託管在同一DNS服務器上。測試
如何實現,那麼大體的步驟以下:網站
當DNS服務器收到來自內部網卡的請求時就查詢設定的內部區域範圍的記錄,返回解析告訴內部客戶端指向內部web01服務器3d
當DNS服務器收到來自外部網卡的請求時就查詢默認區域範圍裏的外部IP地址給予相應,返回解析告訴外部客戶端指向外部web02服務器(這與普通DNS查詢解析相同)server
第一步:建立區域範圍blog
Add-DnsServerZoneScope -ZoneName "basehome.com.cn" -Name "internal"
第二部:添加記錄到區域範圍
知識點:區域範圍是區域的惟一實例。DNS區域能夠具備多個區域範圍,每一個區域範圍包含其本身的一組DNS記錄。相同的記錄能夠存在於多個範圍中,具備不一樣的IP地址或相同的IP地址。
Add-DnsServerResourceRecord -ZoneName "basehome.com.cn" -A -Name "www" -IPv4Address "172.16.1.10" -ZoneScope "internal"
在默認DNS的basehome.com.cn裏添加記錄(沒有指定zonescope就會把記錄添加到默認區域)
在之前版本的DNS裏,咱們都會有默認的basehome.com.cn的區域,此區域的記錄在這裏將默認給外部網卡提供解析服務。
Add-DnsServerResourceRecord -ZoneName "basehome.com.cn" -A -Name "www" -IPv4Address "192.168.1.10"
第三部:建立DNS策略
以前的文章介紹了以客戶端子網做爲區分的條件,能夠識別客戶端所屬的子網,從而配置DNS策略以根據客戶端子網進行區分;但這裏我是指看DNS服務器上的網卡IP來區分響應請求的,所以我只須要針對Internal的網卡進行DNS策略設置便可,默認區域是不須要DNS策略的
Add-DnsServerQueryResolutionPolicy -Name "InternalZonePolicy" -Action ALLOW -ServerInterface "eq,172.16.1.2" -ZoneScope "internal,1" -ZoneName "basehome.com.cn"
好了,驗證一下吧:
先看看來自內部客戶端WinVista01訪問www.basehome.com.cn:
再來看來自外部客戶端WinVista02訪問www.basehome.com.cn:
到這裏需求知足了。那麼我再把需求升級一下,在這樣的環境效果中,我要追加只容許內部網卡接收的訪問請求能夠進行DNS遞歸查詢,外部網卡接收的訪問請求不容許DNS遞歸查詢,如何實現?
知識點:遞歸查詢是指當客戶端訪問www.qq.com時,服務器自己沒有該域,那麼服務器就表明客戶端去向上一級的DNS進行查詢,而後返回給客戶端。
在之前版本的Windows Server中,啓用遞歸意味着它已在整個DNS服務器上爲全部區域啓用。因爲DNS服務器也在偵聽外部查詢,所以爲內部和外部客戶端啓用了遞歸,使DNS服務器成爲一個開放的解析器。
爲了實現升級版的需求,我對Primary-DNS增長了路由器的角色和NAT網卡鏈接外部網絡
配置好路由器
這樣內部和外部的客戶端均可以遞歸查詢訪問Internet的其餘網站:
內部客戶端WinVista01:
外部客戶端WinVista02:
要實現只容許內部網卡接收的訪問請求能夠進行DNS遞歸查詢,外部網卡接收的訪問請求不容許DNS遞歸查詢
第一步:先建立DNS遞歸範圍
遞歸做用域是控制DNS服務器上的遞歸的一組設置的惟一實例。遞歸做用域包含轉發器列表,並指定是否啓用遞歸。DNS服務器能夠有許多遞歸範圍。
傳統遞歸設置和轉發器列表稱爲默認遞歸範圍。
首先禁用默認遞歸設置,而後建立內部客戶端的新遞歸範圍,啓用該範圍的遞歸。
Set-DnsServerRecursionScope -Name . -EnableRecursion $False
Add-DnsServerRecursionScope -Name "InternalClients" -EnableRecursion $True
第二部:建立DNS遞歸策略
建立DNS服務器的遞歸策略,以便爲符合特定條件的一組查詢選擇遞歸範圍,若是您的DNS服務器對某些查詢不具有權威性,則DNS服務器遞歸策略容許您控制如何解析查詢。
在個人環境中,啓用剛纔建立的新的遞歸範圍與DNS服務器的Internal網卡相關聯。
Add-DnsServerQueryResolutionPolicy -Name "InternalRecursionPolicy" -Action ALLOW -ApplyOnRecursion -RecursionScope "InternalClients" -ServerInterfaceIP "EQ,172.16.1.2"
好了,驗證測試下是否實現了需求目標:
內部客戶端WinVista01訪問www.bing.com.cn遞歸查詢沒問題:
外部客戶端WinVista02訪問www.bing.com.cn就沒法遞歸查詢解析了:
固然WinVista02雖然不能遞歸Internet查詢,但訪問DNS服務器上的www.basehome.com.cn是沒問題的:
詳細的能夠參考:https://docs.microsoft.com/en-us/windows-server/networking/dns/deploy/split-brain-dns-deployment