前言

最近几天一直再写一个小程序(其实去年11月就有想法了,但是这两天才有时间真真完善了一下),这两天终于写完了v0.1版本了,并且也达到了一个正常使用的范围

FastCDN简介

一款自动优选CloudFlare的Anycast IP以及第三方反代IP或亚马逊CDN服务器IP并自动DDNS到CLoudFlare托管的域名上的工具,并且可根据地区选择同步到对应域名

使用文档

当前文档适用版本:v0.1.1
若版本不同,具体功能实现可能会有差异

准备工作

  1. FastCDN项目地址:https://github.com/Akimio521/FastCDN,可以通过Git Clone或者打包下载的方式下载到本地
  2. 安装Python,推荐使用Python3.10及以上版本
  3. 安装依赖库:
        - 手动安装以下依赖:
            - pandas == 2.1.4
            - requests == 2.31.0
            - PyYAML == 6.0.1
        - 通过Pip安装:
           
    1
            pip install -r requirements.txt

下载CloudFlareSpeedTest

回到FastCDN的文件夹中,运行以下命令

1
python start.py

获取账户信息以及DomainID

CloudFlare网站部分

如果你熟悉CloudFlare可以查看大致步骤,详细步骤可以跳过

大致步骤

  1. 获取CloudFlare邮箱
  2. 获取Global API Key
  3. 获取对应一级域名的区域ID也就是zone_id
  4. 解析需要的子域名的A记录,值任意

详细步骤

首先需要去CloudFlare注册一个账号,并托管域名到CloudFlare(这一步大家应该都做好了吧)
假设我需要把优选的IP解析到a.com这个一级域名的子域名下,可以进入管理域名a.com的页面—>侧边栏点击概述->右下方的API页面可以找到a.com区域ID也就是zone_id,记录该值备用;再点击下方的获取您的API令牌,查看全局API令牌,即Global API Key,记录该值备用
然后回到DNS解析部分,解析两个域名(也可以更多),我这里解析了hk.a.comus.a.com,均为A记录,值可以任意,我这里就填1.1.1.1

获取DomainID

v0.1.1以上版本无需获取
~~回到FastCDN的文件夹中,运行以下命令

1
python get_zone_id.py

按要求依次填入CloudFlare账户邮箱、全局API令牌、区域ID以及域名,这样就能获取该域名的域名ID
如有多个域名,请重新执行以上操作,分别获取域名对应的域名ID~~

配置Config文件

FastCDN/config目录下创建一个文件config.yaml
以下是内容模板,按照要求填写

  • setting
        - account这部分的三个值已经在之前的步骤中获取过
        - CFST:这几个参数已经有简单的描述,详细描述可见XIU2/CloudflareSpeedTest: 🌩「自选优选 IP」(github.com)
  • SpeedTest
        - 标识名1(任意,自己看得懂就好)
            - domain:需要解析的子域名,我这里就是hk.a.com
            - cfcolo:机场三字码(具体值可以自行搜索),填写此值可以获取到对应地区的IP(可以填写多个值,用英文逗号间隔)
        - 标识名2
        - 标识名3
    下面是参考的配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
setting:
  account:
    email: akimio2333@gmail.com
    global_api_key: 56e4xxxxxxxxxxxxxxxxxxxxxxxeexxx59a8
    zone_id: 7af6xxxxxxxxxxxxxxxxxxxxx6a6c
  CFST:
    n: 200   # 延迟测速线程;越多延迟测速越快,但可能会被识别成网络扫描,最多 1000)
    t: 4    # 延迟测速次数;单个 IP 延迟测速的次数;(默认 4 次)
    dn: 20  # 下载测速数量;延迟测速并排序后,从最低延迟起下载测速的数量;(默认 10 个)
    dt: 10  # 下载测速时间;单个 IP 下载测速最长时间,不能太短;(默认 10 秒)
    tp: 443 # 指定测速端口;延迟测速/下载测速时使用的端口;(默认 443 端口)
    url: https://cf.xiu2.xyz/url  # 指定测速地址;延迟测速(HTTPing)/下载测速时使用的地址,默认地址不保证可用性,建议自建
    tl: 300 # 平均延迟上限;只输出低于指定平均延迟的 IP,各上下限条件可搭配使用
    tll: 20 # 平均延迟下限;只输出高于指定平均延迟的 IP
    tlr: 0.3  # 丢包几率上限;只输出低于/等于指定丢包率的 IP,范围 0.00~1.00,0 过滤掉任何丢包的 IP;(默认 1.00)
    sl: 3   # 下载速度下限;只输出高于指定下载速度的 IP,凑够指定数量 [-dn] 才会停止测速;(默认 0.00 MB/s)

SpeedTest:
  HK:
    domain: hk.a.com
    cfcolo: HKG
  US:
    domain: us.a.com
    cfcolo: LAX,SEA,SJC

YAML对缩进要求严格,请正确对齐

运行FastCDN

回到FastCDN的文件夹中,运行以下命令

1
python main.py

可能会遇到的问题

问题 解决方法
无法获取CloudFlare域名ID(v0.1.1及以上现象可能是无法更新DNS) 大概率是未解析初始值,需要先去网页端解析一个初始A记录
如何优选亚马逊CDN 需手动替换IP集FastCDN/temp/ipv4.txt
如何优选IPv6并解析到域名 目前只支持IPv4,お楽しみに

致谢

XIU2/CloudflareSpeedTest 为本项目提供测试程序
snowfall9/CloudflareST_auto_selector 为本项目提供思路
https://zip.baipiao.eu.org 为本项目提供反代IP