使用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。