故障排查
故障排查指南 (隧道启动失败)
本文档配合 用户指南「隧道状态与失败原因」章节使用。当隧道卡片显示红色「失败」状态时, 先点卡片上的「复制错误信息」拿到失败摘要, 再按下述路径排查。
常见失败类别
启动失败会被映射为以下几类 (卡片上直接显示可读文案, 非原始日志):
| 类别 | 典型触发条件 | 排查方向 |
|---|---|---|
| 认证失败 | token / 登录态异常, 服务端返回 401 / unauthorized / auth failed | 见下方 §1 |
| 端口占用 | 远程端口或本地端口被其他进程占用 | 见下方 §2 |
| 节点不可达 | 节点连接被拒、域名无法解析、启动后 30 秒无在线确认 | 见下方 §3 |
| 进程崩溃 | mefrpc 进程异常退出 (退出码非 0) | 见下方 §4 |
| 未知 | 不属于以上任何一类的错误 | 见下方 §5 |
§1 认证失败
表现: 失败摘要含「认证失败 / token 无效 / 未授权」等字样, 或服务端返回 401。
排查路径:
- 重新登录一次 (退出账号后重新登录, 刷新本地 token), 再启动隧道。
- 确认账号仍有该隧道的使用权限 (节点是否停用、账号是否欠费/封禁)。
- 若频繁出现, 检查系统时间是否正确 (偏差过大会导致 token 签名校验失败)。
- 仍失败: 复制错误信息并附上账号节点信息提交反馈。
§2 端口占用
表现: 失败摘要含「端口被占用 / address already in use」等字样。
排查路径:
- 确认远程端口没有被其他隧道占用 (同一节点的同一远程端口只能分配给一条隧道)。
- 确认本地端口没有被本机其他程序占用 (如 80 端口被 IIS/nginx 等占用)。
- Windows:
netstat -ano | findstr :端口号查看占用进程。 - Linux/macOS:
lsof -i :端口号或ss -ltnp | grep 端口号。
- Windows:
- 占用确认后: 停掉占用程序, 或在创建/编辑隧道时更换端口。
§3 节点不可达
表现: 失败摘要含「无法连接 / 连接被拒绝 / 节点不可达」, 或启动后 30 秒无在线确认 (超时)。
排查路径:
- 使用隧道管理页的「刷新测速」确认该节点是否可达 (延迟/超时/失败)。
- 超时: 节点过载或网络波动, 稍后重试, 或换一个节点。
- 失败 (连接被拒): 节点可能下线或未开放该端口。
- 检查本机网络: 能否正常访问其他网站/服务; 代理/VPN 是否干扰了到节点的连接。
- 检查本机防火墙/安全软件是否拦截了 mefrpc 出站连接。
§4 进程崩溃
表现: 失败摘要含「进程异常退出 (退出码 N)」等字样。
排查路径:
- 确认 mefrpc 版本是否与当前节点服务端兼容 (更新页可查看最新版本; 必要时重新下载客户端)。
- 查看崩溃前终端输出: 在终端页手动执行同样的启动命令, 观察报错点。
- 配置文件损坏时也会导致崩溃: 删除
Config/frp下对应的临时配置后重试。 - 仍崩溃: 复制错误信息 (含退出码), 提交反馈。
§5 未知错误
表现: 失败摘要为原始 API 错误信息。
排查路径:
- 摘要通常已包含服务端返回的原始信息, 可据此关键词搜索或直接反馈。
- 将「复制错误信息」的内容 (应用版本 + mefrpc 版本 + 摘要) 完整粘贴到反馈中。
通用建议
- 反馈问题前, 一律使用卡片上的「复制错误信息」, 内容包含应用版本与 mefrpc 版本, 能大幅加快定位。
- 修改网络环境 (代理、DNS、防火墙) 后, 重新「刷新测速」验证节点连通性, 再尝试启动。
证书申请失败 (26.4)
「证书助手」基于 lego 的 DNS-01 流程, 有两种验证方式 (见用户指南「证书助手 → 验证方式」): DNS 账户 (一键自动) 由应用调用 DNS 服务商 API 自动读写 TXT 记录; 手动 DNS 由您自行添加 TXT 记录。
lego 下载失败 (无法准备证书组件)
- 表现: 点「开始申请」后长时间停留在「正在准备 lego…」, 或直接提示「无法准备证书组件 lego (下载或校验失败)」。
- 原因: 网络无法访问 GitHub (主源) 与备用镜像, 或下载内容校验不通过。
- 处理: 确认网络与代理后重试; 应用会依次尝试主源与备用源, 校验失败通常意味着下载不完整, 重试即可。若始终不可用, 可改用「手动 DNS」模式 (仍需 lego, 仅验证方式不同)。
手动 DNS: 一直停留在「请添加 TXT 记录后继续」
- 这是正常等待状态 (仅手动模式有这一步): 应用在等您到 DNS 服务商添加 TXT 记录, 不会自动超时。
- 处理: 复制窗口中的「记录主机」与「记录值」到 DNS 控制台 (类型选
TXT), 保存后点窗口上的「我已添加」。 - 若误关闭窗口, 本次申请会被取消 (lego 进程被终止), 重新申请即可。
DNS 账户 (一键自动) 模式失败
自动模式下应用已拿到服务商返回的明确错误, 界面文案通常直接给出原因:
| 界面提示 | 可能原因与处理 |
|---|---|
| DNS 账户不可用: 账户已被删除或凭据不完整 | 账户被删或字段缺失; 重新选择, 或到「DNS 账户」编辑该账户后重试 |
| DNS 服务商认证失败: Token / 密钥无效或已过期 | 重新生成 Token / 密钥并更新账户 (注意别用全局账号密码) |
| DNS 服务商拒绝访问: Token 权限不足 | 按界面提示授予最小 DNS 编辑权限 (并包含读取区域权限), 并限定到目标域名 |
| 未在所选服务商找到该域名的解析区域 | 域名未托管在该账户下; 换成托管该域名的账户 |
| CA 域名校验失败: 挑战记录未被正确解析 | 域名解析服务商与所选账户不一致 (如域名解析实际不在该账户) |
| 等待 DNS 传播超时 | 解析尚未生效; 稍后重试 (默认等待上限 5 分钟); 不建议用「跳过 DNS 传播检查」绕过 |
| CA 限流 | 短时间申请次数过多; 先用 Staging 验证流程后再转 Production |
| 网络异常: 无法连接 CA 或 DNS 服务商 API | 检查网络、代理或防火墙; 代理可能导致对 API 的访问被拦 |
| 证书已签发但文件整理失败 | 查看运行日志; 确认 Config/Certificates/ 目录可写 |
申请过程中窗口会实时显示「运行日志」(已脱敏的 lego 输出), 失败时可直接展开定位原因。
手动 DNS 模式常见失败
| 可能原因 | 排查方式 |
|---|---|
| TXT 记录值复制不完整或含多余空格/引号 | 重新复制记录值, 注意不要包含外层引号 |
记录主机缺少 _acme-challenge. 前缀 | 主机名应形如 _acme-challenge.example.com (部分服务商只需填 _acme-challenge) |
| 域名填写错误或非自有域名 | 确认域名拼写, 且您对该域名有 DNS 控制权 |
| CA 限速 (尤其 Production) | 先用 Staging 验证流程; 生产环境需控制申请频率 |
| 校验等待超时 (5 分钟) | DNS 尚未传播; 等待数分钟后重新申请 |
证书填了却启动失败
- Staging 证书不可用于生产: Staging 证书不被浏览器信任, 仅用于流程验证; 正式使用需改用 Production 重新申请。
- 证书与私钥不匹配: 请使用同一次申请产出的
fullchain.pem与privkey.pem; 用「从证书助手选择」会成对填入, 避免手工配错。 - 证书临期提醒: 选择 Staging 证书时会提示「Staging (测试)」; 其他证书距到期不足 30 天会提示「即将到期 (N d)」。
更新内容窗口 (26.4)
窗口显示「暂时无法获取更新说明」
- 表现: 升级后首次启动弹出「本次更新内容」, 但内容区显示「暂时无法获取更新说明, 可稍后在更新页查看。」。
- 原因: 更新接口不可达 (网络/代理) 或服务端暂无当前版本条目。
- 处理: 检查网络后到「更新」页查看完整版本变更; 该窗口失败不会影响启动, 也不会因此重试弹窗。
- 「博客更新」页签拉取失败: 同上, 会提示获取失败; 可切换回「更新日志 (API)」页签或到更新页查看。
不希望再次弹出
- 窗口只要展示过即记为已读 (记录在
Cache/whats-new.json), 同一版本不会二次打扰; 版本号未变化时也不会弹出。
更新失败
获取更新信息失败
表现: 「更新」页状态区显示「获取更新失败」, 无最新版本信息。
排查路径:
- 检查网络连接 (能否访问其他网站); 代理/VPN 是否拦截了到更新 API 的请求。
- 点击「检查更新」重试; 若更新通道为「预览」, 可切回「稳定」通道再试 (预览通道偶发无发布)。
下载失败 / 校验失败
表现: 状态区显示「更新下载失败…」或「下载文件校验失败…」, 出现「重试下载」按钮。
排查路径:
- 点击「重试下载」重试一次 (网络波动常见)。
- 仍失败: 在「设置」页切换下载源 (TPCA ↔ 官方) 后重试。
- 校验失败且重试仍出现: 下载源文件可能损坏, 等待一段时间后重试, 或切换下载源。
- 若为 Windows 且下载的是安装包, 确认磁盘空间充足 (安装包数百 MB, 需预留
Cache目录空间)。
首次启动隧道时 mefrpc 下载失败
表现: 启动隧道时提示下载 mefrpc 客户端失败, 隧道无法启动。
排查路径:
- 确认
bin/mefrpc.exe(Windows) 或bin/mefrpc.tar(Linux/macOS) 是否存在; 缺失时启动隧道会自动下载。 - 下载失败: 在「设置」页切换下载源 (TPCA ↔ 官方) 后重新启动隧道。
- 校验失败 (文件损坏): 删除
bin下残留的mefrpc*.tmp与损坏文件后重试。
链接启动隧道 (pml2://)
应用支持 pml2:// 通用链接, 用于从浏览器/网页一键启动指定隧道:
pml2://StartProxy/<隧道ID>?Name=<隧道名>
(mefrp:// 前缀同样识别; Name 可省略, 省略时终端标签显示 #隧道ID。)
首次使用的平台差异
| 平台 | 协议注册方式 |
|---|---|
| Windows | 应用启动时写入 HKCU\Software\Classes\pml2 (当前用户, 无需管理员); 已指向本程序时跳过 |
| Linux | 启动时写入 ~/.local/share/applications/pml2-handler.desktop 并注册为默认处理器 (依赖 xdg-mime / update-desktop-database) |
| macOS | 由应用包的 Info.plist 声明, 无需运行时写入 |
注册在主实例启动时进行一次; 应用目录被移动或重装后, 下次启动会自动改写为新路径。
点击链接的行为
- 应用未运行 (冷启动): 链接参数写入
Cache/startup.json, 主窗口在 2 分钟内读到即拉起对应隧道 (读取后立即删除该临时文件, 不会重复启动)。 - 应用已在运行: 第二次启动会把链接透传给已运行实例 (命名管道
tech.rycb.pml2), 由它显示主窗口并启动隧道。
链接点了没反应?
| 现象 | 可能原因与处理 |
|---|---|
| 系统提示「没有可打开此链接的应用」 | 协议尚未注册 (如手动拷贝的绿色版从未启动过); 先手动启动一次应用即可自动注册 |
| 应用打开了但没启动隧道 | 隧道 ID 不存在/已删除、未登录或获取启动凭证失败; 先登录并在主界面确认该隧道可用, 失败原因见 Logs/ |
隧道名显示为 #123 | 链接未带 Name 参数, 属正常表现 |
| 想撤销协议注册 | Windows 删除 HKCU\Software\Classes\pml2; Linux 删除 ~/.local/share/applications/pml2-handler.desktop |