刺繡風網際網路地圖將持久的 DNS 否定分支與可復原的代理路徑清楚分開

網域解析失敗不是單一狀態。權威伺服器確認名稱不存在,與解析器暫時逾時或不可用,在應用層可能看起來相似;若採用相同方式快取,短暫故障就可能被延長。加入代理後還要回答另一個問題:解析發生在本機、代理節點,還是上游解析器?

本指南提供一套可重複的復原測試。研究依據之一是 curl 於 2026 年 9 月 2 日發布的 8.22.0 版本說明,其中提到只對權威回應產生的否定解析結果進行快取。這套方法也適用於其他維護 DNS 或連線狀態的 HTTP、SOCKS 用戶端。

先定義四類結果

為每次請求明確分類:

  • 取得正向解析結果並嘗試連線;
  • 取得符合解析政策的權威否定回應;
  • 發生暫時解析失敗、逾時或解析器不可用;
  • 暫時故障排除後成功復原。

不要把所有解析錯誤都寫成「DNS 中斷」。應記錄結果類別、執行解析的元件、是否命中快取,以及用戶端是否真的開始網路連線。

確認解析責任邊界

逐項記錄各路徑由誰解析:

  1. 由本機解析的直連請求;
  2. 攜帶來源站主機名稱的 HTTP 代理請求;
  3. 使用目標主機名稱的 HTTP CONNECT 通道;
  4. 將主機名稱交給代理的 SOCKS 請求;
  5. 將本機已解析位址交給代理的請求。

具體行為取決於用戶端和代理模式,必須以受控日誌驗證,不能從出口 IP 推測。遠端解析與本機解析通常使用完全不同的快取。

若要排除回應快取干擾,可參考代理回應快取隔離測試;需要提交問題時,可使用代理支援升級證據包指南

建立受控測試環境

使用組織自有的網域與解析環境,準備:

  • 指向已知位址的穩定主機名稱;
  • 明確回傳權威否定回應的不存在主機名稱;
  • 可在測試解析器中暫時延遲或失敗的主機名稱;
  • 將暫時主機名稱恢復為有效位址的步驟;
  • 一條直連路徑和所有獲准測試的代理路徑。

目標端點只回傳很小且固定的無害內容。保持請求方法、標頭、代理工作階段、目標和逾時政策不變,每次只改變解析條件或路由。

蒐集必要證據

為每個案例分配編號並記錄:

  • 時間戳與單調計時耗時;
  • 用戶端及解析器版本;
  • 直連、HTTP 代理、CONNECT 或 SOCKS 路徑;
  • 本機解析或代理端解析;
  • 測試主機名稱和案例類別;
  • 解析結果類別,以及快取命中或重新查詢證據;
  • 連線開始時間、結果和目標類別;
  • 不含憑證的代理工作階段類別;
  • 重試次數與退避間隔。

不得記錄代理密碼、API Token、Cookie、客戶網域或完整正式環境資料。測試環境不應包含個人或機密資訊。

建立基準線

從乾淨的用戶端和解析狀態開始:

  1. 直連解析穩定主機名稱並確認連線成功。
  2. 透過每種代理模式重複,確認解析位置。
  3. 在有限時間窗內兩次查詢權威不存在主機名稱。
  4. 確認結果依既定解析政策維持為否定回應。
  5. 在測試解析器正常時查詢暫時主機名稱並確認成功。

這一步可驗證測試環境,也能發現錯誤路由、舊位址,或掩蓋 DNS 查詢的連線重用。

注入暫時故障並驗證復原

只讓受控解析路徑暫時不可用或延遲,不要干擾公共基礎設施。

  1. 使用新連線請求暫時主機名稱。
  2. 確認結果被標記為暫時失敗,而非權威否定。
  3. 恢復解析器與有效記錄。
  4. 按應用程式正常的有限退避政策重試。
  5. 要求用戶端重新查詢,並在不重啟無關元件的情況下連線成功。
  6. 分別以相同代理工作階段及新工作階段重複。
  7. 分別涵蓋本機解析與代理端解析模式。

驗收標準很明確:暫時失敗不能形成持久負快取,進而在解析器恢復後持續阻斷請求。權威否定回應只能依預期的用戶端與解析器政策快取。

將 DNS 快取與連線重用分開

連線池可能讓請求不經新查詢便成功;陳舊連線也可能在 DNS 已恢復後持續失敗。至少執行三個變體:

  • 保留 DNS 快取,但強制建立新連線;
  • 清除 DNS 狀態,但保留正常連線池;
  • 啟動既無 DNS 狀態也無連線狀態的新程序。

比較結果,不要因一次重試成功就認定發生重新解析。連線池鍵應隔離目標、代理路由、TLS 信任設定及驗證工作階段等安全邊界。

控制重試放大

只執行少量固定次數的重試,使用帶抖動的指數退避,並限制並行數。解析器短暫故障不應觸發快速更換代理或大量重複請求。

記錄復原時間、每個邏輯請求的查詢次數、成功連線數及重試放大倍數。若更換出口後測試才「成功」,應回到穩定路徑找出真正持有快取的元件;更換出口不是 DNS 快取修復方法。

驗收清單

  • [ ] 已確認每種代理模式的解析責任方。
  • [ ] 正向、權威否定和暫時失敗分別分類。
  • [ ] 測試只使用自有名稱與受控解析器。
  • [ ] 穩定正向對照在所有獲准路徑成功。
  • [ ] 權威否定案例符合預期快取政策。
  • [ ] 暫時失敗只按有限退避政策重試。
  • [ ] 復原後出現新查詢並成功連線。
  • [ ] DNS 快取與連線重用獨立測試。
  • [ ] 未使用代理輪替掩蓋結果。
  • [ ] 日誌不包含憑證和正式環境資料。

常見問題

所有 DNS 否定結果都適合快取嗎?

不適合。關鍵在於結果是否為符合目前解析政策的權威否定回應,或只是暫時故障。把暫時錯誤當成持久不存在會延遲復原。

SOCKS 代理一定負責解析主機名稱嗎?

不一定。有些模式將主機名稱交給代理,有些模式則將用戶端已解析的位址傳給代理。應檢查設定並用受控測試確認。

為什麼復原後的請求成功,卻沒有新的 DNS 查詢?

它可能重用了現有連線。強制建立新連線,並把 DNS 狀態單獨測試後再下結論。

故障期間是否應該清除所有快取?

不應自動這樣做。先判斷陳舊狀態屬於應用程式、作業系統、解析器、代理或連線池。大範圍清除快取會掩蓋問題邊界並增加負載。

來源與合規說明

內部研究依據:curl 專案於 2026 年 9 月 2 日發布的 curl 8.22.0 發布公告與變更記錄。外部資料 URL 只保存在內部營運記錄,公開文章不含外部連結。

只測試自己擁有或明確獲准評估的網域、解析器、代理路徑與端點,並遵守服務商限制、隱私要求、robots 規則及組織變更流程。