本文利用回退源使用第二域名DDNS指向Cloudflare实现自选IP,并借助定时脚本自动优选最佳IP

使用Cloudflare做DNS解析的域名,开启Proxy小云朵后可以获得CDN服务,以提高线路不好或是被墙的ip的访问性。当然启用Proxy后连接的好坏也取决于用户到Cloudflare的连接质量,Cloudflare提供了一些固定的泛播ip,用户如果连接至延迟更高的ip反而会获得“减速”效果。因此本文提供一种方式来定期优选Cloudflare ip并指向自己的域名。

一、Cloudflare回退源设置自定义主机名

Cloudflare Saas文档:Cloudflare for SaaS · Cloudflare for Platforms docs

参考:Cloudflare for SaaS实现CF自选IP | CDN - 放养平凡 (btwoa.com)

已往可以使用Worker等方法,现在似乎不再奏效,但现在可以使用Cloudflare提供的回退源即SaaS功能实现DDNS和优选IP。你需要两个域名:

域名A: a.com 使用Cloudflare解析,作为回退源

域名B:b.com 使用其他DNS解析(本文以DNSPod为例),作为自定义域名

使用回退源的方法能够实现多个替身指向同一二级域名,如1.b.com 2.c.com 均指向 fallback.a.com,你可以把fallback.a.com作为你需要加速的博客等网站。如果你的网站大多时间是在国内访问,那完全可以隐藏作为中转的fallback.a.com,仅向用户透露b.com,这样也便于统一做SEO。

免费版Saas服务示意图

自定义域名与回退源的关系如下图所示:

graph LR A(Client) --> B --> |A记录|C D --> |proxy|E(Server) subgraph DNSPOD B(1.b.com) end subgraph Cloudflare C[泛播IP 自选] --> |回退源|D(fallback.a.com) end

设置回退源

本文中回退源为fallback.a.com,需要是在Cloudflare中添加DNS记录并开启Proxy的二级域名

在CLoudflare设置面板的SSL/TLS --> 自定义主机名 中添加回退源并等待初始化完成即可。初次使用可能要求绑定银行卡或PayPal账户,选择免费的套餐即可。

设置回退源

添加自定义域名

本文中使用的自定义域名为1.b.com ,当然你可以添加多个自定义域名。在CLoudflare设置面板的SSL/TLS --> 自定义主机名 中添加自定义主机名

设置自定义主机名

在这里选择TXT验证,Cloudflare会提供你用于鉴权和证书验证的两条TXT记录,将其添加至你的DNS解析(如DNSPod)

_cf-custom-hostname.1   xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx
1                       "ca3-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

接下来需要先将自定义域名CNAME到回退源,待Cloudflare验证成功后删除CNAME记录,再添加指向Cloudflare泛播IP的A记录。

1   CNAME   fallback.a.com

之后在使用Cloudflare自选IP的时候,记得先禁用此CNAME记录。

二、Cloudflare 自选 IP

Cloudflare提供了一些泛播IP(参见官方公布的IP 范围 | Cloudflare),通过脚本测试优选延迟最低的ip,并设置自定义域名 1.b.com指向这些ip便可实现优化Clouflare连接的作用。

优选IP脚本使用项目:XIU2/CloudflareSpeedTest: 「自选优选 IP」测试 Cloudflare CDN 延迟和速度,获取最快 IP !

Cloudflare提供泛播IP

按照项目说明使用,克隆到本地:

git clone https://github.com/XIU2/CloudflareSpeedTest.git

在关掉代理的电脑上运行此脚本,得到本机连接Cloudlfare最优的ip,将最优的ip添加至自定义主机名的A记录

1   A   103.21.244.0

并禁用此前的CNAME记录,用户在访问1.b.com时即可获得指向Cloudflare站点的最优连接。

CloudflareST脚本的使用语法:

#设置单个IP延迟测试的次数为10
./CloudflareST -t 10

三、DDNS-Cloudflare-Dnspod

为了定时优选Cloudflare IP并自动修改DNS解析,我们需要DDNS脚本来完成这一操作。

采取方案:openwrt定时优选Cloudflare IP并更新到dnspod_哔哩哔哩_bilibili

作者提供了使用CloudflareST优选ip,并通过DNSPod的API调整A记录指向,实现DDNS的功能。

忠告:请不要使用freenom的免费域名使用Cloudflare服务。

使用前请务必观看原作者视频或阅读博客。若原作者博客打不开,可以从这里下载原作者提供的脚本。

本文此脚本部署在国内的VPS上,方便定时DDNS,不同终端优选的IP可能在不同网络环境下访问性不同(可以选择不同线路分开解析)。

具体使用步骤为:

3.1 下载脚本并初始配置

  1. 下载ddns脚本压缩包,将其解压至与CloudflareST同一目录

  2. 编辑 ip.sh,关闭停用openwrt代理插件功能:我们仅借用脚本的ddns功能,故需将下面一行

    ##openwrt科学上网插件配置
    #优选节点时是否自动停止科学上网服务 true=自动停止 false=不停止 默认为 true
    pause=true

    改为false

3.2 获取DNSPod参数

a) 配置DNSPod Token:

  1. 在https://console.dnspod.cn/account/token/token页面,选择DNSPod Token,新建一个,记住名称、ID和Token。

    新建DNSPod Token

  2. 编辑 ip.sh,将ID、Token填入下面一行:

    #登录令牌"ID,Token"
    LOGIN_TOKEN="替换密钥ID,替换密钥Token"

b) 配置域名ID

  1. 在DNSPod的域名/域名设置里可以找到Domain ID

    域名ID

  2. 编辑 ip.sh,将Domain ID填入下面一行:

    #域名ID
    DOMAIN_ID=替换域名ID

    子域名为二级自定义主机名,本例中即 1.b.com ,将 1填入下面一行

    #子域名
    SUB_DOMAIN=替换子域名

c) 配置子域名ID

在上面几条配置好后,编辑 ip.sh 最后一行,将其改为

##执行 . ip_sub 获取子域名ID   . ip_ddns 测速并DDNS
. ip_sub

保存后,运行 ip.sh

bash ip.sh

在返回的消息中即可获得 id

获取子域名ID

替换到ip.sh

#子域名ID
RECORD_ID=替换子域名ID

注意:如果你有多个线路的A记录,并分别优选IP(例如联通指向104.16.35.219,默认指向162.159.58.70),那么执行ip_sub会返回两个id ,请确认你选择了正确的那一个。

3.3 定时运行脚本

待上述配置完成后,将ip.sh最后一行改回

##执行 . ip_sub 获取子域名ID   . ip_ddns 测速并DDNS
. ip_ddns

将测试延迟次数改大以获得更精确的丢包率结果

#延迟测速次数;单个 IP 延迟测速次数,为 1 时将过滤丢包的IP,TCP协议;(默认 4 次 )
CFST_T=5

之后,运行脚本,等待结果,查看DNSPod是否有更改日志

bash ip.sh

添加crontab每小时执行脚本1次

crontab -e
0 * * * * cd /home/gakki/Documents/scripts_archive/CloudFlareST && bash ip.sh &>/dev/null 2>&1