排查

如何判断究竟是什么在封锁你的连接

隧道不通时,本能反应是开始改设置。这通常会白白耗掉一个晚上。先花五分钟做诊断,就能知道你碰到的是五个迥然不同的问题中的哪一个,而每一个都有各自的解法。

阅读约 1 分钟最后复核

从症状入手

连接失败的方式本身就有诊断价值。在动手做任何事之前,先把你看到的现象与这张表对照一下。

失败形态与可能原因
你观察到的现象最可能的原因章节
卡住,然后毫无回应地超时按地址或按协议静默丢包地址与协议
能连上,片刻后骤然中断分类之后注入的 TCP 重置重置
立刻失败,报域名解析错误DNS 操纵DNS
能连上也能保持,但慢到无法使用对已分类流的限速限速
移动数据下能用,Wi-Fi 下不能(或反过来)特定网络的策略——两者过滤方式不同对比
昨天还好好的,什么都没改,今天就不通了端点地址在带外被列入封锁名单地址与协议

第一步:是 DNS 的问题吗?

DNS 操纵是最廉价的封锁方式,因而也最常见,同时也是最容易确认或排除的。方法是向两个不同的解析器问同一个问题,然后比较答案。

  1. 问你所在网络的解析器

    不带其他参数地运行 `nslookup example.com`(Windows)或 `dig example.com`(macOS 和 Linux),让它使用网络分配给你的那个解析器。

  2. 直接问一个公共解析器

    运行 `nslookup example.com 1.1.1.1` 或 `dig @1.1.1.1 example.com`。这会绕过网络自己的解析器——前提是出站 DNS 根本被允许。

  3. 比较两个答案

    地址不同、返回 0.0.0.0 或 127.0.0.1、或者一边返回 NXDOMAIN 而另一边给出有效答案,都表明存在拦截。答案一致则可以排除 DNS。

  4. 如果第二个查询也失败或返回同样错误的答案

    那么网络很可能把所有 53 端口的流量都重定向到了它自己的解析器,这很常见。对策是加密 DNS(DNS-over-HTTPS 或 DNS-over-TLS),如今多数操作系统都已原生支持。

要清楚修好 DNS 能带来什么。它给你一个正确的地址。至于你是否被允许到达那个地址,它毫无作用;而且紧接着的 TLS 握手中,主机名还会再一次以明文被发送出去。DNS 问题和连接问题是两码事,两者同时存在也很常见。

第二步:是地址被封还是协议被封?

如果域名解析正确但什么都连不上,下一个问题就是:是地址不可达,还是你想对它做的那件事被拦住了。这两者在应用层面看起来一模一样,在命令行里却很容易区分。

  1. 用一个纯 TCP 连接测试端口

    在 macOS 或 Linux 上:`nc -vz <地址> 443`。在 Windows 上:`Test-NetConnection <地址> -Port 443`。这只打开一个裸 TCP 连接,别的什么都不做。

  2. 解读结果

    如果 TCP 连接成功,说明地址和端口是可达的,问题出在你在其之上所说的协议——过滤器把流量分类了。如果 TCP 本身就失败,说明地址或端口被整个封掉了。

  3. 在同一地址上测试第二个端口

    如果 443 失败而另一个端口成功,说明封锁是针对端口的。如果所有端口都失败,说明被封的是地址。

  4. 测试另一个端点

    如果用同样的设置和同样的协议,另一个地址能用,那么第一个地址已被列入封锁名单,再怎么调协议也救不回来。

这个区分是本指南中最有价值的东西。地址被封,需要换一个端点。协议被封,需要换一个协议或传输方式。用错药方,会让问题看起来无解。

第三步:注入的重置

能建立、过了一点流量、然后骤然死掉的连接,和压根建立不起来的连接是不同的特征。这通常意味着过滤器需要先看到一些字节才能分类这条流,随后通过伪造一个看似来自对端的 TCP 重置把它杀掉。

  • 它可复现且迅速——通常在一两秒内,而且每次都在同一个点上。真正的故障则杂乱无章。
  • 对端对此一无所知。从服务器的角度看,客户端就是消失了。
  • 它的时机取决于握手而非流量大小:传更多数据并不会让它提前发生。

如果你手边有抓包工具,那么同一条流中某个重置包的 TTL 值与其他包明显不同,就是注入的有力证据,因为它是在比真实端点更靠近你的地方生成的。这是佐证,而不是你采取行动所必需的。

解法在协议层面:分类器认出了某样东西,因此答案是换一种不呈现那样东西的传输方式。换端点没有用,因为对新端点同样会发生同样的分类。

第四步:限速

最难确认的情形,是连接能用但慢到无法使用——因为没有对照测量的话,它与普通拥塞无从区分。

  1. 测量隧道

    通过隧道跑一次吞吐量测试并记录数值,最好在几分钟内多测几次。

  2. 在同一时刻测量不走隧道的情况

    直接跑同样的测试。反复测试都持续存在的明显差距,就是第一条证据。

  3. 看形态,而不只是看数字

    被限速的流有一个典型特征:开头一两秒很快——那是分类器还没作出判断的时候——随后稳定在一个低而异常平稳的速率上。真正的拥塞是波动的。低速率下的平稳,就是那个破绽。

  4. 试另一个端口和另一个端点

    如果这个上限不管换哪个端点都跟着协议走,那就是基于分类的整形。如果它跟着端点走,那更可能是那个端点的容量问题。

第五步:对比不同网络

信息量最大的测试不花一分钱:把完全相同的配置放到另一个网络上试——用移动数据代替 Wi-Fi,或者换一个完全不同的 Wi-Fi 网络。

  • 在一个网络能用、另一个不能:策略属于那个网络,而不属于你的设备、配置或端点。你这边没有什么需要修的。
  • 在所有网络都失败:问题出在端点、配置或凭据上,该往那里查。
  • 两边都能用但其中一边很慢:那个网络在做整形,而不是封锁。

做好记录

过滤策略会随时间变化,同样的症状三个月后可能有不同的成因。用几行字记下日期、网络、症状、你改了什么以及结果,就能把每一次事件变成可以据以推理的材料,而不必每次都从头再查一遍同样的东西。

常见问题

我的 VPN 连上了,但网页打不开。是怎么回事?

隧道是通的,但流量没能经由它到达目的地。常见原因包括:DNS 配置仍然指向本地网络的解析器;机器上另一个网络工具造成的路由冲突;或者 MTU 问题——最后这一种通常表现为小请求正常而较大的页面卡住。

我怎么知道运营商是不是在限速我的 VPN?

在同一时刻分别测量走隧道和不走隧道的吞吐量,多测几次。持续存在的差距提示整形;在最初的快速爆发之后出现的低而异常平稳的速率,是它的典型形态。真正的拥塞是波动的。

为什么我的 VPN 在移动数据上能用,在 Wi-Fi 上却不行?

因为它们是过滤策略不同的两个网络。这是个有用的结论而不是故障:它告诉你问题出在那个 Wi-Fi 网络的策略上,而不是你的配置或端点,你的设备上没有什么需要改的。

换端口能解决 VPN 被封的问题吗?

只有当封锁本来就是基于端口时才行,而这一点你可以用几个端口上的纯 TCP 连接测试确认。如果端口可达但你的协议在上面被丢弃,那么换端口不会有任何改变,因为分类发生在连接建立之后。

HushTunnel 如何运用这些设计

HushTunnel 采用 VLESS 搭配 REALITY 与 XTLS,也就是这些指南中介绍的设计,并且不保留你访问过哪些网站的记录。

全部指南