APNIC文摘 —邁向無解析器DNS(上)

本APNIC文摘原標題為The path to resolverless DNS,由Geoff Huston撰文。

DNS over HTTPS (DoH)的徵求意見稿(Request for comments,RFC)RFC 8484提到「server push」。RFC中對「server push」模糊帶過,僅警告「必須加倍注意確保被推送(pushed)的統一資源識別碼(Unified Resource Identifier,URI),是客戶提出請求時會送往之處」。

Server push其實是在描述「客戶端無需向伺服器提出DNS請求/查詢,HTTPS伺服器便能傳送一或多個同時包含查詢和答案的區段」的可能應用。然而,對如此引人入勝的可能性而言,RFC中的描述似乎過於模糊難懂。Server push的做法,也跟我們熟悉的DNS大不相同。

本文作者為APNIC首席科學家,他利用這篇文章解釋網路怎麼走到無解析器的DNS解析這一步,這為何可能,又對誰來說可能?

礙於篇幅,本文將分成上下兩篇,上篇說明傳統DNS及開放DNS解析服務的興起,下篇則敘述衍生的DNS隱私顧慮,以及相應而生的新興技術,無解析器DNS亦是其中之一。

「傳統」DNS

作者首先解釋傳統DNS的域名解析系統架構。

通常在描述DNS系統架構時,會提到3種基本組成元素:本地解析器(stub resolver)、遞迴解析器(recursive resolver)和權威伺服器(Authoritative server)。

在這架構中,DNS域名解析是由本地解析器將查詢傳至遞迴解析器,遞迴解析器再將查詢傳送至根區伺服器,並從頂級域名(Top-Level Domain,TLD)、第二層域名、第三層域名⋯⋯逐層查詢後,取得回應再經遞迴解析器回傳至本地解析器。

當然,如果所有DNS查詢實際上都如此運作的話,那整個系統將遲緩不已。當代DNS之所以能順暢運作,主要是因為遞迴解析器會儲存快取,唯有快取中找不到資料時,才會將查詢傳至權威伺服器。換句話說,一個遞迴解析器越常被使用、收到的查詢越多、儲存的快取也越多,回應查詢的速度也越快。

傳統上,這種DNS遞迴解析流程會由網路服務供應業者(Internet Service Provider,ISP)負責。

Google開放解析器服務的興起

然而,以ISP為基礎的DNS解析做法有些問題。使用者並不為每筆DNS查詢解析付費,也不會把解析效能當成選擇ISP的考量點。對ISP而言,這表示DNS解析是無法回收的成本,因此他們不願費心經營或提升DNS解析效能,有些業者更試圖透過別的方式用DNS解析牟利,如販售使用者的DNS查詢資料。當然,後者有嚴重的違害隱私疑慮,在某些國家已被列為違法。

瀏覽器也是傳統DNS架構逐漸式微的因素之一。諸如URL的普遍、可以直接在網址欄輸入搜尋文字等,不僅產生安全問題,當代使用者也因此越來越分不清楚域名和搜尋之間的差異。有些ISP在此發現商機;既然使用者無法分辨域名或搜尋文字,不如就跟搜尋引擎收錢,直接將「無此域名」(NXDOMAIN)的DNS查詢回應轉向搜尋結果頁面。

最受此手法影響的是Google。Google穩坐全球搜尋引擎龍頭多年,而且搜尋服務也一直是該公司的主要資本。Google手中握有的搜尋資料,是精準側寫使用者並成功鎖定廣告投放目標的關鍵,而販售這些資料的收入也是Google最主要的財源。

於是,Google自己開始提供免費開放解析服務。跟過去小型自建、不成氣候的解析服務不同,利用公司本身強大的網路基礎建設,Google提供的DNS解析服務具全球規模,而且他們保證兩點:一是永遠忠實回傳DNS回應,二是Google不會利用這些DNS查詢作為廣告投放的資料來源,也不會在紀錄中儲存任何足以辨識個人身分的資訊。

Google的DNS解析服務快速、管理完善、精準、不篩選資訊,而且完全免費。Google也是最早響應、啟用DNS安全擴充(DNS Security Extension,DNSSEC)的業者之一。不言而喻,Google的DNS解析服務大受歡迎,全球四分之一使用者的DNS解析環境都會用到Google服務,雖然只有14%全球使用者真的以Google解析服務為第一首選。

Google和其他開放DNS解析服務的不同,在於Google的商業模式支持其持續投入資金,維護並改善DNS解析服務。投資自家的DNS解析服務,實質上能強化釐清DNS解析和搜尋的差異,更有助於Google進一步鞏固其搜尋引擎霸主的地位。

 

*台灣網路資訊中心(TWNIC)與亞太網路資訊中心(APNIC)合作,定期精選APNIC Blog文章翻譯摘要,提供中心部落格讀者了解目前亞太地區網路發展之最新趨勢。原文標題為The path to resolverless DNS

回到頂端