代理 PAC 故障轉移測試:驗證路由、備援順序與 DIRECT 安全

代理自動設定檔是可執行的路由政策。FindProxyForURL(url, host) 可以讓請求走主要代理、嘗試備援代理,或允許直接連線。語法通過並不能證明路由正確、切換仍符合政策,也不能證明所有瀏覽器採用相同行為。

明亮剪紙風全球網際網路路由工作室正在測試主要代理、備援代理與受控直接連線路徑

本指南用於在獲准網路與代理服務中執行受控驗收。重點是可觀察的路由決策、故障邊界與安全上線;不建議在不可信網路使用 WPAD,也不應為必須走代理的流量加入靜默直連回退。

先把 PAC 轉成決策表

每個分支都要變成測試列,不能只看註解或條件順序。至少涵蓋內部短主機名、內部網域、公開 HTTPS、獲准繞過目標、未知或異常主機,並記錄預期指令與是否允許 DIRECT。

HTTP 與 HTTPS 都要測試。現代瀏覽器可能只把 HTTPS 的協定與主機交給 PAC,而不包含路徑及查詢。因此,不應依密鑰、租戶 ID 或 URL 路徑進行路由決策。

先進行離線求值

在受限測試工具中執行 PAC 函式,固定時間並模擬 DNS 輔助函式。記錄案例 ID、協定、主機類別、解析結果、預期指令、實際指令、求值耗時、例外類別與政策版本。

必須精確比較順序。主要代理; 備援代理 與相反順序不是同一政策。遇到意外 DIRECT、空結果、不支援協定或執行例外時應失敗。

不得把代理憑證寫入 PAC。檔案可能被下載、快取與檢視,驗證應由用戶端或獲准的秘密分發機制處理。

建立受控路由信標

測試目標必須自有或明確獲准。回應只提供安全證據:目標標記、代理路由別名、觀察到的地區與位址族、回應摘要、語意完成標記及必要時間戳記。不得記錄憑證、Cookie 或完整私人請求。

主要、備援與直連路徑使用相同內容,以低並行執行,避免把應用差異誤判為路由差異。

先驗證正常路由

逐列存取受控目標並確認真實網路路徑。頁面正確並不足夠,因為它可能繞過代理。分別記錄 PAC 擷取、求值、DNS、代理連線、CONNECT、TLS、首位元組與完成時間。

旁路規則還要測試相似網域、欺騙性後綴與使用者資訊文字,避免邊界匹配過寬。SOCKS 情境可參考 SOCKS5 遠端 DNS 指南,不要把 PAC 的 DNS 輔助函式等同於 socks5h

有意製造主備切換

至少測試四種狀態:主備均正常、主要代理拒絕 TCP、主要代理接受連線但在有效回應前停頓、主要代理正常而目標端點失敗。

通常只有前幾類代理連線故障應觸發路由切換;目標已透過正常代理抵達後發生的應用故障,不應無界遍歷代理清單。量測用戶端何時嘗試備援代理,並依代理逾時預算指南設定 DNS、連線、TLS 與應用階段上限。

將 DIRECT 視為安全決策

若回傳序列最後包含 DIRECT,代表前序代理失敗後流量可能不經代理離開。這可能違反地區、稽核、存取控制或資料處理要求,不能為表面可用性任意加入。

把政策分為兩類:受監管、驗證或地區敏感工作負載應失敗關閉;只有明確核准的低風險目標才能失敗開放,且直連例外必須有監控與到期日。為直連路徑設定獨立信標,意外選取時立即告警。

測試 DNS 輔助函式

isResolvable()isInNet() 等函式可能在求值時執行 DNS。分別測試成功、失敗、緩慢與分割視圖解析,並記錄是否阻塞、是否快取及使用哪個解析視圖。

便宜的主機名規則應放在昂貴 DNS 檢查之前。每次導覽都增加數秒的 PAC,即使邏輯正確也不能上線。

IPv6 需要獨立案例,包括 IPv6-only、雙堆疊、支援時的字面位址及網路切換後的位址族變化。可搭配 curl Happy Eyeballs 代理測試

驗證快取、更新與回復

PAC 檔案與自動探索結果可能被快取。每個測試版本應帶內部政策版本,並記錄用戶端實際執行的版本。測試新設定與熱設定、瀏覽器和系統重新啟動、同 URL 內容變更、PAC URL 變更、PAC 服務暫時不可用以及回復。

上傳成功不等於所有用戶端都已生效。混合版本可能讓相同請求在數小時內走不同路徑。

比較真實用戶端

在每個支援的瀏覽器及使用系統代理設定的非瀏覽器執行階段上執行同一矩陣。瀏覽器 PAC、WinHTTP、命令列工具與自動化框架的探索、快取和故障轉移行為可能不同;部分 WinHTTP 應用還需自行遍歷回傳的代理清單。

記錄用戶端、精確版本、系統、管理政策、PAC 來源與結果,不能用一個用戶端推論另一個。瀏覽器自動化應先以少量可觀察灰度,再依瀏覽器代理並行計畫擴展。

故障分類

建議使用:PAC_FETCHPAC_PARSEPAC_DECISIONDNS_HELPERPRIMARY_CONNECTSTANDBY_NOT_TRIEDDIRECT_UNEXPECTEDCACHE_STALECLIENT_VARIANCEDESTINATION

若證據指向求值或快取,應隔離政策版本而非整個代理池。只有重複的路由專屬故障才使用代理池隔離與復原指南

驗收門檻

  • 所有決策列回傳完全一致且順序正確的指令;
  • PAC 與日誌中沒有秘密或憑證;
  • 主要、備援與獲准直連路徑都可獨立觀察;
  • 切換在業務逾時預算內完成;
  • 目標錯誤不會觸發無界路由循環;
  • 失敗關閉類別不含 DIRECT;
  • DNS 正確性與延遲達標;
  • 熱快取下更新和回復皆通過;
  • 所有支援用戶端滿足同一業務規則;
  • 灰度監控能識別實際政策版本。

檢查清單

  • [ ] 每個分支都有正向、反向與邊界案例。
  • [ ] 精確斷言代理指令順序。
  • [ ] 主要與備援代理可獨立製造故障。
  • [ ] DIRECT 有明確核准、監控與到期日。
  • [ ] HTTPS 規則不依賴路徑或查詢。
  • [ ] PAC 與日誌沒有憑證或權杖。
  • [ ] 已測試緩慢、失敗與分割視圖 DNS。
  • [ ] 包含 IPv4、IPv6 與雙堆疊。
  • [ ] 已驗證冷快取與熱快取。
  • [ ] 大規模上線前已驗證回復。
  • [ ] 每個支援用戶端都有證據。
  • [ ] 僅使用自有或獲准目標。

常見問題

列出兩個代理是否保證自動故障轉移?

不保證。用戶端對清單與不同故障的處理可能不同,必須測試實際瀏覽器或執行階段。

每個 PAC 結果是否都應以 DIRECT 結尾?

不應。DIRECT 可能繞過地區與安全控制,只適合明確核准的失敗開放流量。

PAC 能依 HTTPS 路徑路由嗎?

不應這樣設計。瀏覽器通常會在 HTTPS PAC 求值前移除路徑與查詢。

公共網路上的 WPAD 安全嗎?

自動探索會擴大信任邊界。條件允許時應使用明確管理的 PAC URL 與受保護的設定分發。

合規說明

僅在自有或獲准網路部署及測試 PAC/WPAD。把 PAC 視為可執行政策,保護其分發、最小化日誌,不得用路由規則繞過存取控制或地區限制,並定期複核所有 DIRECT 例外。