VOHIVE / ARM64 / UTM

从“能编译”到
能稳定运行

最终采用 Apple Silicon 主机 + UTM + Ubuntu ARM64 + VoHive + SOCKS5 系统代理的组合,优先保证边界清晰和可验证。

隐私处理
本文已移除账号、邮箱、密码、SSH 密钥、虚拟机 UUID、精确内网地址、机器路径、令牌和日志原文。所有连接信息均使用占位符。

构建与部署步骤

  1. 准备 Ubuntu Server ARM64 虚拟机,使用 Shared Network,先不要桥接物理网卡。
  2. 固定源码版本和本地替换依赖,确保凭据文件、私钥、cloud-init seed 与运行日志不在项目中。
  3. 使用 CGO_ENABLED=0 GOOS=linux GOARCH=arm64 构建,并用 filesha256sumgo version -m 验证产物。
  4. 通过安全通道传输到目标机临时目录:scp dist/vohive_linux_arm64 <user>@<device-host>:/tmp/vohive
  5. 在目标机安装为 systemd 服务,启用开机启动,确认管理页返回 HTTP 200。
  6. 先验证虚拟机本机出口,再验证 SOCKS5 代理出口,最后接入 USB 蜂窝模块。
CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -trimpath -buildvcs=false -tags "with_utls nomsgpack" -ldflags "-s -w" -o dist/vohive_linux_arm64 ./cmd/vohive
file dist/vohive_linux_arm64
sha256sum dist/vohive_linux_arm64

Bug 修复与避坑

Token 过期:QQ Bot 在特定 HTTP 错误和业务码 11244 下,旧实现会反复使用旧 Token。修复后将其归类为认证失效,清理旧 Token、重新获取并限制重试次数。

构建标签遗漏:修复版必须保留原有的 with_utlsnomsgpack 构建标签,否则可能出现启动后设备能力异常。

内核模块缺失:ARM64 客体系统需要确认额外内核模块包已安装,否则服务可能启动但无法识别蜂窝设备。

USB 重枚举:虚拟机启动后再连接模块通常更稳定;UTM 的 USB Sharing 只是通道,不代表设备会话永久存在。

代理边界:SOCKS5 方案简单稳定,但不覆盖所有 UDP、原始 IP 流量和不遵循系统代理的应用。

上线前检查

  • uname -m 返回 aarch64
  • 服务为 active,管理端口返回 200。
  • QMI / wwan0、QQ Bot 命令监听和代理出口完成基础验证。
  • 保留当前版本和回滚校验值,不要在新版本验证前覆盖。
  • 不要把管理端口暴露到公网,关闭 root 直接登录。

能复现的部署,才是值得交付的部署。