【折腾向】闲置手机 + 内网穿透 + caddy + rclone = ?

通过 frp 内网穿透将闲置手机暴露至公网,并使用 caddy 搭建 webdav 服务,客户端使用 rclone 实现 webdav 挂载,达到类坚果云的效果。

要有公网 IP!要有公网 IP!要有公网 IP!

前置条件

  • 公网 IP 或者一台 VPS,这里我用的是阿里轻量,新加坡(没有特殊需求还是建议选国内)。
  • Android 手机

termux 配置

termux 是 Android 手机可用的终端管理器,功能强大,这里我们使用它来完成服务端(闲置手机)的配置。

首先将仓库源更换为国内速度更客观的 USTC,输入 termux-change-repo 后出现下图界面:

空格选择,回车确认。

然后更新默认的包管理器和已安装的包,防止部分包过旧无法使用,输入:

sh 复制代码
pkg update
pkg upgarde

开启存储权限,输入 termux-setup-storage 并同意权限申请,这一步是为了访问外部存储并将部分公用文件夹映射到 termux 的私有目录,所以不要手动开启 termux 的存储权限:

开启后通过 ls 命令列举根目录的文件夹会出现 storage:

安装 vim:

sh 复制代码
pkg install vim

要注意 termux 对它内置的所有文件都进行了跟踪校验,如果你的手机有 root 并在外部文件管理器对 termux 内置的文件进行了编辑,之后所有在 termux 内对该文件的操作都会报权限不足的错误。

frp 内网穿透配置

frp 是开源的反向代理工具,通过在服务器中部署 frps,在内网机器中部署 frpc 可以实现内网穿透的功能,frps 会将访问服务器的流量转发到部署了 frpc 的内网机器上。

我们下载机器 CPU 对应的版本,这里我下载 linux_arm64:

右键复制链接,在服务器中通过 wget 命令下载:

sh 复制代码
wget https://github.com/fatedier/frp/releases/download/v0.54.0/frp_0.54.0_linux_arm64.tar.gz

在闲置手机中,我们先将文件下载到 /storage/emulated/0/Download/ 目录下,此时 termux 内的 storage/downloads 下也会出现对应的文件:

通过 mv 命令移动到私有目录:

sh 复制代码
mv ~/storage/downloads/frp_0.54.0_linux_arm64.tar.gz ~/frp

两端对压缩文件进行解压:

sh 复制代码
tar -zxvf /path/to/frp

cd 到解压出来的目录中,结构应该如下:

  • LICENSE 开源协议
  • frpc 内网客户端机器使用,二进制可执行文件
  • frpc.toml 内网客户端机器使用的配置
  • frps 服务器使用,二进制可执行文件
  • frps.toml 服务器使用的配置

frps.toml 配置:

toml 复制代码
# 用于 frps 和 frpc 通信的 tcp 端口
bindPort = 7000 # 端口可以自定义,服务器防火墙需要放行对应的端口

frpc.toml 配置:

toml 复制代码
# 服务器公网 IP
serverAddr = "8.8.8.8"
# 用于 frps 和 frpc 通信的 tcp 端口,和 frps 的 bindPort 保持一致
serverPort = 7000

# 代理配置
[[proxies]]
name = "webdav"        # 自定义
type = "tcp"
localIP = "127.0.0.1"
localPort = 8888       # 本地侦听的端口
remotePort = 8888      # 服务器侦听的端口,防火墙需放行

上述的代理配置表示将访问 8.8.8.8:8888 的流量转发到 127.0.0.1:8888

使用 chmod 命令赋予执行权限:

sh 复制代码
chmod +x path/to/file

启动命令分别是:

sh 复制代码
./frps -c ./frps.toml
./frpc -c ./frpc.toml

当然也可以配置后台运行:

sh 复制代码
nohup ./frps -c ./frps.toml &
nohup ./frpc -c ./frpc.toml &

caddy 配置

caddy 是一个像 Apache、nginx 的 web 服务器,我们使用它的 webdav 模块来搭建服务。

下载 CPU 对应的二进制可执行文件:

将二进制文件移动到 termux 的私有目录中,创建需要等下用的密码:

sh 复制代码
./caddy hash-password --plaintext yourpassword

使用 touch 命令在同级目录创建 caddy 配置文件:

sh 复制代码
touch Caddyfile

使用 vim 写入以下配置:

sh 复制代码
{
  order webdav before file_server
}

:8888 # 侦听 8888 端口,frpc.toml 中对应的 localPort
basicauth {
  # 用户名 # 刚刚创建的密码 
  yuanyxh $2a$14$UUqrsAY7ckh2hIbRRq4dPu1K/M9G0K4QTp2j9NE6fvJThuhN4ucG.
}
# 根路径为 /data/data/com.termux/files/home/test 需要自己创建对应的文件夹
root * /data/data/com.termux/files/home/test

