打开钱包、启动守护进程,并在启用任何东西之前画出三支箭头。一支箭头从钱包指向某个节点的 RPC 端口,一支承载守护进程的对等同步,一支把本地提交的交易送往转发路径。它们是配置各不相同的三条连接,而 VPN 或匿名网络可能覆盖其中一条、两条,或一条都不覆盖。

按软件打开它们的顺序逐条走。给每支箭头标注目的地和传输方式,才能让后面的隐私主张变得可检验。顺序很重要,因为后面的主张通常只覆盖其中一条。

先画出钱包到节点的连接

与远程节点通信的钱包,会把 RPC 请求发到那个节点的地址和端口。带本地守护进程的钱包则改为与本机回环接口通信。这是两种不同的信任关系,尽管日常说话时两者都被叫作“节点”。

记下钱包配置使用的地址、端口和传输方式。如果钱包有自己的代理设置,要把它与守护进程的设置分开记录;配置一个进程并不会配置另一个。

也正是在这里,公开的 RPC 端点变得诱人。为了让图简单一点而暴露节点的 RPC 服务,是用一条网络路径换一块攻击面。把钱包到节点的链路放在私有路径或回环接口上,并记录清楚是哪一种。掩盖这层暴露的图,比没有图更糟。

接下来,跟随守护进程的对等流量

正在同步的守护进程会向对等节点打开出站连接,并通过它的对等端口交换链上数据。那部分流量不是钱包的 RPC 链路,也不会自动经过钱包的代理。它遵循守护进程自己的网络设置和主机的路由表。

记下对等端口、连接数量,以及守护进程是否被配置为对等流量使用代理。然后查一下某条样例对等地址的主机路由。如果 VPN 抢占了默认路由,对等连接大概会走它;如果守护进程绑定在某个特定接口上,就可能不会。这两个事实决定了箭头的走向。

关于观察者的问题也会随这条路径而变。VPN 会把对等连接对本地接入网络隐藏起来,但 VPN 端点和那些对等节点自己看到的是另一幅画面。两种观察都不能证明钱包的请求走了同一条路径。

然后再把交易转发路径单独拿出来

本地提交的交易可以通过配置好的中继或代理送往网络。在当前的 Monero 守护进程文档里,那个选项只把你指向代理的交易转发流量送过去。它并不会把每条 RPC、钱包和同步连接都变成走代理的流量。

项目关于匿名网络的文档把 Tor 和 I2P 的集成描述为实验性,并限定了转发行为的范围。要读你实际运行的那个版本文档,因为较早的讨论用的是 Kovri 之类的名字,描述的组件如今已不复存在。

在图上把转发路径单独留着。当钱包的余额查询走远程节点时,那笔经由代理离开的交易有两个不同的观察者,而“交易走了代理”这件事对查询路径什么也没说明。

等三条路径都标注完之后,再加入 VPN

箭头画好之后,标出 VPN 实际承载了哪几条。全隧道 VPN 会抢占主机的默认路由,所以跟随默认路由的连接会走它。分流隧道、被绑定的接口,或经由某个特定地址出去的代理,都可能让某几支箭头留在隧道之外。

现在把观察者模型明确写出来。在匿名网络连接跑在 VPN 内部的设计里,本地接入网络看到的是外层 VPN 连接,而 VPN 一侧看到的是继续向前的那条连接。这是观察者的变化,而不是识别信号消失的证据。

把故障行为作为同一次梳理的一部分来检查。VPN 掉线时,守护进程会不会退回直连对等节点,钱包会不会继续轮询远程节点,转发代理会不会以关闭方式失败?除非配置了阻断,重连通常意味着一次新的直连尝试,而不是安静。

验证那些你以为已经配置好的路径

使用主机自己的工具:读取每个目的地的路由,检查正在监听和已建立的套接字,并确认每条连接属于哪个进程。要在钱包、守护进程和转发都在运行时做这件事,因为只在启动时存在的路径,可能在重连之后就消失了。

在 VPN 重连之后、守护进程重启之后再重复一次。把目的地和传输方式与图对照。如果某支箭头移动了,隐私模型也就跟着移动了,即使每个进程仍然报告自己健康。

记下三个目的地、各自的传输方式,以及你打算把它们对哪个观察者隐藏。当一台机器上跑着多个独立客户端时,一张带名字标注观察者的简短路径图,比单一一个 VPN 指示有用得多。

相关文章