
兩個代理位址即使指向同一台 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 設定不同而結果不一致。
- 瀏覽器成功、命令列失敗,或相反。
安全除錯步驟
- 建立不使用代理的基準,記錄狀態、延遲與地區結果。
- 使用一個 SOCKS5 端點、一個網域與無輪替方式測試本機 DNS。
- 只把
socks5改成socks5h,其餘條件不變。 - 比較位址家族、私人位址和地區差異,不公開內部網域。
- 核對實際用戶端版本的官方文件,因為不同函式庫的代理介面並不完全相同。
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 網路代理文件。僅列資料名稱,不提供外部連結。