文/陸海 柯立新
DNS(域名系統)是互聯網的一項基礎服務,其作為將域名和IP地址相互映射的一個分布式系統,能夠使人更方便地訪問互聯網。DNS一般可分為權威DNS和遞歸查詢DNS,權威DNS提供所轄域名的解析,而查詢DNS主要是面向一般用戶進行上網地址解析。
為了使得用戶能夠獲得最優(最近)的服務器提供服務,應用的權威DNS(或CDN)會針對不同ISP下的用戶返回不同的地址。以某著名電商網站為例,其首頁加載共涉及到約30個不同的域名,且大部分域名從命名上均包含CDN字樣。假定DNS對于首頁中涉及到的域名解析結果能夠快1ms返回,30個不同域名就能夠節省30ms的時間,從而直接提高了網站的整體訪問速度。
目前CDN為最終用戶進行線路選擇的依據,大部分依賴于進行域名查詢的源地址,根據該源地址所歸屬的運營商及來源地的不同返回不同的地址。但進行域名查詢的來源地址并不能代表用戶的最終地址,即使采用了ECS(edns-client-subnet),但由于ECS對于NAT后的用戶目前無能為力,因此由CDN服務商來精確判斷用戶的來源并不總是準確的,DNS返回結果可以直接決定用戶是否可以獲得優質的網絡訪問效果。
目前網絡安全的形勢不容樂觀,互聯網上存在大量的惡意代碼及安全隱患,其中很多APT攻擊以及僵尸網絡C&C(命令和控制)連接,均不同程度利用DNS來實現。通過對DNS的解析行為進行分析與研判,是進行安全分析的一種重要手段。
校園網環境所面對的用戶數量眾多,出口多,訪問控制策略復雜多等情況。對于網絡的優化要求早已不是僅實現訪問可達,更需要保證訪問的效果和質量,設計與出口狀況相匹配的DNS系統,實現可管可控低延遲高質量的域名解析服務,是提高目前校園網優化水平的一條有效途徑。
上海教育城域網(以下簡稱城域網)是國內教育界首個100G主干城域網,自建成以后逐漸接入了上海市3000多家教育單位,不同單位由于歷史原因在接入城域網前已經接入了其他運營商或者機構,另外由于自身運維能力差異,對于終端用戶的服務水平不一樣,接入城域網后的用戶可能會由于各種原因無法正常使用城域網所提供的網絡服務。此外由于終端設備的錯誤配置會使得網絡訪問效果大打折扣;城域網目前也正在進行內容建設,例如引入CDN節點等,力求加強城域網用戶的訪問體驗,這些資源建在城域網內,也需要引導用戶去訪問。為解決上述問題,未來將在城域網內建設一批統一管理的DNS系統,實現可管、可控、可追溯的DNS服務,向最終用戶提供DNS解析。

圖1 層次化DNS系統結構
DNS系統以分層方式進行部署,將DNS的緩存與遞歸查詢分開處理,并在所有的ISP出口處分別部署專用的遞歸查詢服務器。系統結構如圖1。
在區縣教育局/區縣信息中心處部署緩存服務器,在正常情況下各區縣的緩存服務器只為本區縣用戶提供域名解析服務。緩存服務器將所有的DNS查詢請求傳遞給部署在市教委信息中心的遞歸查詢服務器進行查詢,自己并不直接進行遞歸查詢。在城域網內開啟任播(anycast)服務,所有的緩存服務器均配置相同的任播地址,用戶查詢會就近分配到最近的任播緩存服務器上,確保用戶獲得低時延的域名解析服務。而當某一區縣的DNS緩存服務器出現故障或者需要進行維護時,任播功能將能自動將用戶的訪問請求轉發到其他的任播緩存服務器上,保證用戶的服務不中斷。具體實現方式簡要介紹如下:
(1)將DNS的業務監聽地址(anycast地址)配置在DNS緩存服務器的loopback接口上,例如:
ip addr add 192.168.0.1/32 dev lo
(2)區縣信息中心路由器與DNS緩存服務器的互聯接口之間開啟動態路由協議(如OSPF)。
(3)DNS緩存服務器將anycast地址通過動態路由協議注入到區縣信息中心路由器中:

