主要流程

最终目的是 让 movie.aaabbb.com 能解析成家中的公网ip

最终的api为

1
2
3
4
5
curl -X PUT "https://api.cloudflare.com/client/v4/zones/$tzone_id/dns_records/$trecord_id" \
     -H "X-Auth-Email: $auth_email" \
	 -H "X-Auth-Key: $auth_key" \
     -H "Content-Type: application/json" \
     --data '{"type":"A","name":"file.awslop.com","content":"$tip","ttl":{},"proxied":false}' ;

以上命令中需要的参数有 tzone_id、 trecord_id、 auth_email、auth_key、 tip

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#通过请求其他网站,得到自身公网ip
tip=$(curl -s http://ipv4.icanhazip.com)

#cloudflare的登录邮箱
auth_email、auth_key
https://dash.cloudflare.com/xxx/profile/api-tokens
查看 global api key即可

tzone_id、 trecord_id
这两个参数分别表示 aaabbb.com的id
与movie.aaabbb.com的id

取得 zone_id、record_id

首先是在购买域名的网站 将你的域名解析转到cloudflare上面 然后登录 cloudflare 对你的域名进行配置

假设现有域名 aaabbb.com

需要将 movie.aaabbb.com 映射到家里的公网ip上 添加一条记录 type=A name=movie ttl=auto ipv4=先随便写一个 proxy-status=dns only 橙色表示被cdn代理 灰色是无代理 如果是静态文件服务 可用考虑设置成cdn代理模式

参数准备

1
2
3
4
5
auth_email=hello@qq.com
auth_key=xx1122yyzz

record_name="movie.aaabbb.com"
record_type="A"

获取 zone_id 与 record_id

1
2
3
4
5
6
7
8
###tzone_id=zzzxxyy
zoneName=aaabbb.com
tzone_id=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones?name=$zoneName" \
-H "X-Auth-Email: $auth_email" -H "X-Auth-Key: $auth_key" -H "Content-Type: application/json" \
| grep -Po '(?<="id":")[^"]*' | head -1 )

###trecord_id=rrrxxyy
trecord_id=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$zone_identifier/dns_records?name=$record_name&type=$record_type" -H "X-Auth-Email: $auth_email" -H "X-Auth-Key: $auth_key" -H "Content-Type: application/json"  | grep -Po '(?<="id":")[^"]*')

执行更新ddns命令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
auth_email=xx
auth_key=xx
tip=$(curl -s http://ipv4.icanhazip.com)
tzone_id=zzzxxyy
trecord_id=rrrxxyy

curl -X PUT "https://api.cloudflare.com/client/v4/zones/$tzone_id/dns_records/$trecord_id" \
     -H "X-Auth-Email: $auth_email" \
	 -H "X-Auth-Key: $auth_key" \
     -H "Content-Type: application/json" \
     --data '{"type":"A","name":"movie.aaabbb.com","content":"$tip","ttl":{},"proxied":false}' ;

openwrt中配置

openwrt中支持cloudflare的ddns 所以不用自己写脚本去执行

先在cloudflare添加好 movie记录 然后在 服务-动态dns中 添加任务

1
2
3
4
5
检查域名  movie.aaabbb.com
DDNS 服务提供商 选择 cloudflare
域名  movie@aaabbb.com  
用户名   即登录邮箱
密码     非密码而是上面的 global api key