如果我們為同一個子網域設定一筆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),然後找example.com的A記錄取得ip ip到底是什麼?
答案1
什麼是CNAME
記錄?
記錄的作用CNAME
是定義業主姓名(新增記錄的名稱)作為CNAME
記錄值中名稱的別名(規範名稱,根據記錄類型的名稱)。
請注意,別名的定義是在名稱層級上,完全不考慮記錄類型。
所有者名稱作為別名的一個含義是它不能還有其他記錄,因為這會與它只是另一個名稱的別名產生直接衝突。
從解析器的角度來看,如果您查詢A
,則回應的有效選項是A
鍵入的答案(如果名稱不是別名)或CNAME
鍵入的答案(如果名稱是別名)。使兩者俱有相同的名稱並不是一種選擇(無論如何,這不是標準允許的並且具有定義的行為的選擇)。
那麼我的 DNS 服務提供者如何做到這一點呢?
CNAME
假設他們允許您並排添加和記錄的說法A
是正確的,那麼他們的服務中存在一些不明顯的情況。
我將其分為兩個主要選項,在不了解更多資訊的情況下,實際上不可能知道哪個選項與您的情況相關:
- 他們的系統不是直接使用使用者輸入,而是以某種方式將其轉換為有效的內容。他們要么添加一個衝突的記錄,但不添加另一個(這意味著 UI 有點糟糕),或者它可能具有某種形式的“CNAME 扁平化”功能,其中它們實際上並不提供
CNAME
用戶輸入的記錄,而是從規範名稱的末尾解析相關記錄,並像直接在別名處一樣提供這些記錄(這是非標準功能,但某些服務已經實現了這種類型的動態查找以“扁平化”CNAME
)。 - 他們的系統被破壞了,允許用戶添加規範中不允許的不一致數據,並且可能會以某種方式導致奇怪的問題(要么是他們的服務中斷,要么是他們的服務實際上提供了不一致的數據,這可能會破壞系統上的東西解析器側)。如果使用者在服務中利用這種類型的損壞,那麼他們就會搬起石頭砸自己的腳。