Windows DNS服務器的子網掩碼排序

對於跨多個站點部署的應用服務,會在各個站點都有服務器,並且對應不同的IP地址。我們希望每個客戶端訪問就近的資源。這個時候可以啓用Windows DNS服務器中的子網掩碼排序(子網優先)netmask ordering功能。其實Windows服務器默認是啓用這個功能的,但是默認是按照C類地址劃分的。只要DNS記錄和客戶端不在同一個C類地址內就會以輪詢round robin的方式返回DNS查詢記錄。

由於一個站點中會有多個網段,通常服務器和客戶端不會放在同一個C類網段裏,這個時候就需要修改默認按C類IP返回最近的IP地址了。我的環境中,按A類劃分了地址段。命令是dnscmd /config /localnetprioritynetmask 0x00ffffff。可以用dnscmd /info /localnetprioritynetmask來查詢設置的值,Windows默認的是0x000000ff。https://blog.csdn.net/qishine/article/details/105733193

參數0x00ffffff的意思是,0對應的是網路號,1對應的是主機號。只要網絡號相同就判斷爲和客戶端的IP段是一致的,返回同網段的DNS記錄對應的IP解析回到客戶端。如果想改成按B類地址劃分,那麼參數就相應的變爲0x0000ffff。如果網段劃分不是標準的類別,可以手動計算。比如掩碼是255.255.128.0對應的參數就是0x007fffff;掩碼如果是255.255.240.0那麼對應的參數就是0x00000fff。

對應的註冊表鍵值HKLM\SYSTEM\CurrentControlSet\Services\DNS\Parameters\LocalNetPriorityNetMask

經過設置之後,發現客戶端查詢都生效了。但是服務自己查詢卻仍然是按照輪詢的結果來的。似乎設置對自己並不生效。經過啓用DNS調式日誌,重啓服務器都沒有找到原因。最後發現,服務器的網卡DNS裏配置的是127.0.0.1。這個是提升域控制器的時候默認自己寫進去的,後來我也沒把它改成服務器自己的IP。因爲127.0.0.0這個段裏並沒有對應的DNS記錄,所以就按輪詢來返回查詢結果了。如果你有2臺域控制器,首選DNS要填對方的IP,然後備選填自己的IP,不要使用127.0.0.1這個默認設置。爲了驗證我的想法,在DNS裏手動添加了127段的記錄,並用nslookup查詢。

 

結果就能優先返回127段的地址了。如果同一個段中有多個地址,那麼對於這些地址也將按輪詢的方式返回。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章