本文利用回退源使用第二域名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。
自定义域名与回退源的关系如下图所示:
设置回退源
本文中回退源为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 !
按照项目说明使用,克隆到本地:
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 下载脚本并初始配置
-
下载ddns脚本压缩包,将其解压至与CloudflareST同一目录
-
编辑
ip.sh
,关闭停用openwrt代理插件功能:我们仅借用脚本的ddns功能,故需将下面一行##openwrt科学上网插件配置 #优选节点时是否自动停止科学上网服务 true=自动停止 false=不停止 默认为 true pause=true
改为
false
3.2 获取DNSPod参数
a) 配置DNSPod Token:
-
在https://console.dnspod.cn/account/token/token页面,选择
DNSPod Token
,新建一个,记住名称、ID和Token。 -
编辑
ip.sh
,将ID、Token填入下面一行:#登录令牌"ID,Token" LOGIN_TOKEN="替换密钥ID,替换密钥Token"
b) 配置域名ID
-
在DNSPod的
域名/域名设置
里可以找到Domain ID
-
编辑
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
替换到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