Cloudflare Tunnel 内网穿透
前置条件
- 首先,你要有一个 Cloudflare 的账号,并且添加了所需要使用的域名,同时,开通 Cloudflare Zero Trust。
- 本地内网有一台 Linux 服务器。CentOS、Ubuntu、Debian 都无所谓,树莓派也没问题。Web 网站正常跑,内网能正常访问。
https://dash.cloudflare.com/login
Cloudflared 是 Cloudflare Tunnel 的一个本地 cli 客户端,可以实现管理功能和守护程序。
服务安装
macOS 可以用 homebrew 安装
1 | brew install cloudflared |
Linux 直接下载编译好的二进制包安装
1 | curl -L 'https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64' -o /usr/bin/cloudflared |
系统服务
停掉刚才启动的服务,把 Cloudflared 注册成系统服务
1 | cloudflared service install |
注意:创建系统服务后,配置文件会被拷贝到 /etc/cloudflared/config.yml,后续修改配置必须修改新文件
域名授权
使用前,我们需要先登录
1 | cloudflared tunnel login |
输入命令后,终端会给出一个登陆地址,我们拷贝到浏览器里面打开,选择需要授权的网站。
1 | A browser window should have opened at the following URL: |
❗注意:授权一次只能选择一个网站。如果存在多个不同域名的网站,请授权完成后不要关闭网页,点击第二个、第三个要授权的域名,进行多次授权。
创建隧道
授权完以后,我们需要创建隧道。一般建议一台服务器创建一个隧道。
1 | cloudflared tunnel create <隧道名字> |
创建完以后,会输出隧道的一个 UUID,记录下来
1 | Tunnel credentials written to /root/.cloudflared/12345-123-123-123-12345.json. cloudflared chose this file based on where your origin certificate was found. Keep this file secret. To revoke these credentials, delete the tunnel. |
域名指向
接着,我们需要把域名指向到对应的隧道
❗注意:下面的命令只会对第一个授权的顶级域名生效,比如 abc.com 和*.abc.com。如果有多个域名,比如 123.com、456.com,需要手工添加 CNAME 记录。
1 | cloudflared tunnel route dns <隧道名字> <域名> |
这时候,Cloudflare 会自动添加一条 CNAME 记录到对应的域名。
对于多个其他域名,我们需要登录 Cloudflare 的 Web 控制台,对应添加 CNAME 记录,记录值是
1 | ## <隧道UUID>.cfargotunnel.com |
配置 Cloudflared
开始配置 Cloudflared,先编辑一个配置文件
1 | vi ~/.cloudflared/config.yml |
输入下面的内容(根据自己要求编辑)
1 | tunnel: <隧道UUID> |
多支持的服务和配置方式,参考帮助文档:Supported Protocols
配置完以后,我们测试下配置文件有没有问题
1 | cloudflared tunnel ingress validate |
再测试下规则是否命中
1 | cloudflared tunnel ingress rule https://<域名1.com> |
终端会输出一大堆 log,但没有红色报错,那就没问题。
登陆 Cloudflare Zero Trust 的 Web 控制台,左边选择 Access-Tunnels,可以看到隧道已经跑起来了,状态是 Active。
在浏览器里面输入域名,正常情况下,可以看到网站已经可以正常访问了。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 君玉自牧!