CloudFlare进行自定义内外网混合动态域名DDNS脚本

本文最后更新于:2022年12月16日 晚上

CloudFlare进行自定义内外网混合动态域名DDNS脚本

实现同一个二级域名,多个内外网的同时解析

1、获取CloudFlare的API令牌

直接进入地址:API 令牌 | [账户名]’s Account | Cloudflare

image-20221216151625273

2、获取根域名ID

1
2
3
4
curl -X GET "https://api.cloudflare.com/client/v4/zones" \
-H "X-Auth-Email: [CloudFlare账户]" \
-H "X-Auth-Key: [API令牌]" \
-H "Content-Type: application/json"

例如下图的就是,后面是"name":kbai.cc域名,前面的"id":后面的就是根域名ID

image-20221216152126480

3、获取各个二级域名ID

注意:与官网命令不同,官方文档自我感觉有BUG,可能不能获取所有二级域名ID,下面的命令自己研究出来的真实可用,而且多个相同名字的二级域名对应的ID是不同的!!

1
2
3
4
curl -X GET "https://api.cloudflare.com/client/v4/zones/[根域名ID]/dns_records" \
-H "Content-Type:application/json" \
-H "X-Auth-Key: [API令牌]" \
-H "X-Auth-Email: [CloudFlare账户]"

例如下图的就是,后面是"name":"b101.kbai.cc"域名,前面的"id":后面的就是二级域名ID,前面的"zone_ID":后面的就是根域名ID

image-20221216152754600

4、实现动态域名自写脚本

Linux系统
1
curl -X PUT "https://api.cloudflare.com/client/v4/zones/[根域名ID]/dns_records/[二级域名ID]/" -H "X-Auth-Key:[API令牌]" -H "X-Auth-Email:[CloudFlare账户]" -H "Content-Type: application/json" --data '{"type":"A","name":"[二级域名]","content":"[IP地址]","ttl":1,"proxied":false}'
Windows系统

安装CURL下载地址:下载CURL

默认下载:64位即可,解压后自行去系统环境变量中,加入解压的CURL的bin目录即可。

image-20221216153641156

注意:跟Linux命令不同的是,json模块下"双引号要改成/"!还有大括号外的'单引号要改成"双引号!!!传递的json参数的双引号是需要转义的。

实现命令如下:

1
curl -X PUT "https://api.cloudflare.com/client/v4/zones/[根域名ID]/dns_records/[二级域名ID]/" -H "X-Auth-Key:[API令牌]" -H "X-Auth-Email:[CloudFlare账户]" -H "Content-Type: application/json" --data "{\\"type\\":\\"A\\",\\"name\\":\\"[二级域名]\\",\\"content\\":\\"[IP地址]\\",\\"ttl\\":1,\\"proxied\\":false}"

我在Windows系统下的实战案例,实现同域名多个网卡的内网IP地址解析以及外网解析

image-20221216155730212

说明:里面区分网卡的NET1、NET2等等,是走这里来的。里面的desk2.kbai.cc是我自己用的外网线路地址(家庭公网宽带,每天都会变),用不到可以删掉,这个的同域名的多网卡解析,一个域名对应多个IP地址,二级域名是一样的,只有二级域名ID不同来实现区分实现。

下面的是我写好的.bat脚本,然后使用Windows Server的计划任务程序来运行。

image-20221216160238658

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
@echo off & setlocal enabledelayedexpansion

for /f "tokens=1 delims=[]" %%i in ('nbtstat -S^|find /n "NET1"') do (
nbtstat -S | more +%%i >$
set /p Str=<$
del $
for /f "tokens=2 delims=[]" %%i in ('echo "!Str!"') do set NET1IP=%%i
)
for /f "tokens=1 delims=[]" %%i in ('nbtstat -S^|find /n "NET2"') do (
nbtstat -S | more +%%i >$
set /p Str=<$
del $
for /f "tokens=2 delims=[]" %%i in ('echo "!Str!"') do set NET2IP=%%i
)
for /f "tokens=1 delims=[]" %%i in ('nbtstat -S^|find /n "NET3"') do (
nbtstat -S | more +%%i >$
set /p Str=<$
del $
for /f "tokens=2 delims=[]" %%i in ('echo "!Str!"') do set NET3IP=%%i
)



Set host=desk2.kbai.cc
Set ip=
For /f "skip=1 tokens=2 delims=[" %%a in ('ping %host%') do (
For /f "tokens=1 delims=]" %%b in ("%%a") do (
Set ip=%%b
)
)



curl -X PUT "https://api.cloudflare.com/client/v4/zones/[根域名ID]/dns_records/[二级域名ID]/" -H "X-Auth-Key:[API令牌]" -H "X-Auth-Email:[CloudFlare账户]" -H "Content-Type: application/json" --data "{\\"type\\":\\"A\\",\\"name\\":\\"cmcloud.kbai.cc\\",\\"content\\":\\"%NET1IP%\\",\\"ttl\\":1,\\"proxied\\":false}"

curl -X PUT "https://api.cloudflare.com/client/v4/zones/[根域名ID]/dns_records/[二级域名ID]/" -H "X-Auth-Key:[API令牌]" -H "X-Auth-Email:[CloudFlare账户]" -H "Content-Type: application/json" --data "{\\"type\\":\\"A\\",\\"name\\":\\"cmcloud.kbai.cc\\",\\"content\\":\\"%NET2IP%\\",\\"ttl\\":1,\\"proxied\\":false}"

curl -X PUT "https://api.cloudflare.com/client/v4/zones/[根域名ID]/dns_records/[二级域名ID]/" -H "X-Auth-Key:[API令牌]" -H "X-Auth-Email:[CloudFlare账户]" -H "Content-Type: application/json" --data "{\\"type\\":\\"A\\",\\"name\\":\\"cmcloud.kbai.cc\\",\\"content\\":\\"%NET3IP%\\",\\"ttl\\":1,\\"proxied\\":false}"

curl -X PUT "https://api.cloudflare.com/client/v4/zones/[根域名ID]/dns_records/[二级域名ID]/" -H "X-Auth-Key:[API令牌]" -H "X-Auth-Email:[CloudFlare账户]" -H "Content-Type: application/json" --data "{\\"type\\":\\"A\\",\\"name\\":\\"cmcloud.kbai.cc\\",\\"content\\":\\"%ip%\\",\\"ttl\\":1,\\"proxied\\":false}"

实现的效果:

image-20221216160057922

Windows系统简单的解析

参考集成软件:FlareDDNS v2.1.0.1 - Cloudflare动态解析Windows客户端 支持IPv6 消息推送 | 萌え Moè~ (moe.sx)

📣特别声明

此文章全部都是依靠自己的学习理解来写的原创文章,难免可能会出现有错误的地方,

如果大家以后阅读的时候发现有问题,那就麻烦到下方评论区来进行错误指出,使错误尽快做出改正,

在此,感谢大家的阅读与支持!🤝💦🎉

🍻支持一下

觉得我写的好的话可以支持一下我哦~持续关注我,会更新其他好玩且实用的项目。

👋如果我能帮助到你,那就请我喝杯🧋呗~👇👇👇


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!