以下仅分享个人使用的情况,方法可复制,但不是通用性的。
先决条件
- 自有域名一个,托管在 Cloudflare 上;
- 路由器,支持自定义脚本;
目前我用的是 Netgear R7000,Merlin 固件。 - 公网 IP 地址(目前只做了 IPv4 )。
参数获取
- 公网 IP 地址
这个目前我是通过一些免费的 API 获取的。 - API token,这个可以在dashboard看到;
- DNS 的 Zone ID,可以登录 Cloudflare 查看,或者通过API获取;
- DNS 的 record ID,可以通过API获取。
脚本
#!/bin/sh
#Check public IP address
myip=`curl 'https://api.ipify.org'` > /dev/null 2>&1
#Update DNS record
curl -X PUT https://api.cloudflare.com/client/v4/zones/<zone_id>/dns_records/<record_id> \
-H "X-Auth-Email: <[email protected]>" \
-H "X-Auth-Key: <auth_token>" \
-H "Content-Type: application/json" \
--data "{\"type\":\"A\",\"name\":\"<DNS_record_name>\",\"content\":\"$myip\",\"ttl\":120,\"proxied\":false}" \
> /dev/null 2>&1
#return status to router
if [ $? -eq 0 ]; then
/sbin/ddns_custom_updated 1
else
/sbin/ddns_custom_updated 0
fi
(后面的部分是因为我要返回给路由器更新状态,如果只是做域名更新,可以不需要。)
这样,每次 IP 有变化,都可以更动更新我的域名记录,我随时也可以访问家里的设备了。