route {
  # 重写路径
  rewrite /test /test/
  # 开启 webdav,可访问 /test/ 下的文件
  webdav /test/* {
    # 访问该 webdav 服务的路径 http://8.8.8.8:8888/test
    prefix /test
  }
  # 允许在浏览器中访问
  file_server browse
}

运行 caddy:

sh 复制代码
./caddy run --config ./Caddyfile

然后就可以访问自己的 webdav 服务了,或者直接在浏览器中访问 http://公网 IP:映射端口/webdav 路径

进程保活

为了防止服务挂掉,我们需要做一层保护,可以使用 termux-services 对我们运行的服务进行守护,做到进程拉起的功能。

安装 termux-services:

sh 复制代码
pkg install termux-services

创建对应服务的目录:

sh 复制代码
mkdir -p $PREFIX/var/service/frp/log
mkdir -p $PREFIX/var/service/caddy/log

链接到 termux-services:

sh 复制代码
ln -sf $PREFIX/share/termux-services/svlogger $PREFIX/var/service/frp/log/run
ln -sf $PREFIX/share/termux-services/svlogger $PREFIX/var/service/caddy/log/run

然后在 $PREFIX/var/service/<pkg>/run 文件中写入启动服务的命令:

bash 复制代码
# frp
#!/data/data/com.termux/files/usr/bin/sh
path/to/frpc -c path/to/frpc.toml

# caddy
#!/data/data/com.termux.files/usr/bin/sh
path/to/caddy run --config path/to/Caddyfile

最后启动对应的服务:

sh 复制代码
sv up frp
sv up caddy

rclone 挂载本地文件夹

rclone 是一个用于管理云存储上的文件的命令行程序,我们用它来挂载 webdav 服务到本地。

下载需要的可执行文件:

运行:

sh 复制代码
path/to/rclone config --config=rclone.conf

根据提示输入自己的 webdav 服务器信息,然后就会在 rclone 的同级目录下创建一个 rclone.conf 的配置文件。

继续输入以下命令执行挂载:

sh 复制代码
path/to/rclone mount test: E:\test --cache-dir %cd%\temp --log-file %cd%\logs\log.txt --allow-other --vfs-cache-mode full --vfs-cache-max-age 72h --vfs-cache-poll-interval 10m  --allow-non-empty

参数:

  • test: E:\test
    • test 是上一步中你创建 webdav 服务时输入的别名,test: 表示 webdav 远程根目录
    • E:\test 是挂载到的本地路径
  • --cache-dir %cd%\temp
    • --cache-dir 是已加载文件的缓存目录
    • %cd%\temp 中的 %cd% 表示程序运行所在目录
  • --log-file %cd%\logs\log.txt
    • --log-file 输出的日志文件
  • --allow-other:允许除 rclone 的其他进程访问
  • --vfs-cache-mode full:vfs 缓存模式,读取文件时进行缓存
  • --vfs-cache-max-age 72h:设置文件缓存允许的最大时间
  • --vfs-cache-poll-interval 3m:轮询检查文件是否有更改
  • --allow-non-empty:允许在非空目录上挂载,windows 中不支持

通过这些设置,只要没有大文件,基本上可以像访问本地文件一样访问 webdav 服务器中的文件了。

最后我们可以通过 vbs 脚本无感知的运行 rclone:

vbs 复制代码
# rclone.vbs
CreateObject("WScript.Shell").Run "cmd /c %cd%\rclone.bat",0
bat 复制代码
# rclone.bat
rclone.exe mount test: E:\test --cache-dir %cd%\temp --log-file %cd%\logs\log.txt --allow-other --vfs-cache-max-age 72h --vfs-cache-poll-interval 10m --vfs-cache-mode full --allow-non-empty

将 rclone.vbs 的快捷方式放到 C:\Users\[username]\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup 就可以实现开机启动(windows 端)。

扩展

ssh 登录手机

termux 下载 openssh,生成 key ssh-keygen -A,运行 sshd

frpc.toml 添加代理

toml 复制代码
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 8022  # termux 中的 openssh 默认侦听 8022 端口
remotePort = 8044 # 服务器放行 8044 端口

查看用户 whoami,设置密码 passwd,也可以添加私钥,然后用公钥访问。

私有 git 仓库

termux 安装 git,pkg install git,初始化裸仓库 git init --bare

远端 clone 仓库, git clone ssh://username@ip:port/path/to/git

也可以使用 termux 中的 gitea 包来快速搭建完善的私有 git 服务。

远程桌面

电脑开启允许远程协助,并指定允许远程协助的本地用户(需要设置密码),同时运行 frpc 穿透到公网,配置如下:

toml 复制代码
serverAddr = "8.8.8.8"
serverPort = 7000

# 代理配置
[[proxies]]
name = "remote_desktop"
type = "tcp"
localIP = "127.0.0.1"
localPort = 3389       # windows 远程桌面默认侦听的端口是 3389
remotePort = 9833      # 服务器侦听的端口,防火墙需放行

将电脑锁屏(win + L),在另一台客户端中使用远程桌面连接

注意:电脑不能进入休眠状态。

相关推荐
小码哥_常1 小时前
Spring Boot 牵手Spring AI,玩转DeepSeek大模型
后端
freewlt1 小时前
前端性能优化实战:从 Lighthouse 分数到用户体验的全面升级
前端·性能优化·ux
0xDevNull1 小时前
Java反射机制深度解析:从原理到实战
java·开发语言·后端
小小亮011 小时前
Next.js基础
开发语言·前端·javascript
华洛1 小时前
我用AI做了一个48秒的真人精品漫剧,不难也不贵
前端·javascript·后端
WZTTMoon1 小时前
Spring Boot 中Servlet、Filter、Listener 四种注册方式全解析
spring boot·后端·servlet
standovon2 小时前
Spring Boot整合Redisson的两种方式
java·spring boot·后端
Novlan12 小时前
我把 Claude Code 里的隐藏彩蛋提取出来了——零依赖的 ASCII 虚拟宠物系统
前端
Cosolar2 小时前
LlamaIndex RAG 本地部署+API服务,快速搭建一个知识库检索助手
后端·openai·ai编程
IAUTOMOBILE2 小时前
Python 流程控制与函数定义:从调试现场到工程实践
java·前端·python