适合使用 v2rayN、v2rayNG,遇到节点超时、网页打不开或连接反复中断的用户。先区分客户端提示与 Xray 内核日志,再按本地监听、DNS、出站连接、安全握手、协议认证的顺序缩小范围。重点不是背报错,而是找到同一次请求最底层的失败原因,并用一次可重复的测试验证修改。
先分清日志来源,再看请求停在哪层
v2rayN 是图形客户端,Xray 是实际处理代理流量的内核。订阅下载失败、界面启动异常和代理出站失败,不一定来自同一套日志。看到「已启动服务」,只能说明启动流程走到了某一步,不能据此判断节点认证成功,更不能判断目标网页已经可达。
先看启动输出里的内核名称与版本,再确认当前节点实际使用的核心。v2rayNG 使用 Xray;v2flyNG 使用 V2Fly,不能把两者的字段支持范围直接画等号。特别是 VLESS、REALITY 相关问题,要围绕正在运行的内核查,不要只看客户端安装包版本。
这条链是阅读顺序,不代表所有传输都严格分成六个独立阶段。例如某些协议把认证与握手结合处理,目标域名也可能在服务端解析。定位时要问:错误里的地址是本地监听地址、节点地址,还是最终目标地址?同样是端口 443,位置不同,排查方向就不同。
打开日志:用一次请求建立可复现记录
日常保留 warning 通常足够;需要观察连接过程时先用 info,信息不足再短时切到 debug。Xray 的 loglevel 可取 debug、info、warning、error、none。这是错误日志的级别控制,访问日志是否记录还取决于 access 设置;调高日志级别不会自动修复连接。
-
确认内核
在 v2rayN 主界面的运行信息中查看启动输出,记下实际调用的内核名称与版本。若输出中连内核启动记录都没有,先处理启动失败,不要直接排查远端节点。
-
调整级别
v2rayN 进入「设置」→「参数设置」,查找「日志等级」并改为 info;v2rayNG 进入侧边菜单「设置」→「日志等级」。不同版本的分组和译名可能变化,找不到时先核对客户端版本,不要把其他内核的设置套进来。
-
重启复现
保存后重启代理服务,确认新设置已生效。关闭持续刷新的网页,只打开一个固定测试地址,记下操作时间,并保留该时刻前后约 10 秒的日志。
-
还原级别
查到原因后把级别恢复为 warning。分享日志前处理账号标识、订阅地址、节点地址和访问域名;保留时间顺序、协议名称、端口与错误链结构。
使用自定义 Xray 配置时,可核对下面的日志片段。它只是配置中的一个字段,不是可直接运行的完整配置。由客户端生成配置的模式下,应通过客户端设置修改,直接编辑临时文件可能在下次启动时被覆盖。
{
"log": {
"loglevel": "info"
}
}
failed to dial:沿错误链找真正失败的位置
failed to dial 表示某次拨号或建立连接失败,本身通常只是上层包装。它后面的 lookup、connection refused、i/o timeout 才更接近原因。先把整条错误展开读完,再决定改 DNS、端口还是路由,不要看到 dial 就重填 UUID。
failed to dial
原因:连接过程失败的概括,可能涉及地址解析、TCP 连接或传输封装。
解法:继续读其后的嵌套错误,核对目的地址和出站标签;如果只截到了这几个词,先补齐同一行日志。
lookup ...: no such host
原因:解析没有得到可用地址;可能是域名拼写、上游返回结果或 DNS 路由问题,不等同于已经证明遭到污染。
解法:先确认被解析的是节点域名还是目标域名,再检查相应 DNS 上游能否到达及节点域名的引导解析路径。
connect: connection refused
原因:连接被主动拒绝,常见于端口没有服务监听、地址或端口填错,也可能由中间设备返回拒绝。
解法:核对订阅中的端口;自建服务再检查监听地址和防火墙。重试相同配置通常不会改变端口未监听的事实。
i/o timeout
原因:某个网络操作未在期限内完成;必须结合前文判断是解析、建连还是读取阶段。
解法:保留同一节点和配置,切换一个网络复测;若只在一个网络超时,先查该网络路径,再考虑调整节点参数。
比如错误明确写着连接节点的 TCP 443 超时,此时还没有足够证据指向 VLESS 用户认证。反过来,若节点连接已建立,但后面是目标地址读取失败,就不能只查本地到节点的连通性。地址、阶段和时间必须一起看。
TLS handshake 与 invalid user:分开检查安全层和认证层
TLS 握手错误通常出现在连接已进入安全协商之后,但并不保证一定是证书问题。普通 TLS 节点要核对 serverName、证书链、系统时间及传输设置;VLESS + REALITY 则还要核对公钥、shortId、serverName 和服务端配置。两类节点不能共用一张「关闭验证」处方。
| 关键词 | 优先核对 | 不要直接推断 |
|---|---|---|
TLS handshake | 错误链是否同时含 EOF、证书错误或超时;客户端安全类型是否匹配服务端 | 不能只凭这两个词确定证书过期 |
x509: certificate has expired or is not yet valid | 客户端日期、时区、证书有效期及服务端证书部署 | 不应直接开启跳过证书验证 |
x509: certificate is valid for | 后续列出的证书域名与所验证的 serverName 是否匹配 | 连接 IP 与证书域名不同不一定是错误配置 |
invalid user | 日志来源、协议类型、用户标识以及对应服务端用户条目 | 不是所有客户端认证失败都会显示这段文字 |
EOF | 对端在何时关闭连接,是否伴随握手、传输或认证信息 | 不能单独据此认定账号失效 |
invalid user 更可能在服务端入站认证日志中提供直接线索,具体措辞随协议和版本变化。客户端有时只能看到 EOF 或连接关闭。若能查看服务端,应按时间对齐两端记录,检查 UUID 是否一致、该用户是否已加载、端口是否落到了预期入站。使用 VMess 时还要检查系统时间;VLESS 不要照搬 VMess 的 alterId 设置。
- VLESS + TLS:核对 UUID、传输类型、端口、serverName,以及服务端要求的 flow。WebSocket 方案还需核对路径与 Host,不能拿 TCP 节点的参数替代。
- VLESS + REALITY:核对 UUID、服务端对应的公钥信息、shortId、serverName、指纹与 flow。字段在不同客户端中的名称可能变化,应对照同一份节点参数。
- 系统时间:Windows 在「设置」→「时间和语言」→「日期和时间」执行同步;Android 在系统「设置」中搜索「日期和时间」,启用自动设置时间。厂商菜单分组可能不同。
context canceled:先判断是否只是请求被取消
context canceled 的意思是该操作所属的上下文被取消。关闭标签页、浏览器抢先建立连接后弃用、切换节点或重启内核,都可能产生这类记录。它不是「节点一定失效」的同义词,也不能单独证明 DNS 或证书异常。
网页能打开,为什么还有 context canceled?
先停止刷新、关闭多余标签,只打开一个页面。如果取消日志出现在页面加载完成或关闭之后,而且没有持续失败,通常不必为这条伴随记录修改节点。
点开网页就报取消,怎么找根因?
截取同一时刻前后的日志,按请求标识关联记录;若该版本没有标识,就结合时间、目标地址与出站标签判断。优先找取消之前的解析失败、握手错误或连接超时。
切换节点后刷出一串取消,需要重装吗?
切换会终止旧连接。等待新内核完成启动,再发起一次新请求;只分析新启动时间之后的记录。旧连接的取消信息不能用来判断新节点是否可用。
订阅更新失败也要查这份日志吗?
先查客户端的订阅更新结果。只有更新请求实际经过当前代理时,内核日志才可能提供对应线索;请求未进入内核时,盯着出站日志找不到订阅服务返回的具体错误。
本地端口与路由:先确认请求真的进入代理
如果内核启动后立刻出现 address already in use 或 Windows 的 Only one usage of each socket address,优先处理本地监听冲突。先确认不是另一个客户端实例仍在运行,再检查占用进程。修改代理端口后,浏览器手动代理与系统代理也要同步,不能只改客户端一处。
下面以 Windows 的本地端口 10808 为例。命令仅用于检查占用,不要把其他程序的 PID 未经确认就结束。端口并非固定默认值,应替换成当前配置里实际监听的端口。
netstat -ano | findstr :10808
若该端口提供 SOCKS 入站,可用下面的命令显式经过代理发起一次请求。Windows 使用 curl.exe 可避免部分终端对 curl 名称的别名处理;socks5h 会把目标域名交给代理端处理,而不是先由 curl 在本地解析。若入站只提供 HTTP 代理,应使用对应的 HTTP 代理参数,不能照抄 SOCKS 命令。
curl.exe --proxy socks5h://127.0.0.1:10808 --connect-timeout 10 --max-time 20 -I https://example.com/
- 本地就拒绝连接:确认代理服务正在运行、监听端口正确、入站协议匹配;此时还没有走到远端节点。
- 请求进入但选错出站:查看路由标签和命中的规则。目标被分到直连时,节点本身正常也可能打不开页面。
- 命令成功而浏览器失败:比较浏览器实际代理设置、扩展控制、独立 DNS 设置与测试命令的解析路径。
- 只部分域名失败:保留可用与不可用各一个样本,对比域名规则、解析结果和出站,而不是立即更换全部配置。
整理排错记录:每次只改一个变量
有效的排错记录不需要贴几千行。保留内核版本、故障发生时间、操作入口和一条完整错误链,比只发「连接不上」更容易判断。若一次同时改 DNS、flow、端口和传输,偶然恢复后也很难知道哪个改动有效,下次故障仍得重来。
- 写明环境:操作系统、客户端版本、实际内核版本,以及系统代理、应用手动代理或 TUN 中哪一种正在使用。
- 写明预期:例如「请求应经 SOCKS 10808 进入,再由指定 VLESS 出站访问测试地址」,而不是仅写「已连接」。
- 保留上下文:提供启动完成记录、发起请求时间和前后约 10 秒日志;保留完整嵌套错误,不只截最后一行。
- 记录单次改动:每轮只修改一项,重启后重复同一测试。无效则恢复原值,再进入下一项。
- 收尾复核:恢复日常日志等级,确认浏览器和测试命令均符合预期;更详细的基础操作可对照客户端使用教程。
读 Xray 日志的核心是定位失败边界:本地没监听,就先修本地;节点地址没解析,就先查解析;TCP 已连接但握手失败,再查安全与传输参数;认证后才出错,则继续看目标访问。把错误放回请求链里,比围着一个关键词反复试参数更可靠。