題幹與適用場景
這道通用技術題考察 DNS 協定、快取語意與故障排查。候選人需要區分「名稱不存在」「名稱存在但沒有該類型資料」與「解析失敗」,並說明為什麼修復權威資料後,遞迴解析器仍可能繼續回傳舊的負答案。
面試官考察什麼
- 能否區分 NXDOMAIN 與 NODATA,而不是把所有空答案都稱為網域不存在。
- 能否說明 SOA 如何為負回應提供快取時間,以及失敗快取的獨立規則。
- 能否沿 stub、遞迴解析器、權威伺服器鏈路驗證事實與剩餘 TTL。
- 能否設計建立記錄、回滾與監控方案,避免盲目清快取或頻繁重試。
回答前需要釐清的問題
先確認查詢名稱、記錄類型、查詢時間與實際回應碼;權威伺服器是否已載入新區域;遞迴解析器是否啟用 DNSSEC 驗證;問題發生在所有解析器還是特定網路;用戶端是否透過本地快取、服務網格或應用程式層 DNS 快取存取。
30 秒回答框架
我會先直接向權威伺服器查詢,確認名稱與記錄類型;再從多個遞迴解析器記錄 NXDOMAIN、NODATA 或 SERVFAIL 及其 SOA、TTL。NXDOMAIN 表示名稱不存在,NODATA 表示名稱存在但沒有請求類型;兩者可依 SOA 的負快取參數快取。若權威已正確而遞迴仍回傳舊答案,必須等待負 TTL 或按營運商能力處理,不能假設重新整理用戶端就能清除上游快取。
分步驟深入解答
1. 區分三種負面結果
NXDOMAIN 是權威鏈路確認查詢名稱不存在;NODATA 通常回傳成功回應但答案區為空,表示名稱存在卻沒有請求的 RR 類型。SERVFAIL 則表示解析過程失敗,例如權威不可達或 DNSSEC 驗證失敗,不能直接當成「名稱不存在」。不同回應會影響用戶端是否快取以及後續重試。
2. 說明負快取時間從哪裡來
RFC 2308 規定,NXDOMAIN 與 NODATA 可攜帶 SOA,遞迴解析器使用 SOA 的負快取 TTL(現代實作通常取 SOA 的 MINIMUM 與 SOA TTL 中較小者)決定保留時間。權威管理者應把這個值視為新記錄發布與撤銷的傳播窗口。RFC 9520 進一步規定解析失敗也應進行有限時間的負快取,但失敗快取不應無限期阻斷恢復。
3. 設計可重複的排查路徑
先使用 dig @authoritative-server api.example.com A +norecurse 核對權威答案、SOA 與序列號,再對多個遞迴解析器執行相同查詢,記錄 status、Authority 區、SOA TTL 與時間戳。若權威回傳 A 而遞迴回傳 NXDOMAIN,表示負快取或委派路徑仍舊;若權威也回傳 NXDOMAIN,檢查區域檔案、發布序列與查詢名稱;若回傳 SERVFAIL,檢查可達性、委派與 DNSSEC。
4. 處理快取污染與重試風暴
應用程式不應在負答案上立即高頻重試;為服務發現設定有上限的退避,並記錄回應碼與快取剩餘時間。對新網域先在生產前建立記錄,避免使用者第一次查詢時把 NXDOMAIN 寫入大量遞迴快取。變更後監控多個地區的負答案比例,區分遞迴快取尚未過期與權威鏈路持續失敗。
5. 規劃恢復與回滾
無法強制所有公共遞迴解析器立刻刪除負快取。可行做法是等待負 TTL 到期、清理可控遞迴解析器、修復權威或 DNSSEC 問題,並在應用層暫時保留舊端點或備用發現路徑。修復後持續驗證權威、遞迴與實際請求三層,確認 NXDOMAIN/SERVFAIL 比例恢復,再移除降級措施。
高品質示範回答
我先把 NXDOMAIN、NODATA 與 SERVFAIL 分開。NXDOMAIN 是名稱不存在,NODATA 是名稱存在但沒有請求的記錄類型,SERVFAIL 是解析鏈路失敗。直接查詢權威伺服器確認區域與序列號,再從多個遞迴解析器觀察回應碼、Authority 區的 SOA 與剩餘 TTL。負回應可依 SOA 的負快取 TTL 保留,所以剛建立記錄後仍可能得到舊 NXDOMAIN;解析失敗也可能被有限時間快取。排障時避免讓應用程式在負答案上忙等,提前建立記錄、設定合理的負 TTL,並在修復後等待快取窗口、監控多地區遞迴結果與真實流量,必要時保留備用端點。
常見錯誤
- 把 NXDOMAIN、NODATA 與 SERVFAIL 當成同一種「空結果」。
- 只清理本機快取,卻忽略遞迴解析器的負快取。
- 認為修改 SOA 後所有既有負快取會立即縮短。
- 在權威仍故障時不斷重試,製造遞迴與應用層壓力。
- 只驗證 A 記錄,忽略 AAAA、委派、DNSSEC 或查詢名稱拼寫。
追問及應對
建立 A 記錄後為什麼仍是 NXDOMAIN?
先確認權威伺服器已載入新區域且委派指向正確。若權威已回傳 A,遞迴解析器看到的 NXDOMAIN 多半是先前快取的負答案,需要等待其 SOA 負 TTL 到期。
NODATA 會不會阻止以後新增 AAAA?
會。遞迴解析器可能快取「名稱存在但沒有 AAAA」的 NODATA;新增 AAAA 後,用戶端仍可能在該負 TTL 內得到空答案。
SERVFAIL 也能快取嗎?
可以,現代規範要求對解析失敗進行有限時間的負快取,但實作會限制時長。修復權威或 DNSSEC 後仍需等待失敗快取窗口,並用多個遞迴解析器驗證。
能否用隨機子網域繞過負快取?
不能把它當通用修復。隨機名稱會產生更多權威查詢與快取壓力,且無法修復真實的委派、區域或 DNSSEC 錯誤;應先修復權威事實並等待既有快取過期。