在 Termux 中使用 Cloudflared Tunnel

2023/03/25
共 612 字
约 2 分钟
归档: 技术
标签: Android Termux

上一篇讲到,Termux 可以跑一些小的程序,尽管也能跑 pycharm,但更多还是像个“玩具”,你要跑个 Springboot 的项目,那真是太为难手机了。那它还有用武之地吗?搭建博客吧,哪比得上 Vercel 这类托管平台方便,想要后端的功能?依然是 Vercel,接口写成 Serverless Function,配合 mongodb 的免费额度足够个人小站用了。但有一个功能,是 Vercel 不支持的:WebSocket。而现在,终于有机会代替轮询这种低效的方法了。

这时,需要解决的问题只有一个:让公网可以访问到 Termux 的服务。


内网穿透的各种姿势

网上有着诸多内网穿透的服务,但基本离不开 ngrok、cpolar、frp,但极少有讲到 cloudflared tunnel 的。

上述提到的几种服务,基本上都是在命令行里加上 token,无需其他配置就可以运行,对比起来 cloudflared tunnel 显得相当繁杂。但他们的缺点也很明显:免费版只有短期/随机二级域名,有带宽/流量限制,也就是只适合作为临时测试用。而 cloudflare 的可以自定义子域名,所以这些折腾是值得的。

在 Termux 中使用 cloudflared tunnel

前置条件:有 cloudflare 的账号,并且有一个托管在 cloudflare 的域名

在最新的termux-packages,官方已支持 cloudflared,不再需要手动去 github 下载

apt install cloudflared 

登录 Cloudflare,会自动唤醒手机的浏览器,也可以在电脑上复制网址打开,登录并验证

cloudflared tunnel login

新创建一个隧道,会返回一串 tunnel-id

cloudflared tunnel create <tunnel-name>

将隧道解析到子域名上(开头讲到需要一个托管在 cloudflare 的域名,直接填想要的子域名,就会自动添加 dns 解析记录)

cloudflared tunnel route dns <tunnel-name> <domain>

进入到 ~/.cloudflared 文件夹,新建 config.yml,相关解释可以看官方示例

tunnel: <tunnel-id>
credentials-file: /data/data/com.termux/files/home/.cloudflared/<tunnel-id>.json
protocol: http2
ingress:
  - hostname: <domain>
    service: http://localhost:<port>
  - service: http_status:404

通过以下命令启动隧道

cloudflared tunnel run <tunnel-name>

然后最重要的一步:开启手机里的热点,否则会有 dns 不对的报错。这是一个困扰我许多天的问题,网上相关的解答少之又少,最后居然在一个 YouTube 视频里找到解决方法。

留言

本站已运行
© 2024 Jack  由 Hexo 驱动
复制成功