Skip to content

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 IDAPI 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是第一步中获取的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