我昨天花了188买了10年的域名。gxl-repo.top
使用cloudflare的tunnel功能我听说可以把本地服务通过域名暴露给公网。
我之前测试了测试通道,cloudflare创建通道时提供了测试域名,我通过域名访问成功了本地网页。所以我就决定开始使用。
我需要注册cloudflare账号,使用它的免费计划。然后点击添加域名。只要添加了域名,就可以享受到cloudflare免费计划的很多保护和加速功能。
我有问题
cloudflare是怎么接管我的网站域名的?
我的意思是:cloudflare为什么能够让用户访问这个域名的时候进行流量清洗和安全检查,通过cdn节点分发流量?
我在添加域名的时候得到了答案。在设置了几个信息之后,最后一步关键的一步就是在域名注册商那里,修改默认的DNS服务器地址,改成cloudflare的服务器地址。

当DNS服务器变成cf的,这样用户在访问网站的时候,cf就可以接收到所有访问域名的请求,然后返回它自己的cf节点ip,而不是源网站,通过cf节点进行转发,过滤,防护。通过这种流量“劫持”的办法实现功能。
DNS服务器改成cloudflare的之后,原有注册商的解析还有效吗?
无效了,需要在cloudflare面板的DNS解析里重新配置。
添加通道测试
首先需要在cf主页添加自己的域名

然后更改域名注册商的dns服务器地址,等待几个小时后cf会验证域名添加成功。这时候这个域名就得到防护了。

在Zero Trust板块下有tunnels功能。点进去有添加tunnels,进行一些配置之后就能够创建一个tunnels。在添加public hostnames里面设置域名的时候,所选择的就是已经之前添加到cloudflare的域名。我搜索到了我的gxl-repo.top域名,我就添加了。后面的service就是本地服务信息。

之后保存设置,就可以用了。如果这时候查看cf的DNS记录,就会发现它自动添加了一条解析向隧道的记录
在预览界面会有各个操作系统开启通道的办法。对于windows就是在github下载cloudflared程序,然后把预览界面的命令执行就行了。其中包括tunnel的token。cloudflared就是通过这个token开启对应通道的。
然后启动cloudflared程序之后,cf的控制台就会提示health的状态,就是通道已经开启了。其他用户就可以通过域名来访问本地主机启动的web服务

cloudflare通道的原理是什么?
在我添加了一个通道后,我会发现DNS解析记录里自动添加了一个记录。就是把用户访问的域名解析到一个xxxx.cfargotunnel.com的地址。

而这个地址的id正是对应了我的通道id,也就是把用户的访问解析到了这个通道,而本地运行的cloudflared程序只要运行通道服务并且连接到了cf的节点。用户就可以访问到,这样就完成了服务对外网的暴露。
这个访问过程是全程经过cf的服务器节点进行接管的。用户访问到的是cf的节点,cf节点与本地服务沟通。然后传送数据给用户。
感觉
好处就是自动https加密,隐藏我的服务器ip,避免了中国的备案要求,不需要云服务器,有安全防御。
这个方案几乎把我的网站运行变成了0成本。只需要消耗一点电力就行了。