返回上一级

# 利用 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

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

成功将返回"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

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

查看特定域名记录,比如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

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

将返回这样的字符,此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

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

# 自动更新 DNS 记录

# linux设置 crontab

ebnf
crontab -e
1
2

添加一行,表示每分钟执行一次

*/1 * * * * /你的文件路径/ddns.sh

# window设置开机自启动

新建文件 ddns.ps1,写入前面的代码,保存。

新建文件 setddns.bat,写入以下代码

@echo off
start powershell -windowstyle hidden .\cloudflare-ddns.ps1
1
2

新建文件startddns.vbs,写入以下代码,将在开机5s后执行

Set ws = CreateObject("Wscript.Shell")
WScript.Sleep 5000
ws.run "setddns.bat",vbhide
1
2
3

任何创建vbs的快捷方式,放入启动文件夹。

文章作者: 小张

文章链接/

版权声明: 转载请注明。

最近更新: 10/3/2024, 6:11:49 PM
编程导航   |