SOCKS5 本機與遠端 DNS 路由示意圖

兩個代理位址即使指向同一台 SOCKS5 伺服器,也可能得到不同結果,關鍵往往是 DNS。本機解析會由用戶端先解析目的網域,再把 IP 交給代理;遠端 DNS 則把網域透過 SOCKS 連線交給代理,由出口附近的解析器處理。

這會影響隱私、地區內容、企業內部網域、受限網域,以及測試是否真正代表代理出口位置。

實際差異

在 curl 中,socks5 使用本機 DNS,socks5h 要求代理端解析網域。一個字母就決定 DNS 請求發生的位置。

# 本機 DNS
curl --proxy "socks5://$PROXY_HOST:$PROXY_PORT" https://zh-tw.98ip.com/

# 代理端遠端 DNS
curl --proxy "socks5h://$PROXY_HOST:$PROXY_PORT" https://zh-tw.98ip.com/

憑證應透過受保護變數或專門的代理驗證選項提供,不要寫入腳本、Shell 歷史、截圖或工單。

何時使用本機 DNS

用戶端必須使用內部 DNS 區域、本機 hosts 規則或企業解析器時,本機解析較合適,也方便在連接代理前檢查解析結果。

但本機 DNS 可能向用戶端解析器暴露目的網域,並依用戶端地區回傳位址,而非代理出口地區。這可能造成地區內容錯誤、目的不可達,甚至把正常代理誤判為故障。

何時使用遠端 DNS

地區敏感測試通常更適合遠端 DNS。網域在代理網路環境中解析,可減少本機 DNS 暴露,也更接近真實出口位置的內容路由。

遠端 DNS 不代表完整匿名。目的服務、代理供應商、瀏覽器功能、加密 DNS 設定與應用遙測仍可能揭露資訊。它只是路由控制的一部分。

DNS 路徑錯誤的常見表現

  • 直接使用 IP 成功,使用網域失敗。
  • 本機與 CI 解析到不同位址。
  • 代理出口在海外,但內容仍屬於用戶端地區。
  • 網域被本機解析為私人或不可達位址。
  • 不同工作節點因 DNS 設定不同而結果不一致。
  • 瀏覽器成功、命令列失敗,或相反。

安全除錯步驟

  1. 建立不使用代理的基準,記錄狀態、延遲與地區結果。
  2. 使用一個 SOCKS5 端點、一個網域與無輪替方式測試本機 DNS。
  3. 只把 socks5 改成 socks5h,其餘條件不變。
  4. 比較位址家族、私人位址和地區差異,不公開內部網域。
  5. 核對實際用戶端版本的官方文件,因為不同函式庫的代理介面並不完全相同。

IPv4 與 IPv6

本機和遠端解析器可能回傳不同位址家族。用戶端 IPv6 正常,不代表代理出口具有相同路由。應記錄最終使用 IPv4 或 IPv6,並在應用允許時分別測試。

不要把解析錯誤當成驗證錯誤。驗證、DNS、連線拒絕、TLS 與目的 HTTP 狀態屬於不同層級。

自動化檢查清單

  • 明確選擇本機或遠端 DNS,不依賴未記錄的預設值。
  • 代理憑證不進入原始碼。
  • 開發、CI 與正式環境使用一致協定。
  • 日誌記錄 DNS 模式,但不記錄憑證。
  • 先驗證單一網域,再啟用輪替與並行。
  • 分別確認代理出口與內容地區。
  • 檢查 IPv4 與 IPv6 行為。
  • 瀏覽器情境另需檢查加密 DNS、WebRTC 與 Service Worker。
  • 使用符合適用法律、目的服務條款與資料要求。

常見問題

socks5h 是否會加密 DNS?

它把網域交給代理解析,而不是在用戶端本機解析。後續安全性取決於代理連線和供應商基礎設施,不能視為通用加密 DNS 保證。

為什麼 IP 成功而網域失敗?

直接使用 IP 會略過解析。DNS 可能回傳不可達位址、私人位址、錯誤位址家族或不合適的地區節點。

所有測試都應使用遠端 DNS 嗎?

不一定。需要出口地區真實性與降低本機暴露時使用遠端 DNS;需要內部網域或本機覆寫時使用本機 DNS。重點是明確記錄選擇。

進行可控地區代理測試時,可查看 98IP 的設定與支援資訊。比較速度、成功率與地區準確性前,應先固定 DNS 模式。

內部研究依據:curl 代理選項文件、Requests SOCKS 代理文件、Playwright 網路代理文件。僅列資料名稱,不提供外部連結。