Cloudflare DDNS with Linux Shell¶
1. Introduction¶
随着IPv6的普及,及公网IPv4的不可获得性,利用IPv6实现外网访问的需求逐渐提高。本文利用Cloudflare DNS API实现IPv6的DDNS。
2. Environment Requirements¶
- OS: Linux with SHELL(sh), Other Unix maybe.
- HostName: example.com
- HostName for DDNS: ddns.example.com
3. Steps to DDNS¶
(1)获取域名的Zone ID
和API Key
¶
在域名控制面板右下方的 API 一栏可直接获取到 Zone ID。
API Key 则需要点击该栏下方的「Get your API key」,然后输入密码及验证码确认才可获取。
其实也可以自己新建一个API Key而不使用全局API Key。
(2)添加子域名的AAAA记录¶
在域名面板的「DNS」选项卡,DNS Records中添加 AAAA 记录,以ddns.example.com
为例:
- Name: "ddns"
- IPv6 address: "::1"
- TTL: NULL
- CDN: None
(3)获取AAAA记录ddns.example.com
的RecordID¶
在命令行中执行:
curl -s -X GET "https://api.cloudflare.com/client/v4/zones/ZONE_ID/dns_records?\
type=AAAA&name=DDNS_HOSTNAME&content=127.0.0.1&\
page=1&per_page=100&order=type&direction=desc&match=any" \
-H "X-Auth-Email: CF_EMAIL" \
-H "X-Auth-Key: CF_API_KEY" \
-H "Content-Type: application/json" \
| python -m json.tool
Zone ID
- DDNS_HOSTNAME是第二步设置AAAA记录的域名
- CF_EMAIL是Cloudflare账户的注册email地址
- CF_API_KEY是第一步获取的API KEY
成功执行后会返回一段JSON格式的输出,在result
中找到域名ddns.example.com
对应的"id"
(4)创建DDNS脚本¶
A useful Cloudflare Shell API is available on my gitlab: gitlab.dashdreams.com, all based on scripts above.
(5)运行脚本¶
为脚本添加执行权限sudo chmod +x ddns.sh
运行脚本sudo ./ddns.sh
(6)添加定时运行¶
- 使用crontab
- 使用systemd timer(参考本博客)Systemd-Timer
REF¶
[1].https://zhuanlan.zhihu.com/p/69379645