问 VPN 能看到什么,答案取决于你处在路径的哪一段。在会话层,服务商掌握认证事件和字节数;在数据包层,是目的地址和时序;在 DNS 层,可能是域名本身。每一层回答的是不同问题,没有任何一个开关能让你在层与层之间切换。

下结论前先确定层

同一条连接在每个点留下的记录并不相同,关于隐私的说法只有指明那个点才有意义。逐列读这张表:那一层存在什么、服务商在那里能看到什么,以及同样的记录仍然说不出什么。

LayerVisible thereNot visible there
Session and authenticationAccount, client address, start and stop times, assigned address, byte countsURLs, page content, search terms
Forwarded packetsDestination address and port, sizes, timing, often the TLS server nameHTTP path, headers, response body
DNS resolverQueried names and the client that askedPage content and later requests
TLS-terminating proxyFull request line, headers and bodyNothing, by design

把一层当成全貌,正是夸大宣传与虚假安心共同的起点。声称不记录浏览的服务商,可能在网址记录上说的是实话,却仍保留会话记录;而只显示地址的抓包,若不配合反向查询和猜测,并不会变成浏览历史。

评估一份政策时,先找出描述每一层的那句话。如果政策没有把它们分开,就该问存在哪些记录,而不是接受一句关于加密的笼统说法。

会话清点:标准 OpenVPN 服务器保留什么

开箱即用时,OpenVPN服务器并不抓取流量。默认输出是一份会话清单:通过认证的账号、它来自的源地址、开始与结束的时间戳、分配到的隧道地址,以及两个方向的字节总量。那是会话清单,不是目的站点列表。

日志选项可以增加细节。更高的详细级别会写入更多握手信息,状态文件可以列出已连接的客户端,但这两者都不会把服务器变成透明代理。要产生网址,必须终止 TLS 或运行显式代理,而两者改变的是信任结构,不是打开某个隐藏功能。

正因如此,不记录浏览这一说法,精确版本比听起来要窄。服务器不知道页面,但它知道存在过一条会话,以及大约有多少数据经过。这条会话记录是否保留、保留多久,是另一项政策问题。

内层与外层数据包是不同的证据

抓包是看清隧道里实际流过什么的手段。在服务器上指定隧道接口,写入一份可以离线分析的文件:

sudo tcpdump -ni tun0 -w /tmp/tun.pcap
sudo tcpdump -r /tmp/tun.pcap -nn | head

该文件包含解密后的内层流量:以客户端隧道地址为源、目的地址与端口、数据包大小与时间。除非某处终止了 TLS,否则其中没有 HTTP 路径或响应正文,而且这属于敏感数据,留存与否是政策决定,而不是调试便利。

在物理接口上抓包看到的是另一回事。那里是以 VPN 端点为目的地的外层数据包,里面是加密载荷。一旦存在虚拟适配器,该文件中出现无关地址是正常的,因为隧道设备承载内层流,加密传输承载外层流。

先问抓包要回答哪个问题。应用对隧道的使用在虚拟适配器上可见;隧道到端点的可达性在物理适配器上可见。把任何一份文件当成完整图景,都会得出数据支撑不了的结论。

DNS 才是域名变可见的地方

DNS 仍是实务上的例外。解析器看得到被要求解析的域名,因此运营它的人即便后续连接都已加密,也能知道客户端在查哪些站点。隧道抓包显示地址,解析器显示域名。

检查解析器是用哪个地址去访问外部服务的。答案就是解析器的出口地址,把它与 VPN 出口比对,就能判断查询是否走了隧道:

dig +short myip.opendns.com @resolver1.opendns.com
dig example.com
sudo tcpdump -ni any udp port 53

如果那个地址与本地连接一致而不是隧道出口,说明查询绕过了 VPN,域名在本地路径上是可见的。客户端更新后要重做这项检查,因为新版本可能改变配置文件安装的解析器。

加密 DNS 只是把可见性挪走,而不是消除。网络不再看到查询,解析器仍然看得到,信任问题只是换了手。连接握手中的 TLS 服务器名是另一种部分信号:即使载荷不透明,它往往仍会保留,所以目的地址并不是转发服务器能观察到的唯一元数据。

三类记录,以及谁可以读

会话计量、按域名的记录和泄漏证据是三种不同的产物,对应三种不同的义务。会话日志成本低、敏感度低,回答的是谁在何时连上。按域名的记录需要记录型解析器或显式代理,并对受影响的人产生披露义务。泄漏证据则是客户端一侧的测试,把解析器暴露的信息与隧道出口作比较。

写清楚你运营这三者中的哪些、谁能读、保留多久。服务不保留日志这类说法只描述一层,也只在该范围内成立。同一家服务商可以在会话上说的是真话,在 DNS 上却是错的。

让测试可以复现:同一个解析器查询、同一个抓包接口、同一种比对。无法在指明的层上检验的隐私声明是口号,不是运营事实。

相关文章