Termux 内网穿透实战:用 FRP 把手机变成可公网访问的服务器

绝大多数手机流量和家庭宽带都处于 NAT 之后,没有独立公网 IP。本文用最流行的开源工具 FRP,完整演示如何把 Termux 里的 SSH、Web 服务安全地暴露到公网。

一、为什么需要内网穿透

你辛苦在 Termux 里搭好了 SSH、个人网盘或演示站点,可手机一离开家里 Wi-Fi 就再也连不上——根源是设备位于运营商 NAT 之后、没有公网 IP,外部请求根本找不到你。内网穿透的本质,是借一台有公网 IP 的服务器做"中转站":外部请求先打到这台服务器,再由它转发到你手机上的 Termux,于是无论你在哪、用哪家的网络,都能稳定访问手机里的服务。

二、FRP 是什么,原理如何

FRP(Fast Reverse Proxy)是采用 Apache 2.0 协议开源的高性能反向代理工具,由 fatedier 维护,是 Termux 玩家做内网穿透的首选。它分两部分:frps(服务端,跑在有公网 IP 的服务器)与 frpc(客户端,跑在 Termux)。frps 监听公网端口接收请求,按配置转发给 frpc;frpc 再把请求送到本地真实服务(如 8022 的 SSH、8080 的 Web)。对上层应用完全透明,你访问的仍是普通 IP 和端口。

三、准备工作

四、第一步:在服务器部署 frps

登录服务器,下载对应架构的 frp 压缩包并解压,然后编写服务端配置。新版本 frp 使用 TOML 格式:

# frps.toml
bindPort = 7000
auth.token = "请换成一段足够复杂的随机密码"

启动 frps(生产环境建议用 systemd 托管):

./frps -c frps.toml

同时放行端口:

sudo ufw allow 7000/tcp
sudo ufw allow 6000/tcp
sudo ufw allow 6080/tcp

五、第二步:在 Termux 部署 frpc

在 Termux 中下载适用于 Android(aarch64/arm)的 frp 包,解压后只保留 frpc。编写客户端配置,把本地服务映射出去:

# frpc.toml
serverAddr = "你的服务器公网IP"
serverPort = 7000
auth.token = "与服务端一致的密码"

[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 8022
remotePort = 6000

[[proxies]]
name = "web"
type = "tcp"
localIP = "127.0.0.1"
localPort = 8080
remotePort = 6080

注意 Termux 的 SSH 默认端口是 8022 而非 22。启动客户端:

./frpc -c frpc.toml

六、第三步:让 frpc 在后台稳定运行

Termux 在后台容易被 Android 休眠或回收。先获取唤醒锁防止系统睡死:

termux-wake-lock

再配合 termux-services 把 frpc 托管为常驻服务,并安装 Termux:Boot 插件实现开机自启:

pkg install termux-services
sv-enable frpc

同时到系统设置里给 Termux 关闭电池优化、允许后台活动,稳定性会明显提升。

七、安全建议(务必重视)

八、典型用途

穿透搭好后,你可以随时 ssh -p 6000 用户@服务器IP 远程维护手机上的文件;把本地 http://localhost:8080 的服务通过 服务器IP:6080 临时分享给同事做演示;或者在外访问家里的 NAS 与自建服务。需要更系统的命令与软件包基础,可回到 图文教程 复习。

💡
更多高频问题,请查看 常见问题 页面;想学习基础操作,先从 图文教程 入手。
📚 使用教程