KNOWLEDGE

什麼是 VPN 溯源? 怎麼防止被追蹤?

開了 VPN 就匿名了嗎?不一定。從 IP、DNS、TLS、瀏覽器與 TCP 指紋、服務商日誌到跨帳號關聯,8 個維度講清怎麼被追蹤、怎麼防。

一段話先講結論

單開商業 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 出口

防禦策略彙總表

維度怎麼暴露對應防禦檢測工具
IPWebRTC / IPv6 / DNS / CDN 回源TUN 模式 + 關 WebRTC + 關 IPv6/leak
DNSresolver 不同國 / ECS 上送VPN 自家 DNS + DoH/leak
TLS 指紋ja3 / ja4 暴露客戶端用真實主流瀏覽器, 別裝反指紋外部工具 (browserleaks)
HTTP 指紋Canvas/WebGL/字型/時區時區 / 語言 / 字型跟 VPN 出口一致/fingerprint
TCP/IP 層TTL / Window / MTUTUN 模式, 讓 VPN 服務端 stack 接管外部工具 (browserleaks tcp)
行為模式時段 / 滑鼠 / 輸入習慣跨帳號錯時段 + 換裝置無
VPN 日誌廠商被傳票選 no-log + 隱私司法管轄看廠商審計報告
跨帳號同 cookie / 同 fingerprintMulti-Account Containers / VM 隔離/headers

現實建議: 你到底需要多匿名?

決定防禦深度前, 先想清楚 誰在追你:

  • 廣告商 + 資料販子 (低強度): 裝 uBlock Origin + 拒絕第三方 cookie + 一個普通 VPN, 足以應付絕大多數日常場景
  • 反欺詐風控 (中強度): 上面 + VPN DNS 一致 + 時區 / 語言匹配 + 瀏覽器多配置隔離
  • 商業競爭對手 / 網路爬蟲 (中-高強度): 上面 + TUN 模式 + 真實瀏覽器 (無 Selenium 痕跡) + 殘留 cookie 清理
  • 政府 / 跨國調查 (極高強度): 上面只是基線。需要 Tor / Whonix / Tails / 現金購 VPS + XMR + 完全隔離裝置

大部分人需要的是第 1-2 級, 第 3 級以上是專業領域。不要為了不需要的匿名度增加日常使用的麻煩。

延伸閱讀

mimetic
mimetic
mimetic