(4)DNS緩存服務器上需要開啟守護信息中心路由器將anycast地址再通過IGP發布到城域網骨干網中。
(5)DNS緩存服務器上需要開啟守護進程,定時檢查自身DNS服務是否能夠達到正常運行基線相關要求,例如DNS服務是否工作正常:

當DNS出現問題時,通過停止動態路由進程,不再向對端路由器發布anycast地址,就可以將緩存服務器自身從網絡上隔離出去。
緩存服務器將主要面向一般用戶查詢,并記錄用戶查詢日志。在保證查詢性能的同時,緩存服務器自身能夠對異常的DNS報文進行丟棄處理;能夠防范DNS緩存投毒以及能夠對DNS Flood、UDP Flood等常見攻擊進行防護。還會對于異常的DNS查詢請求進行攔截,例如限制每用戶的QPS數量,對于網外用戶的查詢拒絕服務等,例如:

緩存服務器具備EDNS0擴展功能,能夠將最終用戶的IP地址等信息打包進查詢請求,以方便上層CDN返回最優結果。
在上層遞歸查詢服務器故障的極端情況下,緩存服務器還具備緩存快照及相應解析記錄導入能力(通過帶外承載),或能夠通過人工干預進行本地解析。
為保證緩存服務器的安全性,在網絡側采用如下策略對各區縣的緩存服務器進行保護:
(1)在緩存服務器的接入路由器與網絡互聯的鏈路上均部署了ACL,只允許城域網內用戶訪問緩存服務器,禁止域外地址訪問。
(2)為保障系統在遭受大規模攻擊流量情況下仍能夠提供服務,在緩存服務節點接入路由器與網絡互聯的鏈路上部署了帶寬限速的QoS策略。QoS策略根據各區縣的日常訪問量配置,按照峰值流量2倍進行配置。
為了避免出現網絡內部用戶因為錯配DNS導致的解析結果不正確等相關問題,在各區縣網絡中心的核心處還可以通過配置控制策略等方式將用戶的域名查詢請求統一轉發到緩存服務器上,使得網絡用戶均能夠獲得正確的域名查詢結果,且不需要網絡用戶對配置進行修改,具體實現方式不再贅述。
市教委信息中心處部署DNS專門用于進行遞歸查詢操作,遞歸查詢DNS僅響應各緩存服務器的DNS查詢請求。城域網的所有域名查詢規則將會配置到遞歸查詢DNS上,包括轉發域規則、私有地址規則、CDN轉發規則、安全防護規則等。規則由策略管理中心通過帶外通道統一進行管理及下發。部分策略舉例:

策略管理中心還將對所有的緩存DNS進行管理,并進行轉發調度,根據需要為不同的緩存DNS服務器分配不同的遞歸查詢DNS。在市教委信息中心處還將配置域名安全態勢感知及事件處理中心,利用已有的日志分析工具對于用戶的DNS行為進行安全審計,阻止諸如APT攻擊、僵尸網絡CC連接、不良網站訪問等用戶行為。
為了配合CDN的優化動作,在城域網統一出口的每一個ISP出口側,均配置使用對應ISP源地址的DNS服務器,以確保對應出口CDN返回的優化結果的正確性。專用遞歸查詢DNS的部署目的是為了配合核心層的遞歸查詢DNS使用,滿足核心層遞歸查詢DNS服務的出口調度需求。出口處遞歸查詢DNS僅響應內部遞歸查詢服務器的遞歸查詢請求。
目前該系統的部分功能已經在上海市部分區縣信息中心進行了試用,用戶評價良好。