宗序梅 劉懷彥 巫俊峰 黃鐘 王濟晟 施益峰 唐凱
中國移動通信集團江蘇分公司
DNS是互聯網世界的資源導航系統,ICP(Internet Content Provider、內容提供商)內容資源、CDN(Content Delivery Network,內容分發網絡)網絡加速都依賴于DNS的正確調度才能將用戶流量引導到最合適的資源節點。運營商通常以省為單位部署DNS,代理用戶請求向權威DNS發起查詢并獲取結果,這個原因導致了現網DNS的調度精度只能局限到省。隨著CDN網絡加速市場的激烈競爭和高密度視頻業務的蓬勃發展,以省為單位的DNS調度顆粒度已難以適應互聯網業務精細化運營管理要求。如何能讓DNS具有一次性調度到地市精度的能力,讓互聯網內容更加貼近用戶,是對運營商內容資源調度能力的巨大挑戰。
域名解析系統從職能上看,可分為權威服務節點和遞歸服務節點。
權威服務節點一般由ICP或CDN服務提供商負責維護,權威服務器擁有某個區的域名信息,并為該區提供域名解析的服務,通常面向的不是終端用戶。
遞歸服務節點則相反,它不針對某個區提供域名解析服務,而是直接面向終端用戶,為終端用戶提供遞歸的域名解析服務。一般由網絡運營商、互聯網服務提供商ISP架設,服務于自己的用戶,有時被稱為Local DNS(簡稱LDNS)。遞歸服務節點內部又分為緩存查詢模塊和遞歸解析模塊,鑒于提高性能和安全考慮,LDNS的緩存服務器與遞歸服務器通常分開設置。
當用戶向LDNS發起域名查詢請求時,首先由DNS緩存服務器接收用戶的查詢請求,如果存在緩存記錄,則直接返回用戶查詢結果;如果不存在緩存記錄,交由DNS遞歸服務器處理;DNS遞歸服務器向外界的根DNS發起迭代查詢,依次循環直到從權威服務器獲取解析結果并返回給DNS緩存服務器。
權威服務器是根據收到的DNS查詢請求中的來源地址來識別用戶網絡拓撲位置,實際上權威服務器收到的DNS查詢請求中的來源地址并不是原始用戶的地址,而是用戶使用的LDNS的遞歸服務器地址。由于運營商LDNS通常以省或區域為單位集中部署,導致DNS調度精度最多只能區分到省,不能進一步精確到市。
互聯網業務的復雜化和多樣化不會因DNS的先天不足而停滯,為了滿足精細調度的需求,現網只能通過HTTP302重定向的二次調度來補充實現,但HTTP重定向存在種種問題:增加了調度次數和用戶時延;HTTP重定向服務器自身容易成為性能瓶頸;最嚴重的缺陷是只支持基于HTTP的協議,而無法調度其它應用層協議。
為了完善DNS功能,RFC2671 中提出了一種擴展DNS機制Extension Mechanisms for DNS (EDNS0),它擴展了原有DNS協議的數據包長度和字段內容,EDNS0協議支持在RR中使用TYPE=41的RDDATA存放網絡信息。
在此基礎上,谷歌等公司提出了DNS擴展協議EDNS Client Subnet(簡稱ECS),可在DNS報文的擴展報頭中增加一種新的選項,用來攜帶發起DNS請求的原始用戶的地址,這個DNS選項內容可以被中間遞歸服務器接力傳遞到權威服務器,權威服務器由此獲得原始用戶的地址,進而根據用戶地址準確識別該用戶的網絡拓撲位置。圖1展示了EDNS Client Subnet的報文格式。

