加密决定数据包的内容能否被读取,却完全不说数据包的存在、大小和时间是否会被记录下来。转发加密隧道的路由器看到一条必须投递的流,它可以计数、打时间戳并归属这条流。对比家庭网关记录的内容与上游网络记录的内容,差异就在于两者各自有理由保留哪些字段。

这才是有用的比较,因为这两种记录在隐私讨论中经常被混为一谈。它们回答不同的问题,保存期限也不同。

两个观察者,两种不同的记录

你边缘的网关知道这条流使用了哪个本地接口,当它自己分配地址时,也知道当时哪个设备持有该地址。它还可能看到你查询了哪个解析器、联系了哪个端点。在上游,同样的流量经过转换后到达,于是另一个网络只能看到一个由全家共享的公网地址,这就是 RFC 3022 中描述的功能。两个观察者都没有读取载荷,两份记录也都不包含对方。

字节总量也属于这一类。流量计数器记录流量经过,却不记录它是什么。

哪些字段真的会留下痕迹

某台设备存储什么取决于启用了什么,因此任何普遍性的断言都值得怀疑。表格列出了实践中重要的字段以及每个字段的含义。

FieldHome gatewayUpstream observer
VPN endpoint addressYes, as a destinationYes
Local device mappingOnly where it assigns the addressNo
Byte and packet countsIf statistics are enabledUsually
Flow start and endIf connection logging is onUsually
DNS queriesIf the resolver is localOnly if the resolver is theirs
Payload contentsNoNo

要按行读表,而不是按列读,因为每一行支撑的结论不同。端点地址表明存在一条隧道,而不表明它承载了什么。本地设备映射是把流与某个人关联起来的那一行,也是家庭网关保留、而上游观察者通常不保留的那一行。

载荷这一行在两列中相同,而这正是加密真正保证的部分。其余一切都取决于日志记录的选择。

终止隧道的路由器看得更多

转发他人加密流量的网关与自行运行隧道的路由器处于不同位置。后者保存隧道状态及其密钥,因此能看到内部地址和隧道内的目的地。如果这台路由器还为内网转换地址,它的日志就能在一条记录中把设备与内部目的地关联起来。这与外层流是不同的披露,却出自同一个盒子。

把它与普通网关后的笔记本电脑客户端相比:网关记录外层流,客户端自己的日志保留内部细节。问谁掌握画面的哪一半,比问网络能否看穿加密更有用。第二个问题的诚实答案是不能,而且它也不是决定你暴露面的那个问题。

检查你自己的设备记录了什么

在推断别人的设备之前,先看看你自己的设备。下面的命令会列出带计数器的防火墙规则、仍然存活的连接条目,以及提到某条连接的日志行。它们适用于基于 Linux 的路由器,大多数消费级固件都源自它。

nft list ruleset | grep -A2 counter
conntrack -L 2>/dev/null | grep 1194
logread | grep -iE 'vpn|1194' | tail -n 20
cat /proc/net/nf_conntrack | wc -l

带计数器的规则集会告诉你设备愿意统计什么,连接表显示的是活动流而非历史。日志行能确认固件到底会不会写连接事件,这能解决大部分争论。四条命令全部输出为空,说明这个盒子只转发不记录,这也是一种答案。在客户端上重复这项检查,因为它的日志保留了画面的另一半。

把已启用的功能和保留设置记在输出旁边。同一台硬件今天可能沉默,在开启遥测的固件更新之后就会变得多话。

相关文章