主域名留在 Cloudflare,只把一个子域名委派给 DNSPod 做国内外分流 —— 这套流程的配置、执行与巡检工具。
📖 使用教程(带截图) · 背后的原理与纯手动做法
Cloudflare 的权威 DNS 不支持普通记录按地区返回不同答案,而记录一旦是橙云,返回的又是全球一致的 anycast IP。 想让一个子域名「海外走 CF CDN、国内走别的 CDN」,只能把这一个名字委派给支持线路的 DNS 服务商, 再用 Cloudflare for SaaS 让 CF 继续代理这个已经不在它手里的主机名。
流程本身不难,但环节多、每步都要等生效、还有几个不看文档就会踩的坑:
- 委派后留在父区的记录会变成 shadowed records,看得见但一条都不生效
- CF 的 DCV TXT 在证书带通配符 SAN 时是多条同名不同值,少一条证书就签不出来
- CF 那条解析必须挂在「默认」线兜底,只配境内 + 境外会让部分解析器拿不到记录
- 用了自定义源服务器,源站必须能路由那个 SNI,否则回源直接 403
这个工具把流程拆成带验证的步骤,能自动做的直接调 API,做不了的给出精确指令并轮询确认。
- 域名列表:所有委派出去的访问域名及其线路落点
- 配置向导:一步步把域名配到位。每步标明是程序执行还是手动操作、预计多久生效、已经等了多久;关掉页面回来能续上
- 巡检:随时核对三个平台的实际状态,报告委派、遮蔽记录、验证 TXT、线路落点、证书等问题
- 数据搬家:整库导出 / 导入,换机器、备份都靠它
到 Releases 下载。
Windows
| 数据存在哪 | 适合 | |
|---|---|---|
安装版 *-installer.exe |
%APPDATA%\splitdns |
常用,升级重装不动数据 |
绿色版 *-portable.zip |
exe 同级 data/ |
解压即用,整个文件夹拷走就带走全部配置 |
机器上没有 WebView2 会自己拉起来装。
macOS
*-macos-universal.zip 解压出 splitdns.app,Intel 与 Apple Silicon 通用,数据在
~/Library/Application Support/splitdns。
没有做签名和公证,首次打开会被 Gatekeeper 拦下——右键点 .app → 打开 → 再点一次「打开」即可,
或者 xattr -dr com.apple.quarantine /Applications/splitdns.app。
不需要域名,不需要登录——它不监听任何端口,密钥只存在你自己机器上。
目标:img.example.com 默认线走 Cloudflare CDN 回源到海外源站,境内线走腾讯云 EdgeOne。
「凭据」页各加一条,密钥保存后不再回显,只能覆盖。
- Cloudflare:API Token,需要
Zone → Zone → Read、Zone → DNS → Edit、Zone → SSL and Certificates → Edit, 作用范围要同时覆盖父区example.com和 SaaS 区mycdn.net - 腾讯云 DNSPod:SecretId / SecretKey
「回源」页建两条。一个回源可以被多个访问域名共用,以后换机器只改这一处。
| 名称 | 类型 | 落点值 | 源站 IP |
|---|---|---|---|
| 海外源站 | CF SaaS 落点 | origin.mycdn.net |
203.0.113.10 |
| EdgeOne 国内 | 第三方 CDN CNAME | img.example.com.eo.dnse2.com |
— |
「源站 IP」只在 SaaS 区里还没有那条橙云记录、需要程序替你建的时候才填;已经建好了就留空。
用自定义源服务器时,在「SNI」里填那个源服务器名字——填了程序就知道这个域名要额外提醒你去源站补路由。
「域名 → 新增域名」:
- 访问域名填
img.example.com,选好 Cloudflare 凭据——父区会自动推导(拿访问域名去凭据可见的 zone 里找最长后缀匹配),填完就显示推导结果 - SaaS 区从下拉里选
mycdn.net;不走 CF 就选「不使用 CF for SaaS」 - 选 DNSPod 凭据
- 线路:
默认 → 海外源站、境内 → EdgeOne 国内。线路落点可以引用「回源」库里的条目,也可以直接填—— EdgeOne 那种一个域名一个 CNAME、不会复用的落点,不必先去回源库建条目
「默认」线是兜底。只配境内 + 境外,识别不出归属的解析器会一条记录都拿不到,所以把覆盖面最广的那条挂在「默认」上。
保存后自动进入配置流程。每步下面的按钮:
- 自动执行 —— 程序调 API 替你做
- 我自己做完了 —— 你在 CF / DNSPod 面板里做完后点,等待计时从这一刻开始
- 确认完成 —— 只出现在程序验不了的步骤(比如源站的 SNI 路由)
不管哪种方式,做完都会重新去三个平台核对一遍,平台接口返回成功不算数,巡检查到生效才算完成。所以:
- 关掉页面隔天回来,进度还在,而且会按当前真实状态重新判定
- 已经通过的步骤如果线上被人改了,会自动退回「等待生效」并说明差在哪
- 唯一不可逆的「清理父区被遮蔽的记录」会先列出要删的每一条,点确认才动手
照样在「域名」里建条目、填线路,进流程会发现每一步都已完成,直接当巡检面板用。 存量域名建议都录进来,出问题时一眼能看到差在哪。
「数据」页可以整库导出和导入。换机器、重装、想留个备份,都走这里—— 导出的是一致性快照,导入前会自动把现有数据另存一份。
导出文件里有明文的平台密钥,当作密钥文件对待。
cd desktop && wails devserver/ 是业务本体(API + 巡检 + 平台客户端),web/ 是界面,desktop/ 只是把它们装进一个原生窗口。
前端静态导出后嵌进 exe,运行时摊到数据目录由 Go 托管,生产不跑 Node。