装了 VPN?局域网仍然看得到这台设备
隧道只是改道你的上网流量,第二层身份原封不动。看看局域网、出口和你所用的服务商究竟还能观察到什么。
把隧道架起来,并不等于局域网就忘了这台设备,尽管人们通常这么以为。邻居表、租约和本地名称记录说明并非如此。隧道改变的是数据包从哪儿出去,并不改变邻居能看到什么。
有两个视角需要检查。它们都不是大多数人最先做的那种“藏没藏住”的测试。
邻居仍然认得这台设备
本地地址、硬件地址,以及在多数网络里租用的主机名,只要设备还连着,就始终挂在它身上。路由器会把它们列出来,在扁平网段上其他主机也能学到。邻居发现、地址分配和本地名称解析都发生在网段上而不是隧道里,所以 VPN 压不住它们。承载你流量的帧是端到端加密的,而租约和邻居条目从来就不在那段对话里。
隧道藏起来的是目的地清单。路由器看到的是一条通往单一端点的加密流量,而不是一连串站点,不过流量大小、时间特征和端点声誉仍然说明了不少东西。
出口地址只是一种身份
VPN 会隐藏局域网上的设备这一说法只在很窄的意义上成立:远端观察者不再知道你的公网地址。这丝毫没说到你所连的接入点,它仍然知道你正在和哪个硬件地址通信。把两种观察当成同一个问题,正是人们在隧道做了分内之事时却断定它失败的原因。把它们分开,每个结果才能单独解读。
位置还有一条完全不经过地址的通道。浏览器定位可以从附近接入点的扫描结果得出,而不是靠地址,因为操作系统会把这些标识符交给一个早已把它们映射到地点的查询服务。拔掉无线网卡就去掉了这个输入,换一个出口国家则不会。
服务器若是租来的,服务商看得见模式
把隧道跑在租来的实例上,只是把观察挪了位置,而不是消除它。托管服务商看得见外层流量的源和目的,因为它必须为它路由;端点地址则会暴露这是哪项服务。载荷依然不可读,但一个只与单一对端通信、不跟别的任何对象打交道的宿主并不难归类。这段描述里没有任何一步需要破译密码。
模式不是内容。如果担心的是服务商的记录,答案是选择有明确政策、司法辖区你能接受的服务商,而不是换一种更强的密码。更强的密码丝毫改变不了流量从外面看起来的样子。
拆分隧道决定谁看得见你的查询
用工作隧道时,管理员能观察到什么,取决于客户端装入了哪些路由。如果隧道里只有公司网段,网关记录的恰好就是那一部分流量,别的一概没有。没有拆分隧道时,每个数据包都要经过雇主,包括对方把解析器推送到客户端时产生的域名查询。正是这个差别,决定了雇主究竟能观察到你哪些习惯。
去查路由表,而不是凭想当然;还要留意是谁在回答某个公网名称的查询。一旦对方的解析器开始回答你的查询,哪怕页面是从别处抓取的,查询也留在他们手里。
两个视角都查过,再决定信哪一个
让同一网段上的第二台设备解析你的主机名并打印它的邻居表,然后从外部观察某项服务报告的地址是哪个。这两个答案描述的是不同层次,任何单一“藏没藏住”的测试都覆盖不了两者。
arp -a
ip route show default
resolvectl status | head -n 20
dig +short example.com
测试时一次只改一层。关掉发现协议,隧道没动,网段就失去了那个视角;换掉出口国家,网段没动,网站的记录就变了。