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 和端口。
三、准备工作
- 一台有公网 IP 的 VPS:国内阿里云、腾讯云或国外厂商均可,系统不限,本文以 Ubuntu 22.04 为例。
- 已配置好的 Termux:完成基础设置与存储授权(参见 图文教程)。
- 放行防火墙端口:规划好 frps 通信端口(如 7000)与每个服务的远程端口(如 6000、6080)。
四、第一步:在服务器部署 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 关闭电池优化、允许后台活动,稳定性会明显提升。
七、安全建议(务必重视)
- 必须设置 auth.token:没有令牌等于把端口裸奔在公网,任何人都能接入。
- 远程端口用非标准值:避免 22、80 等被扫描器重点关照的数字。
- 不要暴露 frps 控制台:Dashboard 端口切勿对公网开放,或至少加密码与 IP 白名单。
- 服务器端限制来源:用防火墙只放行可信 IP,进一步缩小攻击面。
八、典型用途
穿透搭好后,你可以随时 ssh -p 6000 用户@服务器IP 远程维护手机上的文件;把本地 http://localhost:8080 的服务通过 服务器IP:6080 临时分享给同事做演示;或者在外访问家里的 NAS 与自建服务。需要更系统的命令与软件包基础,可回到 图文教程 复习。