单个网站报 ERR_CONNECTION_RESET

只有一个网站报 ERR_CONNECTION_RESET,其他都正常?逐步排查:网络、扩展程序、代理、DNS、时钟,以及用 curl 判断 SNI 过滤。

其他网站都能打开,唯独一个总是显示“无法访问此网站”和 ERR_CONNECTION_RESET。刷新也没用。本指南是一棵决策树。每一步要么找到原因,要么排除一个原因,顺序从最快的检查到最能说明问题的检查。

“连接被重置”到底是什么意思

TCP 连接可以正常地结束,也可以被一个重置数据包(RST)立即拆掉。如果在网页送达之前收到了重置,Chrome 和其他 Chromium 浏览器会显示 ERR_CONNECTION_RESET。Firefox 会显示一个类似的“连接被重置”页面。重置可能来自网站的服务器、你自己电脑上的软件,或者网络中间冒充两端之一的设备。

这就是为什么同一个错误会有如此不同的原因。关键是要弄清楚重置是谁发的,在什么时候发的。

第 1 步:真的只有一个网站吗?

打开两三个不相关的网站,包括一个你很少访问的。如果有好几个都打不开,问题出在你的网络连接、路由器或设备,而不是那一个网站。重启路由器,并检查同一网络上的其他设备是否正常。如果只有一个网站打不开,就继续往下。

第 2 步:是不是只在一个网络上出问题?

这是信息量最大的测试,而且不花钱。用移动数据代替 Wi-Fi 打开这个网站,或者让笔记本电脑通过手机热点上网。如果网站在一个网络上能打开,在另一个网络上被重置,说明出问题的那个网络有关系。常见原因见为什么网站用移动数据能打开,用 Wi-Fi 却不行?如果在哪里都打不开,更可能是网站本身或你的设备的问题。

第 3 步:换个浏览器,用无痕窗口,关掉扩展程序

试试隐私或无痕窗口,大多数扩展程序在其中默认是关闭的。然后再换一个浏览器试试。广告拦截器、隐私扩展、“安全浏览”插件和企业浏览器策略都可能关闭连接。如果网站在无痕窗口中能打开,就逐个重新开启扩展程序,直到错误再次出现。

第 4 步:关闭其他 VPN、代理和 HTTPS 扫描

任何位于你流量路径上的东西,都可能重置它不喜欢的连接:

  • 其他 VPN 或代理应用。把它完全关闭,然后再测试。
  • 杀毒软件的“HTTPS 扫描”或“网页防护”。一些安全套件会检查加密流量,并切断它们认为有风险的连接。暂时停用这项功能来测试,然后再重新开启。
  • 系统代理。在 Windows 上,查看“设置 → 网络和 Internet → 代理”。在 macOS 上,查看“系统设置 → 网络 → 你的连接 → 详细信息 → 代理”。一个你不认识的代理,或者旧应用残留的代理,可能会让个别网站打不开。只删除你确定是自己设置的,如果是受管理的电脑,请询问 IT 团队。

第 5 步:清除 DNS 缓存,试试加密 DNS

如果网站换了服务器,你的设备可能还在使用旧地址,这可能导致重置或超时。清除缓存:

# Windows (Command Prompt)
ipconfig /flushdns

# macOS
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder

# Chrome's own cache: open chrome://net-internals/#dns and click "Clear host cache"

接下来,把你网络的应答和一个独立解析器的应答做对比:先运行 nslookup example.com,再运行 nslookup example.com 1.1.1.1。如果结果不同,而且只有独立解析器的应答能用,那么问题出在你网络的 DNS。加密 DNS 可以解决这类封锁,详见 DoH 和 DoT。仅仅地址不同并不能说明问题,因为大型网站会给不同的网络分配不同的服务器。

第 6 步:检查日期和时间

时钟错误通常会导致证书错误而不是重置,但检查一下只要十秒钟。打开自动设置日期和时间,然后刷新。千万不要为了“越过”打不开的页面而点击忽略证书警告。

第 7 步:网站宕机了吗?

查看网站的状态页面或官方社交账号,或者使用公开的“是所有人都打不开还是只有我”检测工具。如果网站宕机了,就等一等。请记住,检测工具是从它自己的服务器测试的,所以它显示“正常”并不能证明你的网络能访问。

第 8 步:用 curl 读懂重置

如果网站仍然只在一个网络上被重置,就看看握手过程本身。curl 内置于 Windows 10 和 11、macOS 以及大多数 Linux 系统中。在终端中运行它,把 example.com 换成你的网站:

curl -v https://example.com

正常的连接会输出类似下面几行,然后是网页的头部。具体措辞取决于你的 curl 版本和 TLS 库:

