一般情況下,DNS記錄類型裏用的最多的是A記錄、CNAME別名記錄、MX郵件記錄、PTR反向記錄等類型。而且一般來說,DNS裏存在的記錄就能解析,不存在的記錄就不能解析。但有些情況下,希望凡是無法匹配已存在的記錄的請求,也能有一個有效的記錄返回,即設定一個默認值。比如有一個DNS域usa.com,用戶可能試圖訪問了blabla.usa.com,但這blabla不是系統裏已經存在的記錄,則一般情況下會DNS查詢失敗。
但是如果設定了一個默認值,比如將所有已明確定義的記錄意外的查詢都轉向一個IP或CNAME,那麼不再有查詢失敗的錯誤。處理時可以直接將這類請求轉向主站點。這樣可以提高用戶體驗滿意度。
方法就是使用DNS通配符。不過由於通配符記錄不是明確定義的行業標準,可能在不同的DNS系統上實施起來會有細微的區別。下面僅以BIND 9.5爲例。
1. A記錄類型:
* IN A 10.10.10.10
所有對不存在的記錄的查詢會統一得到一個A記錄IP地址的返回值。
2. CNAME記錄類型:
* IN CNAME default.usa.com.
所有對不存在的記錄的查詢會統一得到一個CNAME記錄的返回,即重定向到default.usa.com,從而獲得後者的IP地址(當然也可能有多次CNAME的情況,這裏略過)。
通配符類型可以出現在記錄項的頭部,中部,或尾部。比如可以僅僅是一個*,也可以是*.abc,也可以是a.*.c或a.b.*。例如:
*.sanfrancisco.california IN CNAME default.usa.com.
注意:通配符不會對本域做解析。要實現本域解析,可以添加以下記錄:
usa.com. IN A 10.10.10.10
或通過先添加普通A記錄再用CNAME的方式:
default IN A 10.10.10.10
usa.com. IN CNAME default
下面略作利弊分析。
利:有利於提高用戶體驗,不會被DNS解析失敗的問題而困擾;對web應用代碼中可能出現的一些錯誤域名也能起到容錯作用。
弊:由於通配符並非像A記錄等其他類型那樣有嚴格明確的標準,可能在使用過程中(比如跨不同DNS系統的域文件傳輸/遞歸解析等)出現某些意料之外的問題。