圖1 EDNS Client Subnet報文格式圖
2016年5月公布的RFC7871描述了ECS的技術原理,定義了如下主要術語
客戶端(Client):末端解析器、轉發解析器或者遞歸解析器之一。遞歸解析器或者轉發解析器的客戶端。
末端解析器(Stub Resolver): 在客戶端的一個簡單DNS協議實現。作為轉發解析器或遞歸解析器的客戶端。
權威服務器(Authoritative Nameserver):一個或多個DNS區的權威名字服務器。 權威服務器一般不會直接和末端解析器或終端用戶通信,而是和遞歸解析器通信。
遞歸解析器(Recursive Resolver):沿著域授權鏈為客戶端進行域名解析的名字服務器。遞歸解析器經常使用緩存來加快對客戶端查詢的應答速度。
轉發解析器(Forwarding Resolver):不自己進行迭代解析,而是將請求轉發給其他遞歸解析器進行迭代解析的名字服務器。
在實際運用中,LOCAL DNS內部的緩存服務器承擔上述轉發解析器功能,遞歸服務器承擔遞歸解析器功能。
末端解析器向轉發解析器發送DNS查詢請求,末端解析器一般不需要支持ECS。
如果轉發解析器支持ECS功能,轉發末端解析器的查詢請求給遞歸解析器,在轉發請求報文中加入ECS信息。ECS信息包含2個字段描述末端解析器的網絡信息,字段1是末端解析器地址前綴長度(SOURCE PREFIX-LENGTH),字段2是末端解析器地址前綴(ADDRESS)。
如果遞歸解析器支持ECS功能,遞歸解析器進行迭代解析,在迭代解析的請求報文中加入轉發解析器請求中的ECS信息并最終發送給所查詢域名的權威服務器。
如果權威服務器支持ECS功能,權威服務器取出遞歸解析器請求報文中的ECS信息并由此獲得原始用戶的地址信息,進而根據該地址信息準確識別該用戶的網絡拓撲位置,然后計算出該用戶優化的解析地址。權威服務器還同時計算出能夠使用該解析地址的最短用戶源地址段前綴長度SCOPE PREFIXLENGTH。權威服務器構造應答報文,報文包含了優化的解析地址和請求中ECS信息,再加上SCOPE PREFIX-LENGTH緩存生效地址段前綴,返回給遞歸解析器。
遞歸解析器接收應答報文后需要進行緩存。傳統DNS緩存按照<name,class,type>三元組唯一索引,對于支持ECS的中間服務器進行緩存時需要加入緩存生效地址段前綴這個新的維度。遞歸解析器緩存后將應答返回轉發解析器。
轉發解析器和遞歸解析器實現相同的緩存算法,然后轉發解析器將應答返回末端解析器,但是去除應答報文中的ECS信息。
末端解析器最終收到優化的解析結果,但是不需要感知任何ECS信息。
另外一個末端解析器查詢相同域名,如果源地址被前面的緩存生效地址段包含在內,轉發解析器查詢緩存內容匹配,如果緩存沒有過期,可以直接使用緩存應答。但是如果末端解析器的源地址沒有被前面的緩存生效地址段包含在內,則需要將前面的ECS遞歸流程重新完整執行一遍。
EDNS Client Subnet僅描述了DNS攜帶原始用戶IP地址的技術原理,并沒有給出技術落地的實施方案,導致運營商LOCAL DNS在部署ECS功能時面臨多種現實問題。
(1)緩存條目膨脹
按照ECS協議,權威服務器通過應答報文中的ECS信息指定該應答生效的用戶源地址段,每個應答報文只能含有一個緩存生效地址段。對于一個省級ISP,匯聚后的用戶IPv4地址條目數接近百條,拆分到各個地市后的路由條目數可能多達數百條,這樣同一個域名在DNS緩存中的條目數量大量膨脹。
(2)遞歸開銷巨大,容易遭受DDoS攻擊
根據ECS遞歸算法,來自不同用戶地址段的同一個域名查詢請求都需要進行遞歸查詢,帶動緩存、遞歸、權威資源消耗大幅上升。DDoS攻擊者可以通過變化域名前綴及變化ECS地址段兩個維度對DNS系統發起DDoS攻擊,提升了DNS系統防御DDoS攻擊的難度。
(3)私網調度失準
目前中國ISP普遍存在IPv4地址不足,大量使用私有地址+NAT的用戶地址分配策略,可能會讓用戶私有地址直接訪問LDNS。按照ECS規范,權威服務器如果在ECS地址中收到私有地址,會使用遞歸解析器源地址返回應答。
(4)ISP地址調整時,權威DNS同步更新難
在ECS協議中,根據原始用戶地址返回解析地址的策略是由權威服務器控制并通過緩存機制傳導到遞歸解析器和轉發解析器并影響全網,域名調度權完全受控于ICP或CDN方。
終端用戶的網絡地址及網絡拓撲位置是由ISP控制及變更,ISP比ICP更準確、更及時的了解用戶的網絡地址和網絡拓撲屬性,不過在ECS協議中并沒有機制能夠讓ISP將用戶網絡變更信息同步給權威服務器。
ECS核心思想是通過在DNS報文中攜帶原始請求者IP地址信息,使得權威服務器能夠精細調度,但ECS協議提出者明顯站在ICP或CDN一方考慮問題,忽視了網絡運營商、ISP另一方的利益訴求。站在ISP角度,讓DNS具有更為精細的業務調度能力固然是理想目標,但爭取調度話語權,降低LDNS資源消耗和安全風險,同樣是ISP必須考慮的核心因素。只有ICP/CDN與ISP共同參與,雙方在ECS協議基礎上對部署方案做改進優化,才能實現互利共贏。
ISP可根據業務模型,合理規劃分區(調度單元)將用戶歸類,每個分區里包含多條網絡拓撲位置相同的地址段,每個分區使用唯一映射地址進行指代,DNS載源查詢時使用恒定的映射地址來代替分區內多變的用戶源地址。通過將分區內所有網絡拓撲位置相同的地址段靜態映射到分區映射地址,同一個分區中同一個域名只需要使用一條緩存條目,一舉克服和減緩原來方案中面臨的4個問題。
運營商部署ECS的關鍵技術如下
(1)分區規劃
根據業務模型來規劃分區(調度顆粒度)將用戶歸類,在每個分區里包含多條網絡拓撲位置相同的地址段,即將所有網絡拓撲位置相同的地址段歸并到同一個分區的地址段集合中。根據目前的業務需求,以一個地市劃為一個分區比較合適。
如圖2所示,一個省級ISP的每個地市的地址段集合就對應一個分區。每個分區及對應IP地址段信息可以人工靜態配置到轉發解析器或遞歸解析器中。經過改造后支持分區結構的轉發解析器或遞歸解析器稱為分區轉發解析器或分區遞歸解析器。

