使用 CNAME 接入 CloudFlare 新玩法

CloudFlare 是一家美国的跨国科技企业,总部位于旧金山,在英国伦敦亦设有办事处。Cloudflare 以向客户提供网站安全管理、性能优化及相关的技术支持为主要业务。通过基于反向代理的内容传递网络 (ContentDeliveryNetwork,CDN) 及分布式域名解析服务 (DistributedDomainNameServer), Cloudflare 可以帮助受保护站点抵御包括拒绝服务攻击 (DenialofService) 在内的大多数网络攻击,确保该网站长期在线,同时提升网站的性能、访问速度以改善访客体验。

CloudFlare 的免费版套餐只能使用 NS 方式,即域名 DNS 解析需接入到 CloudFlare 中,不支持 CNAME,但是通过 Cloudflare Partner 计划,可以实现 CNAME 解析,且支持 SSL。

对于国内用户来说,CloudFlare 防 D、防 C 的作用比较大,支持 IPv6,域名解析也比较快,但其 CDN 功能给国内用户带来的却是“云减速”。

CloudFlare Partner 计划申请不难,但不再本文探讨范围中,需要的可以自行搜索下。

一、域名接入

1、登录平台

以下将以本站接入平台为例。

打开本站接入平台:CloudFlare CDN 管理平台

登录

若未注册过 CloudFlare 账号,将自动注册,若已注册或者已有域名托管在 CloudFlare,可以使用已有账号密码登录。

2、添加域名

点击左上角“添加域名”,输入根域名,注意只能添加根域名

比如域名 vircloud.net,只能添加 vircloud.net,而不能添加类似 www.vircloud.net 或者 blog.vircloud.net 之类的子域名,已经托管于 CloudFlare 可以官网删除后再在面板添加:

添加域名

添加域名

3、添加记录

在域名右侧点击管理:

管理域名

可以看到当前已默认添加了一条 www 的 A 记录,注意这一条不能删(删了也白删,会再自动生成):

管理记录

点击添加记录进行增加 CNAME 记录:

添加记录

比如 666.example.com,记录这里简写 666 或完整的 666.example.com,回源地址则是 666.example.com 的实际内容来源地址,比如是镜像 www.example.com 则直接填 www.example.com,注意回源地址只能是 URL,不能是域名,并且 URL 直接访问要可以正常访问:

实际内容来源地址 建议复杂且长,否则源站 IP 被猜中 CDN 防护功能就没有任何作用了。

添加记录

可以看到 CNAME 记录已经分配了(666.example.com.cdn.cloudflare.net),到这里我们已经完成了域名的接入:

添加纪录

二、域名解析

在上面我们添加了 666.example.com,CNAME 地址是 666.example.com.cdn.cloudflare.net,接下来我们就要将这两条记录添加到我们的域名解析商处。

回源地址 www.example.com 正常设置就行,没啥好说的,但是 666.example.com 却可以有两种添加方式,这就是本文的重点了。

1、CNAME 解析

这是基本解析了,类似下图,名称是 666, 指向是 666.example.com.cdn.cloudflare.net

添加 CNAME 记录

2、A 记录解析

这是最新发现的玩法,直接添加 A 记录,名称是 666,IP 指向 1.1.1.11.0.0.1,IPv6 的话,IP 指向2606:4700:4700::11112606:4700:4700::1001

添加 A 记录解析

细心的你发现什么了吗?

是的,IP 是最近 CloudFlare 新推出 公共 DNS 服务器 IP

打开网站 666.example.com 可以发现和 CNAME 方式是一模一样的效果,而访问者 ping 我们的域名响应的则是 1.1.1.1,是不是有趣又高大上?

[d:\~]$ ping 666.example.com

正在 Ping 666.example.com [1.1.1.1] 具有 32 字节的数据:
来自 1.1.1.1 的回复: 字节=32 时间=16ms TTL=53
来自 1.1.1.1 的回复: 字节=32 时间=16ms TTL=53
来自 1.1.1.1 的回复: 字节=32 时间=16ms TTL=53
来自 1.1.1.1 的回复: 字节=32 时间=16ms TTL=53

1.1.1.1 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 16ms,最长 = 16ms,平均 = 16ms

不过需要提醒的是 1.1.1.1 在很多地方是不通的~ 原因是此前 1.1.1.1 是做为 ICANN 保留地址并没有开放使用,所以一些路由器或者交换机之类的 IP 被设置成了 1.1.1.1,在这种情况下你把 666.example.com 指向 1.1.1.1 ,能通才怪咯(但是可以指向另外 3 个 IP 呀,也可以指定 CloudFlare CDN 任意节点的 IP 呀~)

三、更多功能

1、启用 SSL

通过 CNAME 接入 CloudFlare 同样有提供免费 SSL,而且是区别于托管默认的 Universal SSL,以下以 666.example.com 做演示。

① CNAME

签发证书必须验证所有权,所以启用 SSL 必须先在 DNS 解析商处有 CNAME 记录(上面讲的 A 记录解析至 1.1.1.1 等将无法签发)。

直接访问源站正常,将 666.example.com CNAME 至 666.example.com.cdn.cloudflare.com 后访问 http://666.example.com 正常。

编辑原站启用 SSL,访问正常,登录 CloudFlare 控制面板,在 Crypto-> SSL 设为 Full(strict)(区别参考《如何正确启用 CloudFlare SSL》),访问 https://666.example.com 正常。

查看证书是通用不共享证书(区别于 NS 接入):

证书

证书

2、启用其他高级功能

管理平台仅提供了 CNAME 解析,要使用 CloudFlare 更多功能,如 DDOS 防护、防火墙、证书管理等等,请登录 CloudFlare 官网进行操作,不在本文范围中,可自行探索:

