APNIC文摘— 破除DNS迷思和誤解

本APNIC文摘原標題為Some DNS myths and misconceptions,由APNIC資深研究員Joao Luis Silva Damas撰文。

網際網路工程指導小組(Internet Engineering Steering Group,IESG)從2019年網際網路工程任務組(Internet Engineering Task Force,IETF)第105屆會議開始,不定期會舉辦名為「技術深入探討」(Technology Deep Dive,TDD)議程。每次議程會選定一種網路技術深入探討,希望提出更多洞見。

去年7月的IETF 108期間,TDD的主題是網域名稱系統(Domain Name System,DNS)。由於在一個半小時的議程時間內難以講完DNS,於是今年3月IETF110的TDD再次以「DNS part 2」為題舉辦,重點放在常見的DNS迷思和誤解。

本文作者為IESG聯席主席,也是該場次的主講人之一 ,因此,本文亦可視為該場次的文字版。礙於篇幅,本文僅節錄全文部分段落,有興趣深入了解的讀者,亦可點此觀看該場次全程錄影。

電腦用數字記憶(IP位址),人腦用名稱記憶(域名);將域名和數字配對,確保使用者透過域名抵達目的地,就是DNS的功用。這是所有初學者第一次接觸DNS時,最常聽到的解釋。這表示域名系統最核心處需保留一份域名和IP位址的配對記錄,並不定時將此紀錄發送給網際網路中所有伺服器,確保大家手邊的紀錄一致。但是當然,接收紀錄的人手邊也可能留存一份自己獨有、和收到版本不同的本地紀錄。

DNS以8個位元的位元字串作為標籤,但應用程式和使用DNS的軟體都是以ASCII字母的格式解析域名標籤。網際網路由無數個網路組成,而網路上幾乎所有應用程式和協定都會用到DNS。這也表示,如果每個網路裡為同一個主機系統取的名字都不一樣,將會導致應用程式和協定大亂。以前的人於是設計了一套主機命名規則,可以把它想像成分數:分子的部分任你自行命名,但同一個主機的分母必須全部一致。

這個方法適用了一段時間,但隨著全球各地的人都開始使用網際網路,人們開始想用自己的語言命名域名。於是,國際化域名(nternationalized Domain Names ,IDN)誕生了。利用暱稱為「punycode」的轉碼系統,現在幾乎所有語言的文字(包括表情符號)都可以被轉譯成DNS讀得懂的標籤。舉例來說,作者的名字João利用punycode轉碼後,就變成「xn--joo-nla」。

這當然是足以稱道的進步,但就像世界上所有其他事一樣,工具本身沒有好壞,好人用來為善,壞人就用來作惡。更糟的是,壞人的腦筋往往動得比好人還快。

如前所述,punycode可以將萬國碼(unicode)組成的幾乎所有語言轉換成DNS可識別的標籤,也就是ASCII字母。但我們很快發現,代表不同語言文字的不同unicode,有時候乍看之下,長相(正式名稱是glyrh,字符)竟然一模一樣。有心人士很容易就可以利用這些難以辨別的字符假造網址欺騙使用者,從事一些不良勾當。舉例來說,你分得出來「http://google.com、http://gοοɡle.com、http://gοogle.com」這3個網址中,哪個真的會連到google嗎?

關於DNS,有個很重要的事實必須了解:DNS不是搜尋引擎。DNS收到提問後,只會給出準確的答覆,沒有所謂「相似的搜尋結果」。DNS中唯一不會區別的只有大小寫,換句話說,即使輸入Www.ExamPLE.com,也可以到達www.example.com。

雖然IDN因為punycode轉譯系統成為可能,但這也帶來很多問題。如前所述,看起來一樣的字符(glyph)組合,轉譯至DNS標籤時可能變成完全不一樣的組合,這不僅包含不同字母長得過於相像的情況,還包括像這種情形:「dots….example.com」這串網址看起來像不小心多打了幾個點的錯誤網址,但實際上是使用刪節號unicode的網址,也確實以「xn—dots-tc7a.example.com」的域名存在於DNS中。

究竟如何在所有人都得以用母語使用域名的前提下,解決語言、文本和字符混淆或難以辨識的問題,是網路社群未來需持續探究的課題。

前面有說,DNS不是搜尋引擎,只會給準確的答案。那麼,DNS面對一樣的問題,一定會給出一樣的答案嗎?答案是不會。更明確的說:大部分都會,但也有不會的時候。

網路工程師通常會說DNS是一個分散式、大略一致的資料庫。之所以只是「大略一致」,是為了解釋主要伺服器發布、傳播新資料到其他權威伺服器可能出現的時間延遲,以及本地伺服器的快取功能。為了避免每次收到DNS查詢都必須一路詢問到根區,大部分伺服器會儲存快取資料,以便即時回應下一次查詢。也因此,有的時候即使權威主機的資料已經更改,若快取資料設定的存活時間(Time To Live,TTL)尚未過期,就會導致本地伺服器的資料未能即時更新,無法正確解析查詢。這也是為什麼雖然DNS資料整體而言雖是一致的,但也只能說是「大略」一致。

然而,最近這個「一致」又因為一些新的取巧用法受到威脅。內容遞送網路(Content Delivery Network,CDN)會視使用者身份改變DNS查詢的答案,目的是將使用者引導至離自家網路傳送點最近的節點。常見的做法是在DNS查詢中加入DNS擴充機制(Extension Mechanisms for DNS,EDNS)客戶端子網路(EDNS Client Subnet,ECS)外掛,藉此容許伺服器生成「客製化」回應。這個做法看似無傷大雅,但事實上,連說明ECS的RFC 7871都直接警告「建議預設關閉此功能」,ECS對DNS弊大於利的事實不言可喻。

多年來,大家對DNS這種「大略一致」的本質都抱持著「雖不滿意,但還可接受」的態度。這些年的經驗也發現,雖然很多工程師都希望協定的定義越精確越好,但隨著時間演進,同樣的協定可能長出新功能或用途,而這些發展過去既難以預測,協定中自然缺乏相關規則。

DNS也是這樣。以現在來說,DNS協定甚至已經比大部分的網路使用者還老了。作者最後也不禁問道,DNS作為網際網路基石的時間還有多久?DNS終究被取代嗎?這樣的現實什麼時候會發生呢?

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

圖片來源:議程錄影截圖

Scroll to Top