当 VPN 载荷加密时,路由器日志能显示什么
加密隐藏的是载荷,不是流量。对比家庭网关记录的内容与上游观察者保留的内容,然后检查你自己的计数器。
加密决定数据包的内容能否被读取,却完全不说数据包的存在、大小和时间是否会被记录下来。转发加密隧道的路由器看到一条必须投递的流,它可以计数、打时间戳并归属这条流。对比家庭网关记录的内容与上游网络记录的内容,差异就在于两者各自有理由保留哪些字段。
这才是有用的比较,因为这两种记录在隐私讨论中经常被混为一谈。它们回答不同的问题,保存期限也不同。
两个观察者,两种不同的记录
你边缘的网关知道这条流使用了哪个本地接口,当它自己分配地址时,也知道当时哪个设备持有该地址。它还可能看到你查询了哪个解析器、联系了哪个端点。在上游,同样的流量经过转换后到达,于是另一个网络只能看到一个由全家共享的公网地址,这就是 RFC 3022 中描述的功能。两个观察者都没有读取载荷,两份记录也都不包含对方。
字节总量也属于这一类。流量计数器记录流量经过,却不记录它是什么。
哪些字段真的会留下痕迹
某台设备存储什么取决于启用了什么,因此任何普遍性的断言都值得怀疑。表格列出了实践中重要的字段以及每个字段的含义。
| Field | Home gateway | Upstream observer |
|---|---|---|
| VPN endpoint address | Yes, as a destination | Yes |
| Local device mapping | Only where it assigns the address | No |
| Byte and packet counts | If statistics are enabled | Usually |
| Flow start and end | If connection logging is on | Usually |
| DNS queries | If the resolver is local | Only if the resolver is theirs |
| Payload contents | No | No |
要按行读表,而不是按列读,因为每一行支撑的结论不同。端点地址表明存在一条隧道,而不表明它承载了什么。本地设备映射是把流与某个人关联起来的那一行,也是家庭网关保留、而上游观察者通常不保留的那一行。
载荷这一行在两列中相同,而这正是加密真正保证的部分。其余一切都取决于日志记录的选择。
终止隧道的路由器看得更多
转发他人加密流量的网关与自行运行隧道的路由器处于不同位置。后者保存隧道状态及其密钥,因此能看到内部地址和隧道内的目的地。如果这台路由器还为内网转换地址,它的日志就能在一条记录中把设备与内部目的地关联起来。这与外层流是不同的披露,却出自同一个盒子。
把它与普通网关后的笔记本电脑客户端相比:网关记录外层流,客户端自己的日志保留内部细节。问谁掌握画面的哪一半,比问网络能否看穿加密更有用。第二个问题的诚实答案是不能,而且它也不是决定你暴露面的那个问题。
检查你自己的设备记录了什么
在推断别人的设备之前,先看看你自己的设备。下面的命令会列出带计数器的防火墙规则、仍然存活的连接条目,以及提到某条连接的日志行。它们适用于基于 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
带计数器的规则集会告诉你设备愿意统计什么,连接表显示的是活动流而非历史。日志行能确认固件到底会不会写连接事件,这能解决大部分争论。四条命令全部输出为空,说明这个盒子只转发不记录,这也是一种答案。在客户端上重复这项检查,因为它的日志保留了画面的另一半。
把已启用的功能和保留设置记在输出旁边。同一台硬件今天可能沉默,在开启遥测的固件更新之后就会变得多话。