一段話先講結論
單開商業 VPN 離 "匿名" 還差得遠。真正的反追蹤是 系統工程 — IP 層要堵 WebRTC / IPv6 / DNS leak, DNS 要跟 VPN 出口同國家, 瀏覽器指紋要 "看起來普通"(不是裝一堆反指紋外掛), TLS / TCP 指紋要靠 TUN 模式讓 VPN 服務端的 stack 接管, 還得選 no-log + 隱私司法管轄的 VPN 廠商, 瀏覽器多帳號要嚴格隔離。下面 8 個維度 一項一項拆開講清楚。
開篇: 為什麼 VPN 不是 "免死金牌"
典型使用者的認知是: 裝個 NordVPN / Surfshark / 自建 WireGuard, 把出口 IP 一改, 就 "看不出來是誰了"。這是 2010 年代的認知。 如今的追蹤技術早就跨越了 "IP 層":
- 風控系統識別"你用了 VPN" 是基礎能力 (查 IP 是不是 VPN 廠商的 ASN — 主流商業 VPN 的機房段幾乎都已被標記)
- 識別"你之前那個真實 IP" 在 IP 層就夠 — WebRTC / IPv6 / DNS leak / CDN 回源逃逸 + 一旦失誤一次, 後面就被打上 cookie
- 識別"你是哪個具體的人" 不靠 IP, 靠瀏覽器指紋 + 行為模式 + 跨帳號關聯
- 極端場景下, 法律協助 (傳票 / 跨境調查) 能讓 VPN 廠商交出日誌
換句話說, 追蹤你的不是某一個漏洞, 而是 N 個維度的交集 — 你必須每個維度都防住, 對方只需要任一維度成功就夠。 這就是為什麼"完全匿名"在工程上幾乎不可能, 但"顯著降低關聯性"是可行的, 這篇文章就講怎麼做。
① IP 層洩漏 — 真實 IP 直接漏出
最經典也最常見。VPN 只接管了瀏覽器的 HTTP / TCP, 但下面這些通道可能繞開 VPN, 把你家公網 IP 直接送給對方:
1.1 WebRTC 洩漏
瀏覽器內建的 WebRTC (做視訊通話用的) 會呼叫 STUN 協議主動獲取自己看到的公網 IP, 然後 JavaScript 可以直接讀出來。 HTTP / SOCKS 代理只接管 TCP, 而 STUN 走 UDP, 直接繞開代理走你家網絡卡出去, 暴露真實 IP。
HTTP/SOCKS 代理 + 瀏覽器 → WebRTC UDP 直接走家庭網絡卡 → 真實 IP 暴露防禦: 用 TUN 模式 VPN (Mihomo / Clash Premium / Wireguard TUN / Tailscale), 接管虛擬網絡卡上所有 TCP+UDP; 只用瀏覽器代理時用策略限制 WebRTC 而不是刪掉它: Chrome / Edge 企業策略 WebRtcIPHandling = disable_non_proxied_udp, Brave 設 "Disable Non-Proxied UDP", Firefox about:config → media.peerconnection.ice.proxy_only_if_behind_proxy = true。
實測: 用我們的 /leak 洩漏檢測, 看 WebRTC STUN 返回的公網 IP 跟 HTTP 出口是否一致。
1.2 IPv6 雙棧漏
你裝的 VPN 只代理 IPv4, 但你家寬帶同時有 IPv6 — 瀏覽器優先用 IPv6 出去, 完全不經過 VPN。 這是中國電信家寬使用者極常見的漏洞。
防禦: 要麼 VPN 同時代理 IPv4 + IPv6, 要麼 停用系統 / 瀏覽器 IPv6。Windows 改登錄檔 / macOS 改 networksetup。
1.3 DNS leak (單獨一節講, 見 ② DNS 層)
1.4 CDN 回源逃逸
網站如果用 Cloudflare 等 CDN, 你訪問的是 CDN 邊緣節點 IP — 但如果攻擊者拿到了網站的真實源站 IP, 就可以直接繞 CDN 訪問。反過來對追蹤者也成立: 如果你訪問某個網站時 CDN 節點是中國, 但同會話裡某個靜態資源直接從原站拿了 (CDN 沒覆蓋), 真實 IP 就到了原站訪問日誌裡。
防禦: 這種邊緣 case 主要靠你訪問的目標站點自己配置嚴格, 使用者側能做的有限。
② DNS 層洩漏 — 你查詢了哪些域名暴露身份
IP 走 VPN, 但 DNS 查詢可能還走本地 ISP。這有兩種洩漏方式:
2.1 Resolver 國家不一致
你的 VPN 出口在荷蘭, 但你打 DNS 查詢時, 系統 stub resolver 走的是家裡寬頻配置的 DNS (中國電信)。權威 NS 收到查詢時, 看到的源 IP 是中國電信 — 這就把你的真實位置告訴了所有你訪問過的域名背後的營運方。
2.2 ECS 子網洩漏
公共遞迴 (Google 8.8.8.8 預設開了 EDNS Client Subnet) 會把你的真實 /24 子網轉發給目標權威伺服器, 用來做"基於位置的 CDN 排程"。 但這一刻, 你的子網就告訴了遠端權威 — 比 resolver 出口 IP 更精確, 直接落到你家小區的子網。
瀏覽器 → 系統 DNS → 8.8.8.8 → 權威 NS (看到 resolver IP = Google) + ECS = 你家 /24 子網防禦:
- VPN 客戶端強制設定自定義 DNS, 使用 VPN 提供商自家的 DNS (NordVPN / Mullvad / ProtonVPN 都有)
- 別把 DNS 查詢漏到隧道外 — 那樣遞迴伺服器看到的是你的真實 IP, 解析行為和網頁流量對不上, 立刻暴露。注意 1.1.1.1 / 8.8.8.8 是 anycast, 只要查詢走隧道就會就近落到 VPN 出口那側, 本身並不會洩露位置; 真正出問題的是系統繞過隧道直連它們
- 選公共遞迴時, 至少要跟 VPN 出口同國家
- 用 DoH (DNS-over-HTTPS) 強制加密 DNS 查詢, 防 ISP 中間人審計
實測: 我們的 /leak DNS 洩漏檢測 自建權威 NS, 真的把瀏覽器查詢打到自家伺服器, 讓你看到 resolver IP + ECS 子網。 詳細原理見 公共 DNS 大全。
③ TLS 指紋 (ja3 / ja4) — 你的客戶端是誰
HTTPS 握手時, 客戶端會發一個 ClientHello 包給伺服器, 列出自己支援的 TLS 版本、加密套件、擴充套件、橢圓曲線等。 這些欄位的具體順序 + 內容, 不同的客戶端 (Chrome 124 vs Firefox 123 vs curl vs Python requests) 都不一樣, 組合起來生成的指紋值就是 ja3 / ja4 (業界標準)。
網站可以記錄每個訪客的 ja3 / ja4 指紋, 跟 User-Agent 對比 — 如果你 UA 聲稱是 Chrome 124, 但 ja3 指紋是 Python requests, 那就是機器人或工具流量。 這也是 Cloudflare / Akamai 等 anti-bot 服務的核心訊號之一。
| 客戶端 | 典型 ja3 指紋特徵 |
|---|---|
| Chrome 124+ | TLS 1.3 + GREASE + 完整 extension 列表 |
| Firefox 123+ | TLS 1.3 + 不同 extension 順序, 無 GREASE |
| curl 8.x | 較少 extension, 沒 GREASE |
| Python requests | 明顯簡化的指紋 |
| Go net/http | 獨特的 cipher 順序 |
防禦:
- 用 真實主流瀏覽器 (Chrome / Firefox / Edge), 別用 Selenium / Puppeteer 直接裸開 — 那倆的 ja3 極有特點
- 需要自動化時用 undetected-chromedriver / Playwright + curl-impersonate
- 別裝 "反指紋" 瀏覽器擴充套件 — 反而會讓你的 ja3 比正常 Chrome 更獨特, 等於主動標記自己"裝了反追蹤工具"
④ HTTP / 瀏覽器指紋 — Canvas / WebGL / 字型 / 時區
應用層暴露的指紋更豐富, 也更難防:
| 維度 | 怎麼讀 | 獨特度 |
|---|---|---|
| Canvas 指紋 | JS 畫一段文字, 截圖雜湊 | 極高 (GPU + 字型渲染差異) |
| WebGL 指紋 | 查詢 GPU vendor / renderer | 極高 |
| AudioContext 指紋 | JS 生成音訊, 讀返回值 | 高 |
| 已安裝字型 | JS 探測哪些字型能 render | 高 |
| 螢幕解析度 + 顏色深度 | window.screen | 中 |
| 時區 | Intl.DateTimeFormat().resolvedOptions().timeZone | 中 (但跟 IP 比對極強) |
| 語言 (Accept-Language) | HTTP header | 中 |
| 客戶端 hints (Sec-CH-UA-*) | HTTP header (Chrome) | 中 |
關鍵陷阱: 時區 / 語言 / 字型跟你的 VPN 出口國家不一致, 是 極強的"用 VPN" 訊號。 你 VPN 跳到美國, 但瀏覽器 timezone 是 Asia/Shanghai, 語言是 zh-CN — 一眼看穿。
防禦:
- "看起來普通" — 不要在瀏覽器上裝反指紋外掛, 反而異常。普通使用者的 Chrome 普通指紋是最好的偽裝。
- 分離用途: 真實身份用主瀏覽器, 隱私用途單獨開一個瀏覽器配置 / VM / Tails / Whonix
- VPN 出口國家 + 系統時區 + 瀏覽器語言三者一致 — 最起碼不同步洩露 "我是中國使用者但走了美國 VPN"
- Tor 瀏覽器是為這個量身設計的 — 所有使用者看起來都一模一樣, 但犧牲效能
實測: 用我們的 /fingerprint 瀏覽器指紋檢測 看自己的 14 項指紋獨特度。
⑤ TCP/IP 層指紋 — Initial Window / TTL / MTU
連應用層都沒到, 在網路層就有指紋。每個作業系統的 TCP/IP 協議棧實現略有差異:
- Initial TTL: Windows 預設 128, Linux 64, macOS 64, iOS 64
- TCP Initial Window Size: Windows 64KB, Linux 14600, macOS 65535
- TCP options 順序: 不同 OS 發的 MSS / SACK / Timestamp 順序不同
- MTU: 普通家寬 1500, PPPoE 1492, VPN 隧道一般 1380-1450
p0f 工具 (被動 OS 指紋識別) 就是利用這些欄位, 不需要發包就能判斷對端是什麼作業系統。 網站可以收集這些資訊, 跟你聲稱的 UA 對比 — 你 UA 說是 Mac Safari, 但 TTL 是 128 + Initial Window 是 Windows 數值, 那你就是 Windows 裝了 Mac UA 偽裝。
MTU 還會洩漏 "你在用 VPN" — 因為 VPN 隧道一般 MTU < 1500, 流量明顯跟原生寬頻不同。
防禦:
- 用 TUN 模式 VPN: VPN 服務端 stack 接管, 網站看到的 TCP/IP 指紋是 VPN 伺服器的, 不是你客戶端的
- OpenVPN / WireGuard 預設 TUN 模式, HTTP/SOCKS 代理不是 — 這是關鍵區別
- 別為了"看起來不像 VPN"去把隧道 MTU 硬調到 1500 — 隧道封裝本身就要佔掉幾十位元組, 調過頭會觸發分片甚至 PMTUD 黑洞, 表現為大包卡死、網頁載入一半。保持客戶端預設值 (WireGuard 1420 / OpenVPN 自適應) 才是對的
⑥ 行為模式分析 — 流量時間 + 輸入習慣
這是最難防的維度, 因為它 不依賴任何技術指紋, 完全靠機器學習:
- 訪問時間分佈: 你每天上線時段, 跨多帳號一致就是同一人
- 滑鼠軌跡 / 滾動速度 / 鍵盤節奏: 每個人獨特, 銀行 / 反欺詐系統會採集
- 會話時長 / 頁面跳轉模式: 你的瀏覽習慣是獨特的
- 輸入文本特徵: 你打字的錯誤率 / 用詞偏好 / 語法
防禦:
- 跨帳號嚴格隔離 使用時段 — 不要同一時間登入"A 帳號 + B 帳號", 錯開幾小時
- 真實需要匿名時, 改變裝置 (從筆記本換到手機 / 平板)
- 不可能完全防住, 但可以增加關聯難度
⑦ VPN 廠商日誌 + 司法管轄
這是 VPN 的 原罪。你信任 VPN 廠商不存日誌, 但實際上:
- 商業 VPN 廠商可能被收購 (Avast 被 NortonLifeLock 收購 → 隱私政策變了)
- 廠商可能秘密收集日誌 (2017 PureVPN 給 FBI 提供使用者日誌 → 此前一直聲稱 "no-log")
- 司法傳票可以強制配合 — 美國 / 英國 / 加拿大 / 澳大利亞 / 紐西蘭 (5 Eyes) 接受跨國調查
- 9 Eyes = 5 Eyes + 丹麥 / 法國 / 荷蘭 / 挪威
- 14 Eyes = 9 Eyes + 德國 / 比利時 / 義大利 / 西班牙 / 瑞典
選擇標準:
| VPN | 司法管轄 | 第三方審計 | 評價 |
|---|---|---|---|
| Mullvad | 瑞典 (14 Eyes) | 有 (Cure53 / Assured) | 不要郵箱 + 不要付款關聯, 接受現金 |
| ProtonVPN | 瑞士 (中立) | 有 (Mozilla) | 瑞士法律保護, 但需要郵箱註冊 |
| IVPN | 直布羅陀 (英屬) | 有 | 類似 Mullvad, 接受 XMR |
| ExpressVPN | 英屬維京群島 (BVI) | 有 (PWC) | 2021 被 Kape 收購, 信任度下降 |
| NordVPN | 巴拿馬 | 有 (PWC / Deloitte) | 2018 伺服器被黑事件, 後改架構 |
| Surfshark | 荷蘭 (9 Eyes) | 有 | 跟 NordVPN 同公司, 司法在 9 Eyes 內 |
自建 VPN 更可控 — 但 VPS 廠商 (Vultr / Hetzner / DigitalOcean) 自己有日誌, 也可能配合調查。 要真匿名得用 現金 / 加密貨幣購買 VPS + 假身份註冊, 工程量很大。
⑧ 跨帳號關聯 — 同 cookie / fingerprint 多帳號
你在 A 帳號登入後, 瀏覽器存了 cookie / localStorage / cache; 你切到 B 帳號但用同一瀏覽器, 網站直接看出你是同一個人。
- 同一 fingerprint + 短時間內登入多帳號 = 多帳號關聯
- cookie 跨站追蹤 (雖然現代瀏覽器開始限制)
- 第三方追蹤指令碼 (Google Analytics / Facebook Pixel) 跨站串聯
防禦:
- Firefox Multi-Account Containers 擴充套件: 每個帳號獨立 cookie / 儲存空間
- Chrome 多使用者配置 (右上角頭像 → 新增使用者)
- 極端: 不同帳號開不同虛擬機器, 每個 VM 用不同 VPN 出口
防禦策略彙總表
| 維度 | 怎麼暴露 | 對應防禦 | 檢測工具 |
|---|---|---|---|
| IP | WebRTC / IPv6 / DNS / CDN 回源 | TUN 模式 + 關 WebRTC + 關 IPv6 | /leak |
| DNS | resolver 不同國 / ECS 上送 | VPN 自家 DNS + DoH | /leak |
| TLS 指紋 | ja3 / ja4 暴露客戶端 | 用真實主流瀏覽器, 別裝反指紋 | 外部工具 (browserleaks) |
| HTTP 指紋 | Canvas/WebGL/字型/時區 | 時區 / 語言 / 字型跟 VPN 出口一致 | /fingerprint |
| TCP/IP 層 | TTL / Window / MTU | TUN 模式, 讓 VPN 服務端 stack 接管 | 外部工具 (browserleaks tcp) |
| 行為模式 | 時段 / 滑鼠 / 輸入習慣 | 跨帳號錯時段 + 換裝置 | 無 |
| VPN 日誌 | 廠商被傳票 | 選 no-log + 隱私司法管轄 | 看廠商審計報告 |
| 跨帳號 | 同 cookie / 同 fingerprint | Multi-Account Containers / VM 隔離 | /headers |
現實建議: 你到底需要多匿名?
決定防禦深度前, 先想清楚 誰在追你:
- 廣告商 + 資料販子 (低強度): 裝 uBlock Origin + 拒絕第三方 cookie + 一個普通 VPN, 足以應付絕大多數日常場景
- 反欺詐風控 (中強度): 上面 + VPN DNS 一致 + 時區 / 語言匹配 + 瀏覽器多配置隔離
- 商業競爭對手 / 網路爬蟲 (中-高強度): 上面 + TUN 模式 + 真實瀏覽器 (無 Selenium 痕跡) + 殘留 cookie 清理
- 政府 / 跨國調查 (極高強度): 上面只是基線。需要 Tor / Whonix / Tails / 現金購 VPS + XMR + 完全隔離裝置
大部分人需要的是第 1-2 級, 第 3 級以上是專業領域。不要為了不需要的匿名度增加日常使用的麻煩。
延伸閱讀
- browserleaks.com — 綜合指紋檢測WebRTC / Canvas / WebGL / TCP / ja3 一站式
- amiunique.org — 瀏覽器指紋獨特度看你的指紋在 INRIA 資料庫裡獨特到什麼程度
- salesforce/ja3 — TLS 指紋原理
- privacytools.io — 反追蹤工具大全
- Tor Project — 終極匿名網路