PassWall2 TLS 握手失败怎么办?按日志逐步排查
简答:先不要直接开启“允许不安全连接”。在 PassWall2 中复制完整运行日志,先判断失败发生在订阅更新、单个节点连接,还是代理建立后的目标网站访问;然后依次检查路由器时间、证书链、SNI/servername、端口、ALPN、Reality 参数和核心分配。
定义:PassWall2 TLS 握手失败,是代理核心在建立加密连接时未能完成证书验证、参数协商或底层 TCP 连接的错误。
先试这一步:用日志判断故障发生在哪一跳
本文是第三方使用指南,不代表 PassWall2 或任何节点服务的官方页面。进入 LuCI 的“服务 → PassWall2”,先确认当前节点、核心和运行状态;随后打开运行日志或通过 SSH 查看日志。PassWall2 项目文档列出的常见入口包括“Services → PassWall2”“Node List → Add Node”和“Save & Apply”,项目仓库也给出了通过 logread | grep passwall2 查看服务日志的方法。PassWall2 项目仓库
先复制完整错误,订阅链接、UUID、密码、域名和公网地址应打码。不要只复制最后一行,因为前面的 server、port、核心名称和具体节点名往往决定排查方向。
| 日志或现象 | 优先检查 | 首次处理动作 |
|---|---|---|
certificate verify failed、x509 | 时间、SNI、证书名称、CA | 校准时间,核对 servername 是否与证书 SAN 匹配 |
handshake failure、no mutually supported protocol | 协议、TLS、ALPN、核心 | 确认节点协议与 Xray 或 sing-box 核心匹配,再核对 ALPN |
connection reset、EOF | 端口、SNI、节点端口、服务端状态 | 用同一节点测试 TCP 连通性,并与其他节点对照 |
timeout、context deadline exceeded | DNS、路由、MTU、网络出口 | 先测试域名解析和 TCP 连接,再切换网络复测 |
| 订阅更新时报 TLS 错误 | 订阅域名、路由器 DNS、系统时间 | 把订阅下载失败与节点连接失败分开处理 |
按“时间→证书→节点参数→核心→网络”顺序排查
- 检查路由器时间和时区。在 LuCI 的“系统 → 系统”中查看时间、时区和 NTP 设置;也可通过 SSH 执行
date查看当前时间。OpenWrt 文档说明,许多设备没有硬件时钟,系统时间通常需要通过 NTP 同步。时间明显错误时,先修正 NTP,再重新启动 PassWall2 并复测。OpenWrt NTP 文档 - 区分证书错误与节点参数错误。在“服务 → PassWall2 → 节点列表”打开出错节点,核对服务器地址、端口、协议、传输方式、TLS 开关和 SNI/servername。Xray 文档说明,serverName 会用于证书主机名验证;域名形式的 serverName 也会作为 SNI 发送,而直接填 IP 时不会发送 SNI。Xray TLS 配置文档
- 检查 ALPN 是否与传输方式匹配。如果日志出现协议协商失败,先恢复节点提供方给出的 ALPN,不要自行添加多个值。Xray 文档说明 ALPN 是握手时协商的应用层协议列表;某些 WebSocket 或 HTTPUpgrade 场景通常需要
http/1.1,而并非所有服务都接受h2。如果节点是 gRPC、WebSocket、HTTPUpgrade 或其他传输方式,传输方式、路径、Host 和 ALPN 应成套核对。 - 如果使用 Reality,成套核对参数。Reality 节点不能只改一个字段。检查 servername、fingerprint、public key、short ID、握手服务器和端口是否来自同一份配置。Xray 文档列出的客户端字段包括 serverName、fingerprint、shortId 等;sing-box 文档也将 public_key、short_id 和 handshake 作为 Reality 配置字段。Xray Reality 文档 sing-box TLS 文档
- 确认核心分配正确。在节点或核心设置中确认该节点实际由 Xray 还是 sing-box 运行。协议字段能显示,不代表当前核心一定支持全部参数;如果切换核心后日志从“字段解析失败”变成“连接超时”,说明配置解析问题可能已经解决,但网络或节点本身仍需继续排查。
- 检查 CA 证书和固件包。如果多个域名都出现证书链错误,检查系统是否安装了
ca-certificates或ca-bundle,并确认软件源与固件版本匹配。OpenWrt 将系统 CA 证书作为基础系统包提供;具体包名和版本应以当前固件的软件源查询结果为准。OpenWrt 基础系统软件包索引
PassWall2 界面中的可执行复测流程
- 在“服务 → PassWall2 → 节点列表”只保留一个待测节点,暂时不要同时修改 DNS、分流和 TUN 设置。
- 点击保存并应用,然后查看 PassWall2 运行日志。记录测试时间、节点名称、核心名称和第一条明确错误。
- 若界面提供节点连通性或 TCPing 检测,先测服务器地址和端口。TCP 能连通只说明端口可达,不代表 TLS、协议认证或代理转发已经成功。
- 使用第二个同协议节点对照。如果只有一个节点失败,优先核对该节点的端口、SNI、证书、Reality 参数或服务端状态;如果多个节点同时失败,优先检查路由器时间、DNS、核心、CA、透明代理和防火墙规则。
- 再用另一条上网网络复测,例如临时使用手机热点。若不同网络结果明显不同,应继续检查 DNS、MTU、IPv4/IPv6、出口路由或网络侧连接限制,而不是先关闭证书验证。
- 确认代理连接后,不要只用出口 IP 判断成功。还要检查 PassWall2 日志、DNS 请求、IPv6 是否绕过、目标应用是否使用自定义 DNS,以及单个域名和普通 HTTPS 请求是否都能复现。
复测时每次只改一个变量,并记录“修改前日志—修改内容—修改后结果”。这样才能判断问题是被修复,还是因为节点、网络或缓存变化而暂时消失。
“允许不安全连接”能不能解决?
只能作为短时诊断,不应作为长期修复。Xray 文档说明,allowInsecure 为真时不会验证远端 TLS 证书的有效性;这会降低对中间人攻击的防护,且不能修复错误的 SNI、端口、协议、Reality public key 或服务端配置。Xray 文档还将该选项标记为不推荐,建议优先使用正确的证书验证或证书指纹配置。Xray TLS 安全选项说明
如果必须用于定位,可先备份节点配置,只对一个节点短时开启,立即重新测试并记录结果:开启后成功,通常说明证书链、证书名称或本地 CA 是重点;开启后仍失败,则问题更可能在端口、SNI、协议、核心、网络或节点服务端。定位结束后应关闭该选项,恢复证书校验。
仍然失败时,按这份清单收集信息
- OpenWrt 或定制固件版本,以及系统架构。
- PassWall2 版本、实际运行的 Xray 或 sing-box 核心版本。
- 节点协议、传输方式、TLS 或 Reality 是否启用。
- 完整脱敏日志,不要只提供“TLS handshake failed”这一行。
- 失败范围:订阅更新、单个节点、多个节点、所有设备,还是只有某个目标域名。
- 路由器时间、时区、IPv4/IPv6 状态和当前 DNS 设置。
- 是否同时启用了其他代理插件、TUN、透明代理或自定义 DNS 接管。
- 同一节点在另一网络、另一核心或另一设备上的复测结果。
不要公开订阅完整链接、UUID、密码、私钥、Reality public key 组合、内网地址或带认证信息的日志。若日志包含证书内容,也应先确认是否需要脱敏。
常见误区与回滚方法
不要同时升级插件、替换核心、修改 DNS、开启 TUN、关闭证书验证并更换节点。这样即使恢复连接,也无法知道真正原因。建议先导出或复制当前节点配置,再按单节点、单设备、单变量方式测试。
如果修改后全网无法访问,先在 PassWall2 中停止服务或关闭透明代理,恢复原来的默认节点、DNS 和分流设置,再点击保存并应用。若仍异常,检查是否还有其他代理插件接管防火墙或 DNS;最后根据此前备份恢复配置。具体菜单名称可能随版本变化,字段以当前界面为准。
常见问题
PassWall2 出现 TLS handshake failed,第一步应该改什么?
第一步不要改证书校验。先复制完整运行日志,确认错误发生在订阅下载、节点 TLS 握手,还是代理连接后的目标网站访问;随后检查路由器时间和节点的 server、port、SNI/servername。
关闭 allowInsecure 或“允许不安全连接”后能连,是否说明节点正常?
只能说明关闭证书验证后握手可能继续,并不能证明节点参数完全正确。还要核对证书名称、SNI、CA 和服务端证书链;测试完成后应恢复证书验证,避免长期跳过证书检查。
Reality 节点 TLS 握手失败,应该重点看哪些字段?
重点核对 servername、fingerprint、public key、short ID、握手服务器和握手端口,并确认这些字段来自同一份配置、由匹配的 Xray 或 sing-box 核心运行。不要只替换其中一个字段。
只有一个节点失败,其他节点正常,问题在路由器吗?
不一定。单节点失败时,应优先核对该节点的端口、SNI、证书、Reality 参数、协议和服务端状态;再用另一网络或另一核心复测。多个节点同时失败时,才更应优先检查时间、DNS、CA、核心和防火墙。
TCPing 能通,为什么 PassWall2 仍然 TLS 失败?
TCPing 只能说明目标端口在测试时可建立 TCP 连接,不能证明 TLS 证书、SNI、ALPN、协议认证或后续代理转发成功。还需要结合 PassWall2 核心日志和单节点实际请求复测。
相关阅读
参考资料
- PassWall2 项目仓库:LuCI 入口、节点配置与日志排查
- Xray TLS 配置文档:serverName、ALPN、allowInsecure 与 CA
- Xray Reality 配置文档:serverName、shortId 与客户端参数
- sing-box TLS 文档:Reality public_key、short_id 与握手字段
- OpenWrt NTP 文档:系统时间与网络校时(openwrt.org)
- OpenWrt 基础系统软件包索引:CA 证书包(openwrt.org)