一段话先讲结论
单开商业 VPN 离 "匿名" 还差得远。真正的反追踪是 系统工程 — IP 层要堵 WebRTC / IPv6 / DNS leak, DNS 要跟 VPN 出口同国家, 浏览器指纹要 "看起来普通"(不是装一堆反指纹插件), TLS / TCP 指纹要靠 TUN 模式让 VPN 服务端的 stack 接管, 还得选 no-log + 隐私司法管辖的 VPN 厂商, 浏览器多账号要严格隔离。 下面 8 个维度 一项一项拆开讲清楚。
开篇: 为什么 VPN 不是 "免死金牌"
典型用户的认知是: 装个 NordVPN / Surfshark / 自建 WireGuard, 把出口 IP 一改, 就 "看不出来是谁了"。这是 2010 年代的认知。 2024 年的追踪技术早就跨越了 "IP 层":
- 风控系统识别"你用了 VPN" 是基础能力 (查 IP 是不是 VPN 厂商的 ASN, 命中率超过 90%)
- 识别"你之前那个真实 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: Firefox about:config → media.peerconnection.enabled = false, Brave 设 "Disable Non-Proxied UDP", Chrome 装 uBlock Origin 阻止 WebRTC。
实测: 用我们的 /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 都有)
- 不要直接用 1.1.1.1 / 8.8.8.8 这种公共递归, 它们的出口跟你的 VPN 出口不在同一国家 → 立刻被发现 leak
- 选公共递归时, 至少要跟 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 还独特, 100% 暴露你是装了反追踪的人
④ 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 代理不是 — 这是关键区别
- MTU 调整到 1500 (如果链路支持), 减少 "明显 VPN" 信号
⑥ 行为模式分析 — 流量时间 + 输入习惯
这是最难防的维度, 因为它不依赖任何技术指纹, 完全靠机器学习:
- 访问时间分布: 你每天上线时段, 跨多账号一致就是同一人
- 鼠标轨迹 / 滚动速度 / 键盘节奏: 每个人独特, 银行 / 反欺诈系统会采集
- 会话时长 / 页面跳转模式: 你的浏览习惯是独特的
- 输入文本特征: 你打字的错误率 / 用词偏好 / 语法
防御:
- 跨账号严格隔离使用时段 — 不要同一时间登录"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 就够 95%
- 反欺诈风控 (中强度): 上面 + 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 — 终极匿名网络