使用 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
    MoeWang 回复

    Windows 10Chrome 78.0.3904.97来自 山东 的大神

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

    1. 欧文斯

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

      1. Akide
        Akide 回复

        Mac OS X 10_15_1Chrome 78.0.3904.108来自 澳大利亚 的大神

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

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

    Android 8.0.0Chrome 69.0.3497.100来自 北京 的大神

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

    1. 欧文斯

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

  4. needtofell
    needtofell 回复

    Windows 10Chrome 68.0.3440.106来自 美国 的大神

    博主,是不是这样,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
        needtofell 回复

        Windows 10Chrome 68.0.3440.106来自 美国 的大神

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

  5. Hans
    Hans 回复

    Android 8.0.0Chrome 67.0.3396.29来自 福建 的大神

    可以了,感谢!

  6. 青山
    青山 回复

    Windows 7搜狗浏览器 2.X来自 江西 的大神

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

    1. 欧文斯

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