CloudFlare 官方地址

账号密码即是在第一步接入时的账号密码。

四、问题分析

1、证书错误

操作:将 666.example.com 解析到 1.1.1.1,直接访问 https://666.example.com 证书错误
原因:CloudFlare 需要验证域名所有权才能签发证书,而验证的方式就是将 666.example.com CNAME 至 666.example.com.cdn.cloudflare.com,故要启用 SSL 都要先做 CNAME 记录,注意证书是有有效期的,证书到期了又没有做 CNAME, HTTPS 可能会掉。

2、无法访问

操作:已经将 666.example.com CNAME 至 666.example.com.cdn.cloudflare.com,而后 浏览器 HTTP 访问出现提示:

Error 520: Web server is returning an unknown error

HTTPS 访问提示:

此网站无法提供安全连接
666.example.com 使用了不受支持的协议。
ERR_SSL_VERSION_OR_CIPHER_MISMATCH

协议不受支持
客户端和服务器不支持一般 SSL 协议版本或加密套件。

原因:造成这个问题的原因在于源站服务器的配置,具体来说是默认站点的配置,CNAME 中的源站 URL,其实对于 CloudFlare 来说是什么没有区别,因为最终要获取的是源站 IP,然后通过 CNAME 域名 + 源站 IP 来获取内容缓存,如果服务器上没有配置对应的 CNAME 域名站点,那么访问的将是默认站点,即在 Nginx 或 Apache 配置中标识 default_server 的站点,所以要解决此问题,可以修改服务器配置,将源站设置为 default_server
在本例中,源站 www.example.com 可以正常工作,但配置的默认站点对于任何请求都一律不返回数据,所以当 CloudFlare 以 666.example.com + IP 来服务器请求数据时,访问的是默认站点而不是源站 www.example.com,所以服务器不返回数据,CDN 自然也就无法正常工作

其实在这里还是有个疑问,既然是以 IP 来请求数据为什么源站地址不能设置 IP 而必须是要 URL 呢?

注:本文举例使用域名 example.com 非真实测试使用的域名。


你可能还需要:

1、《如何正确启用 CloudFlare SSL
2、《利用 CloudFlare API 实现自动 DDNS 功能|支持IPv4|IPv6
3、《使用 CDN(CloudFlare|腾讯云|加速乐等)情况下如何获取访客真实 IP ?


参考文章:

1、《Partner With Us | Cloudflare
2、《[装逼!]CF的新玩法,让你的网站拥有B格
3、《How do I do CNAME setup?
4、《Error 1016 - Origin DNS error
5、《Error 1001: DNS resolution error
6、《HTTP 409 错误 – 冲突 (Conflict)
7、《CloudFlare使用CNAME接入域名


ArmxMod for Typecho
个性化、自适应、功能强大的响应式主题

推广

 继续浏览关于 cdncloudflarecname 的文章

 本文最后更新于 2019/05/21 20:25:36,可能因经年累月而与现状有所差异

 引用转载请注明:VirCloud's Blog > 运维 > 使用 CNAME 接入 CloudFlare 新玩法

精选评论

  1. MoeWang

    老哥你的cdn.vircloud.net控制面板咋没了...cf.vircloud.net也是响应时间过长...我网站好几个域名还绑上面呢... icon_cry.gif

    1. 欧文斯

      被人恶意绑定大量域名,API 被封了 icon_surprised.gif ,在任何一个使用 CF 合作面板的网站上都可以管理域名,比如 https://cdn.wzfou.com/

      1. Akide

        我也是又网站使用了博主的cloudflare第三方平台,使用https://cdn.wzfou.com/ 没有问题的,希望博主的cf合作面板早日解封

  2. CloudFlare CDN与SSL冲突解决 - TAO 0 LOGS
  3. eamo

    现在NS接入也是 不共享证书,只有一个用于标识的那个cloudflare域名,而且还是泛域名证书,所以证书也没有那么难看了。 icon_neutral.gif

    1. 欧文斯

      特地去看了下,通过 CF 官方接入 ,DNS Name 还是一大票域名,如果是第三方面板接入,都是单独

  4. needtofell

    博主,是不是这样,A记录域名和CNAME域名对应,A记录是添加在DNS管理商那里(非CLOUDFLARE, A记录同时添加 真实服务器IP 和 1.1.1.1),CNAME是通过博主的CLOUDFLARE PARTNER(CLOUDFLARE似乎无法同时A解析和CNAME解析同域名)。你这个配图把我看懵逼了。

    1. 欧文斯

      A 记录不用与 CNAME 一样,一样的话 CNAME 就没有意义了。
      简单来说,就是将需要通过 CNAME 接入达到加速和隐藏 IP 效果的站点,① 设置一个难记且长的域名,这个需要在 DNS 管理商指向真实 IP,② 然后在 PARTANER 设置想要别人访问的简洁易记的域名,这个域名 CNAME 指向上面难记且长的域名,③ 如果不启用 SSL,可以直接到 DNS 管理商那里,新增一个 A 记录,域名是上面简洁易记的域名, IP 时 1.1.1.1,如果要启用 SSL,等 SSL 生效后再添加 A 记录

      1. needtofell

        明白了,解释的很详细!!感谢回答。

  5. Hans

    可以了,感谢!

  6. 青山

    早上刚用,网站就进不去了,dns错误,吓得我感觉关了

    1. 欧文斯

      dns错误,是cloudflare的错误提示,还是浏览器的提示呢,cloudflare可以看下文章的问题分析,浏览器的话是dns解析的问题呢