Domain-Name-System

如果 CNAME 和 A 記錄都存在,DNS 查找順序是什麼?

  • December 28, 2020

如果我們為同一個子域設置了一條 A 記錄和一條 CNAME 記錄,那麼 DNS 查找是如何完成的呢?

例如,

A record: 
example.com => xx.xx.xx.xx
www.example.com => xx.xx.xx.xx

CNAME record:
www. => example.com

解析www.example.com時,DNS 解析器是直接查找子域 www 的 A 記錄並獲取 ip,還是查找 www 的 CNAME 以獲取重定向域(example.com),然後查找 A記錄example.com到底獲取ip?

什麼是CNAME記錄?

記錄所做的CNAME是將所有者名稱CNAME(添加記錄的名稱)定義為記錄值中名稱的別名(規範名稱,根據記錄類型的名稱)。

請注意,這個別名的定義是在名稱級別上的,完全不考慮記錄類型。

所有者名稱是別名的一個含義是它不能也有其他記錄,因為這將與它只是作為另一個名稱的別名直接衝突。

從解析器的角度來看,如果您查詢A,則響應的有效選項是A輸入的答案(如果名稱不是別名)或CNAME輸入的答案(如果名稱是別名)。將兩者取同名不是一種選擇(無論如何,這不是標準所允許的並且會定義行為的選項)。

那麼我的 DNS 服務提供商如何做到這一點呢?

假設他們允許您並排添加CNAME和記錄的說法是正確的,那麼他們的服務會發生一些不明顯的事情。A

我會將其分為兩個主要選項,在不了解更多資訊的情況下,實際上不可能知道哪個與您的情況相關:

  • 他們的系統不是直接使用使用者輸入,而是以一種或另一種方式將其轉換為有效的東西。他們可能會添加一個衝突記錄但不添加另一個(這意味著 UI 有點糟糕),或者它可能具有某種形式的“CNAME 扁平化”功能,其中它們實際上並不提供CNAME使用者輸入的記錄,而是從規範名稱的末尾解析相關記錄,並像直接在別名處一樣提供這些記錄(這是非標準功能,但某些服務已將這種類型的動態查找實現為“扁平化” CNAME)。
  • 他們的系統已損壞,允許使用者添加規範中不允許的不一致數據,並且可能會以一種或另一種方式導致奇怪的問題(通過他們的服務中斷或他們的服務實際提供可能會破壞的不一致數據解析器端)。使用者會在他們的服務中利用這種類型的破損來擊中自己的腳。

引用自:https://serverfault.com/questions/1047672