细说Cloudflare for SaaS

由于特殊的原因,了解到了赛博菩萨的Cloudflare for SaaS服务,遂仔细研究了下,把一些理解和心得记录一下。

  • 那Cloudflare for SaaS是个什么东西?先看下图:

CF SaaS是什么

  • 图中绿框的部分,在CF SaaS中叫做回退源,要求必须是指向对应服务,并开启了CF代理(即小黄云)的域名。
  • 图中红框的部分,在CF SaaS中叫自定义主机名,实际上可以是除了回退源以外任意一个域名,不一定要托管在CF上。
  • 整个运作的原理(这里敲黑板,请仔细阅读并理解):自定义主机名中的域名只要是指向了回退源所在的域(不要求一定是回退源本身),例如回退源为a.saastest.us.kg,同时该域中有另外一个域名b.saastest.us.kg,自定义主机名中的域名CNAME指向了b.saastest.us.kg,且b.saastest.us.kg的A记录或者CNAME记录最终是CF的CDN地址或者反代地址,此时只要访问自定义主机名,只要没有访问成功(即b.saastest.us.kg指向的服务不能正常返回),就会返回回退源a.saastest.us.kg的内容。
  • 知道了以上的知识,按照CF的规则,我们就可以玩起来了。

在实际操作Cloud Tunnel的加速前,我们先用普通网站的栗子来梳理下整个流程,方便大家理解上边这段话。


举个栗子1-普通网站使用SaaS优选

  • 准备一个普通网站,为了图省事,我是在Serv00上添加了一个名为web.saastest.us.kg的网站

image-20240930112302750

  • 准备两个域(如果想优选域名必须使用两个域,如果回退源域名和客户域名在同一个域,会导致重定向次数过多的错误),其中meina.cn.eu.org域用来当作回退源所在域,添加两条记录,其中source.meina.cn.eu.org指向Serv00服务器地址,并开启代理,作为回退域域名,edge.meina.cn.eu.org指向 test.cloudflare.182682.xyz,不开代理,这个域名将成为meina.cn.eu.org这个域下的优选域名(*.cloudflare.182682.xyz微测提供的CF优选泛域名,*可以随便替换,我这里替换的是test),添加好之后如下图:

添加回退域记录

  • 设置saastest.us.kg所在域作为客户域,即提供给客户的网站域名,我这里设置的是web.saastest.us.kg,并设置CNAME记录指向meina.cn.eu.org的域,这个案例中,是将web.saastest.us.kg指向edge.meina.cn.eu.org,添加好如下:

添加客户域记录

  • 显然,此时我们用web.saastest.us.kg访问是不能得到正确结果的,会报Error 1000错误:

访问报错

  • 在CF上进meina.cn.eu.org的设置,依次点击SSL/TLS-自定义主机名,首次进的话需要绑定信用卡进行开通,开通后的页面如下:

CF SaaS位置

  • 在回退源这里填入source.meina.cn.eu.org,即指向Serv00的地址,等待回退源状态变为有效:

回退源设置

  • 然后我们添加自定义主机名,即web.saastest.us.kg

添加自定义主机名

  • 由于之前我们已经让web.saastest.us.kg指向了meina.cn.eu.org域中的edge.meina.cn.eu.org,稍等片刻,就可以看到主机名状态为有效,证书状态为待验证(TXT),如果之前没有让web.saastest.us.kg指向meina.cn.eu.org域的话,主机名状态会报错,只需要去添加一下web.saastest.us.kg的CNAME记录再回来刷新即可。

添加自定义主机名

  • 然后我们切换到saastest.us.kg域,给web.saastest.us.kg添加以上的TXT记录,如下:

添加客户域名的TXT记录

添加客户域名TXT记录

  • 最后回到meina.cn.eu.org域的自定义主机名页面,等待几分钟,证书状态变成有效:

证书颁发成功

  • 此时我们就可以用web.saastest.us.kg进行访问了:

正常访问网站

  • 最后等待DNS收敛后,就可以去对比下优选IP前后的区别了,觉得效果不理想的,可以自行修改以上步骤中edge.meina.cn.eu.org的记录来实现你自己的优化。

优化前,域名解析出来只有寥寥几个IP

优化后,域名解析有几十个IP

  • 最后需要提醒的是,整个过程的设置需要在两个域中进行切换设置,请确保设置时处于对应域中,或者直接开两个网页,一个网页一个域进行设置,以免出错。

举个栗子2-Cloudflare Tunnel的IP优选

除了传统网站,Cloudflare Tunnel(原Argo)也能通过CF SaaS进行IP优选,限于篇幅,这里就不对Cloudflare Tunnel的安装进行展开了,假定你已经有一个正常运行的Tunnel。

  • 交代下栗子的背景,我在内网服务器上安装了一个Web服务,监听38448端口,同时在这台服务器上安装并启用了Cloudflare Tunnel,名称为SaaSTest,在这个案例中,我们使用source.meina.cn.eu.org指向这个服务的套接字,作为回退源,用web.saastest.us.kg来进行访问,配置前请检查下Tunnel的状态是HEALTHY,如下图:

测试用Tunnel

  • 在Tunnel配置中,添加一个Public Hostname:

添加Public Hostname

  • 如下图填入source.meina.cn.eu.org,Type为HTTP,URL为localhost,即对于服务器Tunnel进程来说是本地的,由于我们仅将source.meina.cn.eu.org作为回退源,因而这里的URL也可以直接填localhost,带不带端口号都可以:

添加Public Hostname

  • 再添加一个Public Hostname,填入web.saastest.us.kg,Type同样为HTTP,由于这个域名是供用户访问的,因此这里的URL必须为完整的套接字,在这个例子中URL为localhost:34884

添加Public Hostname

  • 设置完如下,其中红框的必须为完整套接字,蓝框既可以带端口号,也可以不带端口号:

添加Public Hostname

  • 同时,在meina.cn.eu.org域和saastest.us.kg域中会生成对应的DNS记录,指向Tunnel:

DNS记录生成

DNS记录生成

  • meina.cn.eu.org域中我们再添加edge.meina.cn.eu.org指向 test.cloudflare.182682.xyz,作为该域下的优选域名:

添加优选域名

  • saastest.us.kg域中,我们直接修改web.saastest.us.kg的DNS记录,改为指向edge.meina.cn.eu.org,因为稍后我们将把web.saastest.us.kg加入到自定义主机名中,不再需要指向具体的Tunnel了:

修改客户域记录

  • 回到meina.cn.eu.org域,完成回退源和自定义主机名的添加(和栗子1的操作是一模一样的,不会的直接去栗子1看),完成后如下:

回退源及自定义主机名设置

  • 此时,我们再用web.saastest.us.kg访问,就可以正常访问搭设的内网服务了,并且域名解析也会是优选的:

正常访问内网服务


最后一点小心得

  • 另外看到一些视频UP主或博主写的,不在回退域建立优选域名,而是直接把客户域指向优选域名,其实这是错误的(除非客户域托管在支持分流的DNS商那边),因为等CF缓存刷新后,在自定义主机名这里就会看到主机名状态是已移动(错误),这时候需要重新把客户域指向回退域中任一个域名才能解决。

CNAME错误

  • 从以上的配置步骤中,我们可以看到除了回退源所在的域必须由CF托管外,客户域是可以由任一个DNS商来进行托管的,假如使用华为云这些支持分流的DNS商的话,回退源上的那个优选域名都不需要设置,直接在客户域上进行分流设置即可,这里就不展开细说了,相信理解了原理的同学都能自己配出来,这里就交给大家自行摸索了,也算是验证下对本文的理解了^.^