# 利用 CloudFlare Api 实现 DDNS
# CloudFlare API Token
首先,获取 API Token (opens new window),创建令牌

选择 编辑区域 DNS

在蓝框内选择域名,然后点击 继续以显示摘要,在下一页面复制令牌。

使用以下代码查看API令牌是否激活
linux:
curl -X GET "https://api.cloudflare.com/client/v4/user/tokens/verify" \
-H "Authorization: Bearer {你的令牌}" \
-H "Content-Type:application/json"
1
2
3
2
3
windows:
curl.exe -X GET "https://api.cloudflare.com/client/v4/user/tokens/verify" `
-H "Authorization: Bearer {你的令牌}" `
-H "Content-Type:application/json"
1
2
3
2
3
成功将返回"message":"This API Token is valid and active"。
# CloudFlare Zone ID
在托管的网站页面获取。

# 查看dns记录并获取记录id
查看该域名全部记录。
linux:
curl --request GET \
--url https://api.cloudflare.com/client/v4/zones/{zone_id}/dns_records \
--header 'Content-Type: application/json' \
-H "Authorization: Bearer {你的令牌}"
1
2
3
4
2
3
4
windows:
curl.exe --request GET `
--url https://api.cloudflare.com/client/v4/zones/{zone_id}/dns_records
--header 'Content-Type: application/json'
-H "Authorization: Bearer {你的令牌}"
1
2
3
4
2
3
4
查看特定域名记录,比如A记录,dns.demo.com
linux:
curl -X GET "https://api.cloudflare.com/client/v4/zones/{zone_id}/dns_records?type=A&name=dns.demo.com" \
-H "Content-Type:application/json" \
-H "Authorization: Bearer {你的令牌}"
1
2
3
2
3
windows:
curl.exe -X GET "https://api.cloudflare.com/client/v4/zones/{zone_id}/dns_records?type=A&name=dns.demo.com" `
-H "Content-Type:application/json" `
-H "Authorization: Bearer {你的令牌}"
1
2
3
2
3
将返回这样的字符,此id为记录的id。

# 使用 API 设置 DNS 记录
linux:
# 获取ipv6
$CURRENT_IP=$(curl -s ipv6.ip.sb)
# 获取出口ipv4
$CURRENT_IP=$(curl -s ipv4.ip.sb)
# 获取局域网ipv4
$local_ip = (Get-NetIPAddress | Where-Object {$_.AddressFamily -eq "IPv4" -and $_.PrefixOrigin -eq "Dhcp"}).IPAddress
# 配置
curl --request PATCH \
--url https://api.cloudflare.com/client/v4/zones/{zone_id}/dns_records?type=A&name=dns.demo.com \
--header 'Content-Type: application/json' \
-H "Authorization: Bearer {你的令牌}" \
--data '{
"comment": "Domain update record",
"name": "dns.demo.com",
"proxied": false,
"tags": [],
"ttl": 1,
"content": "`$local_ip`",
"type": "A"
}'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
windows:
# 获取局域网ipv4
$local_ip = (Get-NetIPAddress | Where-Object {$_.AddressFamily -eq "IPv4" -and $_.PrefixOrigin -eq "Dhcp"}).IPAddress
# 配置内容
$json = @"
{
"comment": "Domain update record",
"name": "dns.demo.com",
"proxied": false,
"tags": [],
"ttl": 1,
"content": "$local_ip",
"type": "A"
}
"@
$headers=@{}
$headers.Add("Content-Type", "application/json")
$headers.Add("X-Auth-Email", "")
$response = Invoke-WebRequest -Uri 'https://api.cloudflare.com/client/v4/zones/{zone_id}/dns_records/{dns_record_id}' -Method PATCH -Headers $headers -ContentType 'application/json' -Body $local_ip
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 自动更新 DNS 记录
# linux设置 crontab
ebnf
crontab -e
1
2
2
添加一行,表示每分钟执行一次
*/1 * * * * /你的文件路径/ddns.sh
# window设置开机自启动
新建文件 ddns.ps1,写入前面的代码,保存。
新建文件 setddns.bat,写入以下代码
@echo off
start powershell -windowstyle hidden .\cloudflare-ddns.ps1
1
2
2
新建文件startddns.vbs,写入以下代码,将在开机5s后执行
Set ws = CreateObject("Wscript.Shell")
WScript.Sleep 5000
ws.run "setddns.bat",vbhide
1
2
3
2
3
任何创建vbs的快捷方式,放入启动文件夹。
文章作者: 小张
文章链接:/
版权声明: 转载请注明。