使用 Cloudflare 进行内网穿透
由于现在公网 IP 个人没法申请,要想部署 web 服务主要方法是购买云服务器或者使用内网穿透,Cloudflare 内网穿透(Cloudflare Tunnel)是 Cloudflare 提供的一项服务,用于将您的 Web 应用程序安全地暴露在公共互联网上,同时保护其免受恶意流量和网络攻击的威胁。内网穿透的作用主要表现在以下几个方面:
- 实现云与设备之间打通一条加密通道,使得 Cloudflare 的 CDN 可以很方便地通过这条加密通道访问到部署在内网的服务,包括 Web、SSH 等。
- 帮助用户将位于内网中的服务暴露到公网上,使得外部用户可以通过互联网访问这些服务。
- 相比较于其他内网穿透工具如 frp、ngrok 等,使用 Cloudflare Tunnel 可以获得更好的安全性和性能。
- 无需考虑电信、移动等 ISP 不提供固定 IP 地址、不能开放端口等问题,并且解决了备案问题。
- Cloudflare Tunnel 还是免费的。
Linux 安装
在 Linux 上,可以直接下载二进制文件,并给以可执行权限,比如安装 amd64 版本:
1 | curl -L 'https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64' -o ./cloudflared |
登录
输入命令进行登录:
1 | cloudflared tunnel login |
输入命令后,会给出一个 URL,打开浏览器访问这个 URL,选择需要授权的网站。
创建 Tunnel
授权完以后,我们需要创建隧道。一般建议一台服务器创建一个隧道。
1 | cloudflared tunnel create <隧道名字> |
创建完以后,会输出隧道的一个 UUID,记录下来
1 | [root@Web-Server-1]# cloudflared tunnel create webserver-1 |
配置 DNS 记录
使用如下命令配置 DNS,其中的 <tunnel-name>
是创建 Tunnel 时指定的名称,<domain>
是自定义的域名,比如 web.example.com
:
1 | cloudflared tunnel route dns <tunnel-name> <domain> |
如果还有其他域名需要配置,可以继续执行上面的命令。配置完成后可以前往 Cloudflare 控制台查看到 CNAME 记录。
配置 Cloudflared
接着,我们开始配置 Cloudflared,先编辑一个配置文件
1 | vim ~/.cloudflared/config.yml |
输入下面的内容(根据自己要求编辑)
1 | # Tunnel UUID,就是同目录下的json文件的文件名 |
更多支持的服务和配置方式,参考帮助文档:Supported protocols
配置完以后,我们测试下配置文件有没有问题
1 | cloudflared tunnel ingress validate |
还可以再测试下规则是否命中
1 | cloudflared tunnel ingress rule https://<域名1.com> |
测试运行
如果没问题,OK,一切妥当,我们开始测试
1 | cloudflared tunnel --config ~/.cloudflared/config.yml run <tunnel-uuid> |
终端会输出一大堆 log,但没有红色报错,那就没问题。
我们登陆 Cloudflare Zero Trust 的 Web 控制台,左边选择 Access-Tunnels,可以看到隧道已经跑起来了,状态是 Active。
然后,我们在浏览器里面输入域名,正常情况下,你可以看到网站已经可以正常访问了。
创建系统服务
先停掉刚才启动的服务。为了让服务能每次系统启动的时候都跟着启动,我们需要把 Cloudflared 注册成系统服务。不然系统一重启,就歇菜了。
1 | # 需指定config路径,否则使用default configuration path会报错 |
跑完这三条命令,应该就可以看到服务有正常输出,并且 Web 控制台也可以看到状态是 Active。