圖2 EDNS 分區規劃示意圖
(2)分區映射和ECS源地址變換
每個分區使用唯一映射地址進行指代,映射地址一般取該分區地址段中一個合法公網IP地址。LDNS運營方將全國各市對應的映射地址列表通過公開發布、友好協商等途徑,讓各大ICP,CDN廠商廣泛獲知,從而使權威服務器能夠正確識別映射地址代表的分區用戶。
如果用戶源地址為私有地址,隨著分區映射為公網地址,后續的DNS請求會在ECS中使用映射后公網地址,原來私網調度失準問題迎刃而解。
改進的方案中ECS報文不再傳遞真實的用戶源地址,用戶隱私得到了有效保障。
(3)分區緩存
分區轉發解析器或分區遞歸解析器的緩存經過了改造,同一個域名同一個類型的應答在同一個分區只有一份緩存,也就是緩存內容是按照<name,class,type,分區>進行唯一索引,比改造前按照同一域名每個地址段進行索引大大壓縮了緩存條目數量。
因為分區的粒度遠遠大于單個地址段粒度,所以改造后的分區轉發解析器或分區遞歸解析器產生的遞歸流量要遠遠小于改造前的流量,大幅減少了轉發解析器、遞歸解析器、權威服務器資源消耗。
(4)分區遞歸
如果分區轉發解析器或分區遞歸解析器收到一個DNS查詢請求,假設該查詢請求的域名為第一次請求,分區轉發解析器或分區遞歸解析器需要構造一個新的ECS查詢進行遞歸查詢,此時使用恒定的映射地址來代替原來分區內的真實用戶源地址。最終權威服務器收到ECS查詢請求,不再需要了解分區原先對應的眾多路由網段信息,只需要能夠正確給每個分區映射地址返回對應的解析地址就可以。
(5)ISP地址調整更新處理
當ISP變更了終端用戶的網絡地址及網絡拓撲位置,只需要ISP管理人員需要及時調整分區轉發解析器或分區遞歸解析器上的分區地址段配置,權威服務器不需要進行任何調整。
2017年江蘇移動按照如上優化思路對現網寬帶DNS進行ECS功能部署,在此基礎上分別對接集團內容網絡GSLB完成ECS遞歸流程驗證,對接省內CDN平臺、IMS DNS系統完成ECS轉發流程驗證,均達到預期的地市級精細調度目標,為后續互聯網內容資源從省中心下沉到地市邊緣節點奠定了基礎。
ECS部署實施模型如圖3所示,涉及緩存服務器,遞歸服務器,網管服務器三大網元的改造。

