VPN 服务商能看到你访问哪些网站吗?
默认的 OpenVPN 服务器记录的是会话,而不是网址。在断言服务商能看到什么之前,先比较连接日志、隧道抓包和 DNS 泄漏检测。
问 VPN 能看到什么,答案取决于你处在路径的哪一段。在会话层,服务商掌握认证事件和字节数;在数据包层,是目的地址和时序;在 DNS 层,可能是域名本身。每一层回答的是不同问题,没有任何一个开关能让你在层与层之间切换。
下结论前先确定层
同一条连接在每个点留下的记录并不相同,关于隐私的说法只有指明那个点才有意义。逐列读这张表:那一层存在什么、服务商在那里能看到什么,以及同样的记录仍然说不出什么。
| Layer | Visible there | Not visible there |
|---|---|---|
| Session and authentication | Account, client address, start and stop times, assigned address, byte counts | URLs, page content, search terms |
| Forwarded packets | Destination address and port, sizes, timing, often the TLS server name | HTTP path, headers, response body |
| DNS resolver | Queried names and the client that asked | Page content and later requests |
| TLS-terminating proxy | Full request line, headers and body | Nothing, 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 上却是错的。
让测试可以复现:同一个解析器查询、同一个抓包接口、同一种比对。无法在指明的层上检验的隐私声明是口号,不是运营事实。