Cloudflare Argo Tunnel 小试:我终于可以用树莓派做网站啦

之前,如果想用树莓派之类的设备去做网站,方法一是需要想办法弄到一个公网 IP,无论是直接从运营商要,还是在阿里云、腾讯云上做 frps 之类的内网穿透,都挺麻烦的;方法二是如果有 IPv6,那么就去做 v6only 的解析,并且这个 IPv6 的地址还可能会经常变,这样就会使得网站可用性变得非常差,并且 v4 用户就惨了。

现今,Cloudflare Argo Tunnel 已经免费开放啦。这个东西有什么用呢?简单的来说就是在任何可以访问 cloudflare 的机器和 cloudflare 中搭建一个安全的加密隧道,然后这个隧道可以用来承载很多不同种类型的流量,比如说 http(会被自动换成 https),tcp,ssh,smb,rdp,甚至是 unix 套接字都可以哦。

也就是说,只要你在家里的机器上一顿操作,那么你家里的机器就可以通过 cloudflare 的网络来达到全球可以访问的目的了。听起来是不是很棒!

总结下来这样做大概有这几步:

  1. 注册 cloudflare 账号
  2. (可选)把域名的 ns 改成 cloudflare
  3. 安装 cloudflared 并登录
  4. 创建 argo tunnel
  5. 创建 dns 记录
  6. 配置 tunnel
  7. 运行

本文以 Raspberry Pi 3 + Ubuntu 20.04 为例

注册 cloudflare 账号

略……

把域名的 ns 改成 cloudflare

这一步是可选的,Argo Tunnel 会提供一个默认的域名,当然如果能用自己的域名就更好啦。

安装 cloudflared 并登录

具体的话,可以参考这篇官方文档。我的树莓派是 aarch64 的架构,也就是 arm64.

wget O cloudflared https://github.com/cloudflare/cloudflared/releases/download/2021.4.0/cloudflared-linux-arm64
chmod +x cloudflared
sudo cp cloudflared /usr/loca/bin/

然后就可以开始登录啦!

cloudflared tunnel login

然后再打开的页面中选择你的域名~Pi 那边大概会有如下输出:

You have successfully logged in.
If you wish to copy your credentials to a server, they have been saved to:
/home/benny/.cloudflared/cert.pem

创建 argo tunnel

cloudflared tunnel create <NAME>

这条命令会输出一个 tunnle UUID

name 可以自己随便取一个,比如说 Pi 啦~Yui 啦~随便的啦

想要查看 tunnel 列表,可以使用 cloudflared tunnel list

很明显,想要删除,那就 delete 啦 cloudflared tunnel delete pi

创建 DNS 记录

有两种办法,一种是去 cloudflare dashboard 中创建一条道id. cfargotunnel.com的 CNAME 解析,另外一种是使用 cli 命令~

那比如说我要创建一个 abcd.dmesg.app,那么就可以这样做

cloudflared tunnel route dns <UUID or NAME> abcd.dmesg.com

或者在网页上这样添加,结果是一样滴

2021041713264377

此时如果你访问 abcd.dmesg.app,会看到 1033 错误的哦,因为我们的 tunnel 还没有运行。

配置 tunnel

那么接下来就需要在树莓派上配置如何 tunnel 了,一个最简单的例子是这样的:

tunnel: pi
credentialsfile: /home/benny/.cloudflared/af4d19d07fb140ea88b797036c026ca4.json

ingress:
hostname: pi.dmesg.app
service: http://localhost:8000

service: http_status:404

其中 hostname 就是上面的那个域名,service 表示我们要承载什么流量,如果想要承载 ssh,那么就service: ssh://localhost:22就好了。

最开始的 uuid 同样可以替换成 tunnel name

然后我们……

cloudflared tunnel config ~/tunnel.yml run

如果不想写这种配置文件,那么可以一条 cli 解决

cloudflared tunnel run url localhost:8000 <NAME or UUID>

看到一大串输出,没有报错,那我们的 tunnel 就成功了。当然树莓派上 8000 还没有程序在监听,那我们再赶紧开一个吧

docker run d p 127.0.0.1:8000:80 nginx:alpine

这个时候打开浏览器刷新一下,你的页面就已经出来啦!

2021041713264488

以服务模式运行

当然了,咱不能开个 screen 去运行 argo tunnel 啊……

那么执行这条命令来安装服务

# 需要有~/.cloudflared/config.yaml
sudo cloudflared service install
# 指定配置文件位置
cloudflared config CONFIGFILE service install

这个时候哪怕重启都不怕啦

参考资料

Create and connect an application with a single command

用 Cloudflare Tunnel 进行内网穿透 | Re:Linked

Related Post

发表回复