圖3 ECS部署實施模型圖
緩存服務器由原來的單個分區改造為多個分區,每一個EDNS0分區結合地址映射技術歸并一個地市所有用戶的解析緩存。普通域名使用的公共分區緩存和EDNS0域名使用的EDNS0分區緩存并存。通過緩存分區可大幅度提升緩存命中率,減少載源遞歸流量。江蘇移動寬帶LDNS規劃的各地市ECS分區映射地址表參考表1。
使用分區映射后,對于轉發解析器和遞歸解析器ECS請求報文將不再攜帶原始用戶的真實網絡地址信息,而是使用原始用戶所在分區的唯一映射地址。新的查詢請求ECS信息中地址前綴長度(SOURCE PREFIX-LENGTH)填寫32,解析器地址前綴(ADDRESS)填寫32位的分區映射地址。

表1 江蘇移動省內地市ECS分區映射地址規劃表
雖然ECS遞歸可以兼容普通遞歸 ,但ECS遞歸比普通遞歸更加消耗資源,由于現網EDNS0域名數量很少,改造時新增了EDNS遞歸服務器來避免升級原有普通遞歸,從而使得遞歸服務器由原來的一組變成了普通遞歸和EDNS遞歸兩個分組。EDNS遞歸服務器內部也要劃分區域以提升遞歸性能。
DNS網管基于精確域名來標識是否屬于EDNS域名,確保域名調度的主動權掌握在運營商ISP手上。如果是EDNS域名,DNS網管上還需要繼續標識策略,如forward轉發或迭代查詢。
前端緩存服務器根據網管標識的EDNS域名列表實施分流,EDNS域名轉發到專用EDNS遞歸服務器,普通域名轉發普通遞歸服務器。
DNS前端緩存收到用戶請求后,依據DNS網管里的域名標記判斷其是否屬于EDNS域名;如果非EDNS域名,進入公共緩存空間,依據DNS網管策略選擇普通遞歸或普通轉發;如果網管標記為EDNS域名,則根據用戶源IP對應的映射表,進入相應地市EDNS緩存分區;將映射公網IP添加進擴展字段構造出新的EDNS請求轉發給EDNS遞歸服務器;EDNS遞歸服務器根據ECS里的映射公網IP,進入相應遞歸分區后執行DNS網管策略,如選擇EDNS遞歸或EDNS轉發。
針對現網DNS調度不夠精細的問題,谷歌、Akamai等互聯網公司從ICP、CDN廠商角度出發提出了EDNS Client Subnet解決方案,得到了ICP、CDN乃至公眾DNS服務提供商的廣泛支持,但由于缺乏對ISP權益的關注,在運營商網絡中部署時面臨著緩存條目膨脹、遞歸開銷巨大、私網調度失準等問題。本文探討了運營商采用地址映射技術優化部署ECS的演進方案,通過將用戶歸類,為每一個類別的用戶只向權威服務器發送一次攜帶映射地址的遞歸請求,提高了DNS緩存的命中率,不但從技術上解決了ECS落地難題,而且在業務上提升了運營商參與內容調度的話語權,對寬帶運營商具有普遍適用性和推廣價值。