熊の杂货铺

IPV6 ONLY也能利用CloudFlare做DDNS域名

2026/03/17
3
0

观看本教学前请确保您已有Cloudflare账号 同时您的域名已经将DNS接入Cloudflare管理

账号信息收集

域名设置
左边列表 - 域 - 点进去你的域名

再在左边列表选择 DNS - 记录

添加一个二级域名(或三级) 格式如下 类型: AAAA 名称: 自行填写 IPv6地址: ::1 记住关闭小黄云(与红色箭头处一致)

邮箱账号和Global API

先点开右上角小人-选择配置文件

打码处为个人邮箱

再选择API 令牌 --> 查看 Global Api Key

信息收集完毕 开始做DDNS


DDNS配置


ssh 进机器后 先安装jq

apt update && apt install -y jq


创建文件

nano cloudflare-ddns.sh

DDNS配置文件


复制粘贴以下内容

#!/bin/bash
# basic info
api_email="CLOUDFLARE MAIL"
api_key="GLOBAL API KEYS"
zone_name="example.com"
record_name="diy.example.com"

# pull IPv6 从/64开抓而非只抓/128
v6Addr=$(ip -6 addr show scope global | awk '/inet6/ {print $2}' | cut -d/ -f1 | grep -v ^fd | head -n1)
echo "Using IPv6 address: $v6Addr"

# get zone id
zone_id=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones?name=$zone_name" \
-H "X-Auth-Email: $api_email" \
-H "X-Auth-Key: $api_key" \
-H "Content-Type: application/json" | jq -r .result[0].id )
echo "Zone $zone_name id is: $zone_id"

# get record id
record_id=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$zone_id/dns_records?type=AAAA&name=$record_name" \
-H "X-Auth-Email: $api_email" \
-H "X-Auth-Key: $api_key" \
-H "Content-Type: application/json" | jq -r .result[0].id )
echo "Record $record_name id is: $record_id"

# update record
result_json=$(curl -s -X PATCH "https://api.cloudflare.com/client/v4/zones/$zone_id/dns_records/$record_id" \
-H "X-Auth-Email: $api_email" \
-H "X-Auth-Key: $api_key" \
-H "Content-Type: application/json" \
--data "{\"type\":\"AAAA\",\"content\":\"$v6Addr\"}")

if [[ "$(echo $result_json | jq .success)" == "true" ]]; then
echo "Done!"
else
echo -e "Failed to update DDNS. CF API result: $result_json"
exit 1
fi

友情提示 : 若需只抓/128的请将 pull IPv6 的第一行 修改为以下内容


v6Addr=$(ip -6 addr show scope global | grep /128 | awk -F '[ \t]+|/' '{print $3}' | grep -v ^fd7a)

启动DDNS配置文件

bash cloudflare-ddns.sh

设置定时任务
crontab -e

每五分钟跑一次(带日志)
*/5 * * * * /bin/bash /root/cloudflare-ddns.sh >/tmp/ddns.log 2>&1

每五分钟跑一次(不带日志)
*/5 * * * * /bin/bash /root/cloudflare-ddns.sh >/dev/null 2>&1

完结撒花