将闲置 Android 手机变身为高性能代理节点:Termux 与 Xray 的实战记录

将闲置 Android 手机变身为高性能代理节点

在致力于构建极致的高可用(HA)家庭代理网络的过程中,我意识到手头有一台性能强大、全天候联网却在“吃灰”的 ARM 设备:我的旧 Android 手机

通过将其作为一个“次级主节点(Secondary Primary Node)”集成到我的网络中,通过与 Mac 并行工作,我实现了一个“三活(Triple-Active)”架构:Mac + Android -> VPS 备份。本文将深入分享我是如何利用 Termux 将一台 Android 手机变成“哑节点(Dumb Node)”代理的,以及在此过程中解决的那些奇特的网络陷阱。


📱 概念:什么是“哑节点”?

不同于运行着完整 X-UI 面板和漂亮界面的 VPS 或 Mac,Android 手机受限于电池和散热资源。我并不想在上面运行沉重的 Web 面板和数据库。

我选择了**“无状态哑节点”架构**:

  1. 无 UI:只运行纯粹的 Xray-core 二进制文件。
  2. 硬编码配置:UUID 与 VPS 完全一致。
  3. 隧道:使用 frpc 将本地端口暴露给 VPS。

对于负载均衡器(Nginx)来说,它看起来和我的 Mac 一模一样。而对于手机来说,这只是两个轻量级的后台进程。


🛠 技术栈:Termux 足矣

忘掉 Root 刷机吧。Termux 提供了完全够用的用户空间 Linux 环境。

1
2
pkg install frp      # 注意:包名是 'frp',而不是 'frpc'
pkg install wget vim

对于代理核心,我直接下载了标准的 ARM64 (aarch64) 版 Xray-core。


🕳 踩坑记录(以及我是如何填坑的)

这并不是即插即用的。Android 的网络栈非常……独特。

1. 包名陷阱

如果你尝试在 Termux 里安装 frpc,会提示找不到。
纠正:软件包名称是 frp,安装后会同时包含 frpcfrps

2. “连接被拒绝”的幽灵

起初,Xray 日志看起来很干净,但流量就是不通。在 Android 上使用 netstat 需要 Root 权限才能看到有用的输出,这让调试变成了瞎子摸象。
原因:Xray 实际上并没有成功运行或监听在预期的接口上。
解决:我写了一个 start.sh 脚本来正确管理进程生命周期,并将日志转储到标准输出(stdout)以便调试,而不是丢进 /dev/null

3. DNS 黑洞 ([::1]:53)

这是最恶心的一个 Bug。Xray 日志显示:
dial tcp: lookup www.google.com on [::1]:53: read: connection refused

为什么?
Termux 并没有像 Go 语言(Xray 的开发语言)预期的那样拥有指向系统解析器的标准 /etc/resolv.conf。它试图使用本地回环 IPv6 地址进行 DNS 解析,但那里并没有 DNS 服务监听。

解决
在 Xray 的 config.json 中硬编码 DNS。不要依赖系统。

1
2
3
"dns": {
"servers": ["8.8.8.8", "1.1.1.1"]
}

4. IPv6 幻影

即使 DNS 修好了,连接依然超时。Android 系统倾向于优先使用 IPv6,但在许多移动网络或 WiFi 配置下,IPv6 路由并不稳定或被限制。

解决
强制 Xray 使用 IPv4 进行出站连接。

1
2
3
4
5
6
"outbounds": [
{
"protocol": "freedom",
"settings": { "domainStrategy": "UseIP" }
}
]

UseIP 策略会强制 Xray 将域名解析为 IP(使用我们硬编码的 8.8.8.8),然后直接连接该 IP,绕过系统路由配额的限制。


🔋 优化:电池 vs 性能

在电池供电的设备上 24/7 运行代理需要平衡。

  1. Wakelock(唤醒锁):必不可少。点击 Termux 通知栏的 “Acquire Wakelock”,防止 CPU 进入深度休眠。没有它,关屏 5 分钟后代理就会断连。
  2. 网络选择
    • 5G:速度快,低延迟,但发热大,耗电快。适合作为家庭宽带断网时的临时备份。
    • Wi-Fi:功耗低得多。作为永久设施时的推荐选择。
  3. 进程优先级:Android 会激进地杀掉后台应用。我必须将 Termux 锁定在“最近任务”视图中,并对其禁用电池优化。

🚀 最终效果

我现在拥有了一个冗余的代理节点,它几乎不耗电,零维护(无状态),而且可移动。

如果我的 Mac 崩溃了?流量切到 Android。
如果我家光纤断了?流量切到 Android (走 5G)。
如果所有东西都挂了?流量切到 VPS。

韧性(Resilience)不在于永不故障,而在于故障发生时无人察觉。