
網域解析失敗不是單一狀態。權威伺服器確認名稱不存在,與解析器暫時逾時或不可用,在應用層可能看起來相似;若採用相同方式快取,短暫故障就可能被延長。加入代理後還要回答另一個問題:解析發生在本機、代理節點,還是上游解析器?
本指南提供一套可重複的復原測試。研究依據之一是 curl 於 2026 年 9 月 2 日發布的 8.22.0 版本說明,其中提到只對權威回應產生的否定解析結果進行快取。這套方法也適用於其他維護 DNS 或連線狀態的 HTTP、SOCKS 用戶端。
先定義四類結果
為每次請求明確分類:
- 取得正向解析結果並嘗試連線;
- 取得符合解析政策的權威否定回應;
- 發生暫時解析失敗、逾時或解析器不可用;
- 暫時故障排除後成功復原。
不要把所有解析錯誤都寫成「DNS 中斷」。應記錄結果類別、執行解析的元件、是否命中快取,以及用戶端是否真的開始網路連線。
確認解析責任邊界
逐項記錄各路徑由誰解析:
- 由本機解析的直連請求;
- 攜帶來源站主機名稱的 HTTP 代理請求;
- 使用目標主機名稱的 HTTP CONNECT 通道;
- 將主機名稱交給代理的 SOCKS 請求;
- 將本機已解析位址交給代理的請求。
具體行為取決於用戶端和代理模式,必須以受控日誌驗證,不能從出口 IP 推測。遠端解析與本機解析通常使用完全不同的快取。
若要排除回應快取干擾,可參考代理回應快取隔離測試;需要提交問題時,可使用代理支援升級證據包指南。
建立受控測試環境
使用組織自有的網域與解析環境,準備:
- 指向已知位址的穩定主機名稱;
- 明確回傳權威否定回應的不存在主機名稱;
- 可在測試解析器中暫時延遲或失敗的主機名稱;
- 將暫時主機名稱恢復為有效位址的步驟;
- 一條直連路徑和所有獲准測試的代理路徑。
目標端點只回傳很小且固定的無害內容。保持請求方法、標頭、代理工作階段、目標和逾時政策不變,每次只改變解析條件或路由。
蒐集必要證據
為每個案例分配編號並記錄:
- 時間戳與單調計時耗時;
- 用戶端及解析器版本;
- 直連、HTTP 代理、CONNECT 或 SOCKS 路徑;
- 本機解析或代理端解析;
- 測試主機名稱和案例類別;
- 解析結果類別,以及快取命中或重新查詢證據;
- 連線開始時間、結果和目標類別;
- 不含憑證的代理工作階段類別;
- 重試次數與退避間隔。
不得記錄代理密碼、API Token、Cookie、客戶網域或完整正式環境資料。測試環境不應包含個人或機密資訊。
建立基準線
從乾淨的用戶端和解析狀態開始:
- 直連解析穩定主機名稱並確認連線成功。
- 透過每種代理模式重複,確認解析位置。
- 在有限時間窗內兩次查詢權威不存在主機名稱。
- 確認結果依既定解析政策維持為否定回應。
- 在測試解析器正常時查詢暫時主機名稱並確認成功。
這一步可驗證測試環境,也能發現錯誤路由、舊位址,或掩蓋 DNS 查詢的連線重用。
注入暫時故障並驗證復原
只讓受控解析路徑暫時不可用或延遲,不要干擾公共基礎設施。
- 使用新連線請求暫時主機名稱。
- 確認結果被標記為暫時失敗,而非權威否定。
- 恢復解析器與有效記錄。
- 按應用程式正常的有限退避政策重試。
- 要求用戶端重新查詢,並在不重啟無關元件的情況下連線成功。
- 分別以相同代理工作階段及新工作階段重複。
- 分別涵蓋本機解析與代理端解析模式。
驗收標準很明確:暫時失敗不能形成持久負快取,進而在解析器恢復後持續阻斷請求。權威否定回應只能依預期的用戶端與解析器政策快取。
將 DNS 快取與連線重用分開
連線池可能讓請求不經新查詢便成功;陳舊連線也可能在 DNS 已恢復後持續失敗。至少執行三個變體:
- 保留 DNS 快取,但強制建立新連線;
- 清除 DNS 狀態,但保留正常連線池;
- 啟動既無 DNS 狀態也無連線狀態的新程序。
比較結果,不要因一次重試成功就認定發生重新解析。連線池鍵應隔離目標、代理路由、TLS 信任設定及驗證工作階段等安全邊界。
控制重試放大
只執行少量固定次數的重試,使用帶抖動的指數退避,並限制並行數。解析器短暫故障不應觸發快速更換代理或大量重複請求。
記錄復原時間、每個邏輯請求的查詢次數、成功連線數及重試放大倍數。若更換出口後測試才「成功」,應回到穩定路徑找出真正持有快取的元件;更換出口不是 DNS 快取修復方法。
驗收清單
- [ ] 已確認每種代理模式的解析責任方。
- [ ] 正向、權威否定和暫時失敗分別分類。
- [ ] 測試只使用自有名稱與受控解析器。
- [ ] 穩定正向對照在所有獲准路徑成功。
- [ ] 權威否定案例符合預期快取政策。
- [ ] 暫時失敗只按有限退避政策重試。
- [ ] 復原後出現新查詢並成功連線。
- [ ] DNS 快取與連線重用獨立測試。
- [ ] 未使用代理輪替掩蓋結果。
- [ ] 日誌不包含憑證和正式環境資料。
常見問題
所有 DNS 否定結果都適合快取嗎?
不適合。關鍵在於結果是否為符合目前解析政策的權威否定回應,或只是暫時故障。把暫時錯誤當成持久不存在會延遲復原。
SOCKS 代理一定負責解析主機名稱嗎?
不一定。有些模式將主機名稱交給代理,有些模式則將用戶端已解析的位址傳給代理。應檢查設定並用受控測試確認。
為什麼復原後的請求成功,卻沒有新的 DNS 查詢?
它可能重用了現有連線。強制建立新連線,並把 DNS 狀態單獨測試後再下結論。
故障期間是否應該清除所有快取?
不應自動這樣做。先判斷陳舊狀態屬於應用程式、作業系統、解析器、代理或連線池。大範圍清除快取會掩蓋問題邊界並增加負載。
來源與合規說明
內部研究依據:curl 專案於 2026 年 9 月 2 日發布的 curl 8.22.0 發布公告與變更記錄。外部資料 URL 只保存在內部營運記錄,公開文章不含外部連結。
只測試自己擁有或明確獲准評估的網域、解析器、代理路徑與端點,並遵守服務商限制、隱私要求、robots 規則及組織變更流程。