之前,如果想用树莓派之类的设备去做网站,方法一是需要想办法弄到一个公网IP,无论是直接从运营商要,还是在阿里云、腾讯云上做frps之类的内网穿透,都挺麻烦的;方法二是如果有IPv6,那么就去做v6only的解析,并且这个IPv6的地址还可能会经常变,这样就会使得网站可用性变得非常差,并且v4用户就惨了。
现今,Cloudflare Argo Tunnel已经免费开放啦。这个东西有什么用呢?简单的来说就是在任何可以访问cloudflare的机器和cloudflare中搭建一个安全的加密隧道,然后这个隧道可以用来承载很多不同种类型的流量,比如说http(会被自动换成https),tcp,ssh,smb,rdp,甚至是unix套接字都可以哦。
也就是说,只要你在家里的机器上一顿操作,那么你家里的机器就可以通过cloudflare的网络来达到全球可以访问的目的了。听起来是不是很棒!
总结下来这样做大概有这几步:
- 注册cloudflare账号
- (可选)把域名的ns改成cloudflare
- 安装cloudflared并登录
- 创建argo tunnel
- 创建dns记录
- 配置tunnel
- 运行
本文以Raspberry Pi 3 + Ubuntu 20.04为例
更新:现在不需要操作这些命令了,直接在 Zero Trust那边网页点点点就好了,cloudflard会主动接受推送更新
注册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
或者在网页上这样添加,结果是一样滴
此时如果你访问abcd.dmesg.app,会看到1033错误的哦,因为我们的tunnel还没有运行。
配置tunnel
那么接下来就需要在树莓派上配置如何tunnel了,一个最简单的例子是这样的:
tunnel: pi credentials-file: /home/benny/.cloudflared/af4d19d0-7fb1-40ea-88b7-97036c026ca4.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
这个时候打开浏览器刷新一下,你的页面就已经出来啦!
以服务模式运行
当然了,咱不能开个screen去运行argo tunnel啊……
那么执行这条命令来安装服务
# 需要有~/.cloudflared/config.yaml sudo cloudflared service install # 指定配置文件位置 cloudflared --config CONFIG-FILE service install
这个时候哪怕重启都不怕啦😨
参考资料
Create and connect an application with a single command
用 Cloudflare Tunnel 进行内网穿透 | Re:Linked
--本评论由Telegram Bot回复~❤️
--本评论由Telegram Bot回复~❤️
Quitting due to error: Your Cloudflare account already have DNS records, [type: CNAME, content: 027***d07.cfargotunnel.com], for the subdomain you are attempting to create. Please delete the records in the Cloudflare dashboard before starting Argo Tunnel
wget -o cloudflared https://github.com/cloudflare/cloudflared/releases/download/2021.4.0/cloudflared-linux-arm64 chmod +x cloudflared
所以你將 wget 的日誌輸出到 cloudflare 文件裡面, 然後把它當成二進制執行? 完全沒 Get 到啊 另: 我下載後直接運行 cloudflared-linux-arm64 文件, 提示:可執行檔格式錯誤: ./cloudflared-linux-arm64
我的樹莓派也是 Pi4B, 8GRAM. 不知道你怎麼可以跑起來.--本评论由Telegram Bot回复~❤️
--本评论由Telegram Bot回复~❤️
--本评论由Telegram Bot回复~❤️