Android 的 VPN 通知显示了一个私有地址:这是什么意思
Android VPN 通知里带 /30 的 10.x 地址是手机的隧道接口,不是你的公网 IP。一步步看懂它。
你拉下通知栏,点开常驻的 VPN 通知,看到已连接状态旁边写着类似 10.13.0.42/30 的东西。那个数字是应用分配给手机自身虚拟接口的地址,所以它描述的是一个本地网络对象,而不是你连上的服务器,也不是网站会记录的地址。它既不保密,也不能证明你的流量已被覆盖。下面这个顺序就是我弄清一条通知到底在说什么的步骤:从手里的手机开始,到一次真实的地址核查结束。
先看通知,而不是搜索框
现代 Android 客户端通常在同一块面板里显示两样不同的东西:连接状态和地址块。状态说明隧道已经建立。地址块说明应用在隧道靠手机这一侧配置了什么,客户端之所以把它印出来,是因为这是它们证明接口存在的最简单证据。
在做任何其他事之前,长按通知并打开应用信息页。记下包名,并留意应用是在你的个人资料里还是工作资料里。两个图标相似的 VPN 客户端可能同时装在一台设备上,通知栏并不总是点名你以为的那一个。如果图标你并不认识,那才是发现,地址只是转移注意力。
同一时间存在三个地址
你的手机有 Wi-Fi 或移动网络地址,应用在它的隧道接口上有地址,而某个远端网关持有外部世界看到的公网源地址。这是三个相互独立的分配,任何一个都无法由另外两个推导出来。
通知里的隧道地址几乎总是私有地址。10.13.0.42 位于 10.0.0.0/8 之内,而后者是 RFC 1918 保留的网段之一,所以任何服务商都可以发放同一个号码。看到它只能说明应用用了私有地址池,不能说明这个池托管在哪里。两块位于不同大洲的手机可能报出完全相同的值。
正因为这种重复使用,这个地址无法充当指纹。第二家服务商可能使用同一个网段,因为公司之间没有任何机制协调这些地址池。服务商按习惯、按它们网关配置早已预期的东西来挑选。
把 /30 读作前缀,而不是人数
斜杠后的数字是前缀长度。这里的 /30 表示三十位网络前缀,留给主机两位,因此该网段覆盖 10.13.0.40 到 10.13.0.43。它不是三十台设备,也不是三十跳之外的服务器。
这种小前缀在点对点隧道链路上很常见:一个可用地址给手机,一个给远端。应用是否真的保持这种布局,是它配置的属性。把前缀当作应用设计方式的线索,而不是服务商网络的地图。
从手机端确认隧道
设置、网络和互联网、VPN,会列出当前启用的配置及其所属应用。哪个客户端连着,以这个界面为准。通知只是它的摘要。两者不一致时,相信设置界面,把通知视为过期。
如果你在做一个经过授权的诊断集成,选中的 Network 对象会通过 LinkProperties 暴露链路地址和接口名。记录你采样时所处的配置和网络,因为在错误网络上取的快照回答的是没人问过的问题。
通过 shell 检查没有人们以为的那么可靠。接口名随版本和厂商而变。只匹配含 tun 的 IPv4 行的过滤器,会悄悄漏掉 IPv6 分配,也会漏掉任何把接口命名成别的名字的客户端。缩小范围之前先读完整清单。
看看网站从你在意的应用里看到什么
在浏览器里打开一个公开的地址查询,然后在你真正想保护的应用里重复这次查询。如果两者报出同一个源地址,隧道同时承载了两者。如果不同,说明存在按应用的路由或分流隧道。
有两种配置会产生看似健康、其实没有任何远端出口的通知。本地过滤类应用可以在没有服务器的情况下建立隧道接口,用来检查 DNS 或拦截广告。纯私有 VPN 可以为访问家庭网络而建,同时普通浏览仍然直连。两种情况下,通知栏里的地址都是真的,而你假设的覆盖不是。
判断这条通知是否值得再看一眼
意外的 VPN 通知 值得当作已安装的应用去查,而不是当作地址。检查配置所有者、设备管理权限,以及上次查看那份清单之后新增的一切。撤销你解释不了的东西,然后再观察通知栏。如果通知带着你认识的配置回来,答案就有了。如果回来时没有配置,那就是别的东西在启动这个应用。
最后闭环:所属应用、启用中的配置、你在意应用的源地址、预期路由。四项都对上,通知里的数字就只是记账,仅此而已。