*   Trying 203.0.113.10:443...
* Connected to example.com (203.0.113.10) port 443
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
...
< HTTP/2 200

指向基于名称过滤的模式是这样的:

*   Trying 203.0.113.10:443...
* Connected to example.com (203.0.113.10) port 443
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* Recv failure: Connection reset by peer
curl: (35) Recv failure: Connection reset by peer

逐行阅读。“Connected”表示与服务器 IP 地址的 TCP 连接成功了,所以地址并没有被直接封锁。“Client hello”是第一条 TLS 消息,它在一个名为 SNI 的字段中以明文携带网站名称。紧随其后的“Connection reset by peer”表示,名称一出现,就有东西在服务器回应之前切断了连接。有些网络则会悄悄关闭连接,curl 会把它报告为意外的文件结尾或 SSL“syscall”错误,Chrome 可能会显示 ERR_CONNECTION_CLOSED。

与其他结果对比:

curl 显示的内容可能的含义
Could not resolve hostDNS 故障或 DNS 封锁。回到第 5 步
卡在“Trying”,然后超时IP 地址无法访问:IP 封锁、防火墙或服务器宕机
在“Client hello”之后立即被重置或关闭,且只在一个网络上很可能是该网络上的 SNI 过滤
握手完成,然后出现 HTTP 错误码网站作出了回应。问题在网站一方或你的账号

为了让判断更有把握,在另一个网络上运行同样的命令。如果在那里能成功,过滤器就属于第一个网络。这并不是在猜测某种罕见情况。OONI 和互联网与社会中心(CIS)在 2020 年的一项研究发现,在 Bharti Airtel 上,访问某些网站的 TLS 连接会在 ClientHello 之后立即被切断,而在 Reliance Jio 上则是结合目标地址的 SNI 过滤。CIS 另外报告了 Jio 使用 SNI 检测,这份报告也在 ntc.party 论坛上被讨论过。更多背景:如何检查网站是否被封锁。

GreenTunnel 在哪些情况下有帮助,哪些情况下没有

GreenTunnel 是我们开发的设备端本地 VPN,所以阅读这部分时请记住我们并不中立。它针对上述原因中的两个:

  • SNI 过滤。它会改造连接最初的 TLS 数据包,例如拆分 Client hello 或它的 TLS 记录,让寻找网站名称的过滤器无法看到完整的名称。原理见 SNI、DPI 与 TLS 记录拆分。
  • DNS 封锁。查询通过加密 DNS(DoH 或 DoT)发往 Cloudflare、Google 或 Quad9,所以网络无法悄悄返回虚假应答。

它的检测网址工具会在你当前所在的网络上,针对一个网站完成第 5 步和第 8 步的对比,并告诉你这个网站是被名称过滤、收到了虚假 DNS 应答、被按 IP 地址封锁,还是一切正常。如果有某种技术有效,你可以点击使用此技术。

以下情况它没有帮助:

  • 网站宕机,或者重置来自网站自己的服务器或防护服务,
  • 封锁是按 IP 地址进行的,表现为在“Trying”时超时,
  • 单位、学校或其他受管理的网络有意封锁该网站。这个网络的规则由它的所有者制定。请遵守相关政策,如果工作需要访问,请询问管理员,
  • 原因是你自己设备上的扩展程序、杀毒软件或过期的 DNS。请直接解决这些问题。

坦白说明局限与负责任的使用

GreenTunnel 不会隐藏你的 IP 地址,也不是匿名工具。它无法绕过 IP 封锁、断网或白名单,也不承诺能打开任何特定网站。过滤器会随时间变化,不同运营商之间也不一样,所以今天的结果到下个月可能就不同了。

常见问题解答

ERR_CONNECTION_RESET 总是表示网站被封锁吗?

不是。扩展程序、杀毒软件的 HTTPS 扫描、残留的代理、过期的 DNS 或网站本身都可能导致它。只有当重置只发生在一个网络上、紧跟在 Client hello 之后,而且网站在别处能打开时,封锁的可能性才比较大。

为什么网站用移动数据能打开,用 Wi-Fi 却被重置?

两个网络使用不同的服务商、解析器和过滤器。其中一个可能会读取网站名称,或者以不同的方式应答 DNS。在两个网络上都运行 curl -v,比较各自在哪里停下。

清除 Cookie 能解决连接重置吗?

很少能。Cookie 是在连接建立之后才发送的,而大多数重置发生在那之前。当网站本身拒绝了一个有问题的会话时,清除网站数据会有帮助,但这种情况通常显示的是 HTTP 错误。

GreenTunnel 能解决公司防火墙导致的重置吗?

它不是为此设计的。受管理的网络按其所有者的政策封锁网站。请询问管理员,而不是试图绕过。

资料来源

← 全部文章