Cloudflare SaaS 实现 CNAME 接入 及 基于 GeoDNS 的分流解析

Logo of Cloudflare

Intro

Cloudflare 提供免费的 Anycast CDN 以及近乎无限的 DDoS 防护,但是除非 Enterprise 计划的用户才可以使用大陆节点,同时 Cloudflare 开放给免费用户的节点对于中国大陆而言往往线路优化不怎么好,由此便引申出了境内采用其他 CDN ,境外使用 Cloudflare 的方法,但是这种方法需要 CNAME 方式来。

而 Cloudflare SaaS 正包含自定义主机名的能力hu。

Prapare

  • 一个 Cloudflare 账户
  • 两个域名,一个为服务所使用的域名,另外一个为托管在 Cloudflare 的域名

Concept

  • 回退域
    即托管在 Cloudflare 的任意域名
  • 回退源
    即 SaaS 的源站,一个回退域只可以有一个回退源。(2025 修正:Cloudflare 允许一个回退域拥有多个源站,回退源作为默认源)
  • Cloudflare Saas
    Cloudflare for SaaS · Cloudflare for Platforms docs

Configure

1.配置及开通 SaaS 功能

进入回退域的页面,然后点击 SSL/TLS -> 自定义主机名

按照相关要求开通即可。

2.添加回退源

前往 DNS 选项,添加任意子域名指向默认源站,注意需要让 Cloudflare 代理此站点。

3.CNAME 接入网站

点击 添加自定义主机名 然后按照自己的要求添加即可。

如有需要可以自定义源服务器(不同于回退源)。

完成之后按照要求,完成自定义主机名的 TXT 验证。(当然,你也可以提前添加 DCV 委派于自定义域名)。

完成两次 TXT 验证。

最后添加 CNAME 解析到 回退源 即可。

4.进阶(基于 GeoDNS 的分流解析)

我们可以通过 GeoDNS 实现对 DNS 记录的精准控制,如选择最近的 IP 地址/分地域解析

DNSPOD

如下图所示即可(注意线路类型个人建议留一个默认给到境外,不然一个境内一个境外很可能有偶见性匹配不出来的情况?)

PowerDNS

如下图所示,使用官方提供的 LUA 解析功能和 GeoIP 支持

apt 安装即可,后在 pdns.conf 配置 LUA 解析、GeoIP 数据库(可从 MaxMind 获取)等

# 启用 LUA 解析
enable-lua-records=yes
# 此处示例使用的是 MySQL 作为后端,具体需要自行调整
launch=gmysql,geoip
# GeoIP 数据库文件
geoip-database-files=/etc/geoip/GeoLite2-City.mmdb

PowerDNS 提供了一个叫做 country 的函数
例如这样

TXT ";if(country('国家 ISO 3166 alpha-2 code')) then return 'YES' else return 'NO' end"

用户在 ISO 3166 alpha-2 对应国家 的解析结果就是 YES,反之就是 NO,根据他我们就可以写出我们需要的 DNS 记录。

CNAME "";if(country('CN')) then return '\*\*\*.cdn.dnsv1.com.cn' else return '\*\*\*.top' end"' end"  

配置如下

参考文章:
使用 PowerDNS 的 Lua 功能自建分地区解析 GeoDNS Lan Tian @ Blog
Cloudflare for SaaS · Cloudflare for Platforms docs

Read more

APNIC Email Whois Update 教程(含SSO相关)

众所周知,APNIC 对于 End User 只提供了 Email Whois Update 方式,而这一更新方式非常难用,官方文档也比较含糊不清,包括最近将 Password 验证弃用,转为使用 SSO 验证(这一验证方式甚至没有在官方文档中提及)。 对于 Whois Update,总共可以分为三步 1.获取原本的 Whois 数据。 2.在原本的 Whois 数据上进行修改。 3.添加验证相关字段并发送邮件。 一、获取原有 Whois 数据 原有 Whois 数据是修改的模板,可以从 https://wq.apnic.net//static/search.html 获取。 得到如下数据。

Dokploy & Traefik 反代已有 SSL 的容器

最近,我将我的所有服务迁移到了 Dokploy 上运行,Dokploy 使用 Traefik 将 Docker 内的服务反代到服务器的外部端口上。 本来这个过程非常方便,只需要去图形化界面添加域名即可,但是此处 Traefik 默认是以 HTTP 协议回源,导致某些采用 HTTPS 协议的应用(比如我的 Krill,SSL 强开无法关闭)无法正常回源。 只需要加上这样一行代码即可。 - traefik.http.services.servicename.loadbalancer.server.scheme=https 对于 Compose 部署方式,将这一行加到 labels 中即可,如: labels: - traefik.http.services.rpki-infrastructure-krill*****-web.loadbalancer.