#3214·mihomo

[Bug] EasyTier outbound 静默失效且不自愈(进程存活、其它代理正常,需重启 mihomo 恢复)

Author: HYYYQZCreated Sep 15, 2026Updated Sep 15, 2026

环境 Environment

  • mihomo v1.19.31with_gvisor,go1.26.8),linux/amd64
  • 运行形态:OpenWrt(Kwrt) 路由器,由 ShellCrash 托管,同一个进程内配了 2 个 type: easytier outbound(分别对接两个站点节点)
  • 对端节点:独立的 easytier-core v2.6.4(Debian 13 LXC 容器,systemd)
  • 同一 ET 网络里还有第二个 mihomo 内嵌 ET 实例(Android / Surfing 模块)—— 它一直正常
  • 网络配置:secure-mode: true(Noise E2EE)+ 固定 X25519 密钥 + peers 用 ?peer-public-key= 锁定

配置(已脱敏)Configuration

yaml
proxies:
  - name: et_cs
    type: easytier
    network-name: <name>
    network-secret: <secret>
    secure-mode: true
    local-private-key: <base64-x25519-private-key>
    local-public-key: <base64-x25519-public-key>
    ipv4: 10.144.144.12/24
    udp: true
    hostname: mihomo-str-cs
    peers:
      - "tcp://<peerA-host>:11010?peer-public-key=<base64>"
      - "tcp://<peerB-host>:11010?peer-public-key=<base64>"

现象 Symptoms

  1. 运行一段时间后该 outbound 静默失效,mihomo 本身不报错:
    • GET /proxies/et_csalive: false,history 全为 delay: 0
    • GET /proxies/et_cs/delay?...{"message":"An error occurred in the delay test"}Timeout
    • 同期:mihomo 进程正常、其它代理节点正常、路由器本身联网正常
  2. 对端视角(关键证据):在该 ET 网络上(独立 easytier-core 节点)执行 easytier-cli peer已经看不到这个 mihomo 节点(该 hostname 的记录消失);而同一时间能看到手机上那个 mihomo 内嵌实例仍在 peer 表里。 → 这不是"健康检查/路由"层面的问题,而是该 mihomo 侧的 ET 实例已经不在网内
  3. 同一时刻,从这台路由器本机 curl http://<peerA>:11010/(TCP 连接测试)可以建立连接(curl exit 52 = 已连接但对端非 HTTP) → 底层网络、对端监听、鉴权路径都是通的
  4. 不会自愈:等待 30+ 分钟状态不变,仍是 alive: false
  5. 重启 mihomo 进程后立刻恢复:实例被重建,/proxies/{name}/delay 恢复(约 20ms), 对端 easytier-cli peer 里该节点重新出现(p2p,loss 0%)

出现时间线 Timeline(同一天内 3 次)

时刻 (CST) 前序动作 结果
12:40 对端 easytier-core 容器重启(约 10 分钟前) 该 outbound 不通
13:07 重启 mihomo 进程 恢复(delay ≈ 20ms)
13:26 无明确动作(距上次恢复约 20 分钟) 再次失效
14:06 无明确动作 仍失效
14:1x 重启 mihomo 进程 恢复

观察(供参考):

  • 触发似乎与「对端节点重启」有关(对端重启后本端实例未重连/未重建)
  • 也可能与运行时长有关
  • 路由器上拿不到 mihomo 的完整 stdout 日志(ShellCrash 托管),所以没有失败瞬间的 mihomo 日志; 如有需要,我可以做一次本机最小复现(本机跑 mihomo + 本地 easytier-core,重启对端后观察是否恢复)并把日志补上

期望行为 Expected

  • 对端重启 / 网络抖动后,ET 实例应能自动重连或重建,不应永久失效
  • 若确实不支持自动恢复,至少应在 /proxies 状态或日志中给出明确错误,而不是静默变成死节点

补充观察 Notes(可能相关)

  • 对端 easytier-cli peer 里曾同时出现过该 mihomo 节点的 p2prelay(N) 两条重复条目(可能是收敛中间态)
  • mihomo 的 easytier outbound 在未配置 listeners不监听任何端口(已实测:对端无法主动连入;显式加 listeners 后可连入)
  • 当前规避方案(不影响本 issue 的成立):不把 ET 放在 mihomo 内,改为在一台常驻机器上跑独立 easytier-core, 再把它暴露成 SOCKS5(sing-box)给 mihomo 当普通出站使用;TCP/UDP 都已验证可用。改完后再没出现"实例静默失效"。