开启 VPN 之后,网站看到的应该是 VPN 服务器的地址,而不是您自己的地址。大多数情况下确实如此。但仍然值得检查一下,因为浏览器中有一项功能——WebRTC——可能会以出乎意料的方式暴露网络地址。
本文将介绍什么是 IP 地址、它会透露您的哪些信息、WebRTC 泄露是如何发生的,并一步步教您检测自己的设置。
您的 IP 地址会透露什么
IP 地址是在互联网上标识您连接的一串数字。您会遇到两种地址:
- 公网 IP 地址。 这是互联网上其他各方看到的地址。在家里,它通常属于您的路由器,由宽带运营商分配;使用移动数据时,它属于您所用运营商的网络。
- 本地(私有)IP 地址。 这是您的设备在家庭或办公室网络内部的地址,例如以 192.168 或 10 开头的地址。它无法从互联网直接访问,但仍可能被用来识别设备指纹。
公网 IP 不会把您的姓名或详细住址告诉网站,但通常能指向您的网络运营商和大致位置,往往精确到城市或地区。网站可以据此估算您所在的位置;再结合 Cookie 和其他信号,它就会成为用户画像的一部分。
步骤一:查看您的公网 IP
打开我们的 我的 IP 是什么 工具。它会显示您的浏览器所使用的公网 IP 地址,以及与之关联的大致位置和网络归属方。它还会给出一个简单的状态:
- 安全:表示您的流量来自 VPNRice 服务器。
- 已暴露:表示网站看到的地址不属于 VPNRice 服务器,通常就是您真实的连接。
请检测两次:一次关闭 VPN,一次开启 VPN。记下或记住首次看到的地址。开启 VPN 后,地址和位置应当变为 VPN 服务器的地址和位置。
如果您想了解其他任何地址的详情,例如在日志文件中看到的某个地址,可以使用 IP 查询 工具。它会显示该地址登记的国家、地区和所属网络。位置数据来自 DB-IP,本质上只是近似值。
步骤二:了解 WebRTC
WebRTC 是浏览器中支撑视频通话、语音聊天以及部分直接在网页中完成的文件共享的技术。为了高效地连接双方,WebRTC 会尝试寻找两者之间最短的网络路径。它所使用的过程叫做 ICE,由 RFC 8445 定义。
ICE 会收集“候选地址”(candidate),也就是可以联系到您设备的各种可能地址。MDN 关于 RTCIceCandidate 接口的文档列出了几种主要类型:
- 主机候选(host):您设备在各网络接口上的自身地址。
- 服务器反射候选(server reflexive):STUN 服务器所看到的您的公网地址。STUN 由 RFC 8489 描述,是一种简单的协议,用来告诉设备它从外部看起来是什么地址。
- 中继候选(relay):中继服务器上的地址;当无法建立直接路径时,由中继服务器转发流量。
网页可以要求浏览器收集这些候选地址,而该网页上的 JavaScript 能够读取它们。问题的根源就在这里:如果浏览器包含了一个不经过 VPN 的地址,网页就可能得知这个地址。
WebRTC 泄露是什么样子
当某个 WebRTC 候选地址显示出您本以为已被隐藏的地址时,就发生了泄露。常见情况有:
- 开启 VPN 时,您的真实公网 IP 出现在候选地址中。如果浏览器通过隧道之外的网络路径发送 STUN 请求,或者 VPN 只覆盖了 IPv4 而没有覆盖 IPv6 流量,就可能出现这种情况。
- 您的本地 IP 地址被暴露。这种情况没那么严重,但仍会为设备指纹识别提供额外信息。
IETF 已经明确规定了浏览器应有的行为。RFC 8828 定义了 WebRTC 处理 IP 地址的四种模式,从列出所有地址(模式 1)到强制所有流量经过代理(模式 4)。它规定,未经用户同意不得使用模式 1;在没有用户同意的情况下,浏览器应使用模式 2,即只暴露默认路由上的地址。许多现代浏览器还会把本地地址替换为以“.local”结尾的随机名称,因此网页看到的是一个占位名称,而不是私有地址。
实际上,这意味着一个正常工作的系统级 VPN 通常可以防止泄露,因为默认路由会经过隧道。问题往往出在分流设置、仅作用于浏览器的代理,或者没有处理 IPv6 的情况。
步骤三:运行 WebRTC 泄露检测
打开我们的 WebRTC 泄露检测。该检测在您的浏览器中运行:它会让浏览器在几秒钟内收集 ICE 候选地址,并向您展示找到的每一个地址,然后将它们与您的连接正在使用的公网地址进行比较。它不会联系任何第三方 STUN 服务器,因此只会显示主机候选(通常以 .local 名称的形式隐藏)。也就是说,它能发现本地地址的暴露,但无法检测通过 STUN 请求泄露的公网 IP。
请在开启 VPN 的状态下运行检测,并按以下方式解读结果:
- 只出现 VPN 服务器的地址,或者完全没有出现公网地址。 没有泄露。
- 出现一个“.local”名称。 这是浏览器在隐藏您的本地地址,不属于泄露。
- 出现了一个不属于 VPN 服务器的公网地址。 请将其视为暴露。
- 出现了 192.168.x.x 之类的私有地址。 属于轻微暴露,可以参考下面的浏览器设置。
如何修复泄露
请按顺序尝试以下方法,每做一步都重新检测一次:
- 使用系统级 VPN 应用,而不是仅作用于浏览器的代理。 作为代理工作的浏览器扩展会让网页请求经由另一台服务器转发,但 WebRTC 流量并不总是遵循代理设置。完整的 VPN 应用会让默认路由经过隧道。VPNRice 在 Android、iPhone 和 iPad 以及 Windows 上的应用就是这样工作的;Chrome 和 Firefox 扩展则是浏览器代理,会让您的浏览器流量经由 VPNRice 服务器转发(扩展本身不额外加密;您通过 HTTPS 打开的网站仍保持端到端加密)。
- 重新连接 VPN 并刷新页面。 候选地址是在网页请求时收集的,所以在 VPN 连接之前加载的页面可能显示过时的结果。
- 检查 IPv6。 如果您的网络支持 IPv6,而泄露显示的是一个 IPv6 地址,请确认您的 VPN 覆盖了 IPv6,或者在没有 IPv6 的网络上再检测一次,以确认原因。
- 开启 kill switch(断网保护)。 kill switch 可以阻止流量在没有隧道保护的情况下离开您的设备。在 Android 上,VPNRice 的 kill switch 依靠 Android 的“始终开启的 VPN”设置,并配合“屏蔽未使用 VPN 的连接”选项。
- 在浏览器中限制 WebRTC。 有些浏览器提供设置或策略,可以限制 WebRTC 能使用哪些网络接口。Firefox 用户可以在 about:config 中修改 WebRTC 选项。完全禁用 WebRTC 会导致浏览器中的视频通话无法使用,因此请把它作为最后手段。
快速检查清单
- 先关闭 VPN 查看 IP,再开启 VPN 查看。地址应该发生变化。
- 在 我的 IP 是什么 页面上确认显示“安全”状态。
- 在开启 VPN 的状态下运行 WebRTC 泄露检测。
- 浏览器更新后或更换网络时,再重复检测一次。
- 想了解某个陌生地址时,使用 IP 查询 工具。
这些检测花不到一分钟,就能让您了解自己的连接会透露哪些主要信息。VPNRice 的工具在您的浏览器中或 VPNRice 自己的服务上运行,不含任何第三方跟踪器或 Cookie。
如果您需要一款能保护整台设备、而不仅仅是浏览器的 VPN,可以 下载 VPNRice,开启后再运行一次这些检测。