检验 VPN 隐私声明:保留经得起检验的证据
在看结果之前,先写下声明、观察者和配置。路由测试只显示出口,永远不显示运营方保留了什么。
测试始于一句有人希望其为真的话,而证据要么支持它的一个狭窄版本,要么什么都支持不了。公开地址检查只显示某一次请求用了哪个出口。它不显示服务商保留了什么、谁能读到,也不显示一个从未完成的会话会怎样。把测试当作有记录的程序来走,你就不会声称超出测量所能承载的范围。
选择一个可观察的声明
在打开任何工具之前,把声明写成一句可检验的话:在此配置下、在此网络上,发往公开地址回显的请求经由服务商声明的出口离开。这句话点明了主体、条件和观察,正因如此它才可被证伪。像 VPN 保护隐私这样的声明没有可观察的形式,所以任何测量都无法裁定它。为测试不会覆盖的内容留第二句话,因为留存、第三方访问和流量关联都落在浏览器测试之外。
第二句话要事先写好,而不是等结果出来再写。在结果尚未揭晓时对范围保持诚实,比一张令人安心的截图进了工单之后再补要容易得多。事后追加的范围说明,往往描述的是结果而不是问题。
读者复现测量所需的配置事实
配置正是让结果可复现的东西,也恰恰是答案看起来不错时人们会跳过的部分。版本字符串、配置名、接入网络和地址族都应写进记录,连同任何可能把流量带出隧道的分流规则。还要点明被测事件,因为正常连接、意外掉线、手动断开和网络切换所适用的规则各不相同。把这些事件混在一起的测试,对其中任何一种都证明不了什么。
在你有权测试的环境中,使用不敏感的流量。抓取无关数据包会让记录显得技术化,却只增加暴露而不增加证据。把抓包只对准隧道接口,并设置文件大小上限,以免长时间运行把磁盘写满。在改动任何东西之前先停止抓包,好让文件与你写下的配置行对应。
说明测了什么,以及它意味着什么
记录工具打印了什么,以及工具能看到什么。解析器应答、地址回显结果和路由查询回答的是不同问题,而网页里的位置标签是对数据库的推断,不是关于出口的事实。把产生每一行的命令写在旁边,因为没有命令的值无法复现。时间戳要与变更工单处在同一时区,否则一周之后顺序就读不懂了。
curl -s https://icanhazip.com
curl -s https://ipinfo.io/ip; echo
resolvectl status --no-pager | head -15
两个独立回显服务结果一致,比只有一个更强;而两者不一致本身就是一个值得记下的发现。 解析器的输出显示 DNS 是走了隧道,还是继续使用本地网络,这是与出口地址分开的另一项声明。保存带时间戳的原始输出,并保留相反的结果,而不是最令人安心的那张截图。当某项改动使结果移动时,一次只改一个变量,因为同时更换服务器和客户端会让你说不清哪一个起了作用。
记录里该有什么,什么必须删掉
保留方法、非机密输出和局限,其余的都删掉。带有凭据的配置、私有主机名和账号标识不必随证据一起流转,而一份泄露它们的测试记录,已经损害了它本该证明的东西。下面五个字段,是仍能经得起交接的最短形态。
| Field | What to write |
|---|---|
| Claim | One testable sentence naming the profile, the network and the observation |
| Observer and scope | Who could see the traffic or the record, and under which conditions |
| Setup | Client and server versions, profile name, access network, address families, split-tunnel rules, event under test |
| Raw result | Tool output with a timestamp, exit addresses from both echo services, resolver answer |
| What it does not support | Retention, third-party access, correlation, untested address families |
附上你用来对照的政策声明,连同它的日期和适用范围。RFC 6973围绕具名观察者和明确范围来框定隐私分析,而这个框架适合测试记录:谁能观察到什么、在什么条件下观察,以及哪些部分始终未被检视。
最后用一段话说明证据支持什么、不支持什么。那一段就是交付物,上面的一切都是为了让这段话诚实。如果必须对每个分句都加以保留才能写出来,那么这次测试所测到的,就少于工单所声称的。