Table of Contents
1. DDNS 原理
家用路由器或设备定期向 DDNS 服务商发送并更新设备当前 IP 地址,并和指定域名进行绑定。在进行域名解析时, DDNS 服务器会自动解析出当前 IP ,将访问者引向设置的 IP 地址。
2. Cloudflare API 测试
- 不推荐使用 Cloudflare 的 global key ,最好创建仅限于修改指定域名的专用 token
Cloudflare Token 测试
curl -X GET "https://api.cloudflare.com/client/v4/user/tokens/verify" \ -H "Authorization: Bearer <YOUR_API_TOKEN>" \ -H "Content-Type:application/json"
将
YOUR_API_TOKEN
设置为已经申请好的 cloudflare token.获取 Cloudflare Zone id
curl -X GET "https://api.cloudflare.com/client/v4/zones?name=<ZONE_NAME>" \ -H "Authorization: Bearer <YOUR_API_TOKEN>" \ -H "Content-Type: application/json"
此处的
ZONE_NAME
我使用的是autove.dev
,也即当前网站的二级域名。获取指定域名 DNS record id
curl -X GET "https://api.cloudflare.com/client/v4/zones/<ZONE_ID>/dns_records?name=<SUB_DOMAIN>&type=AAAA" \ -H "Authorization: Bearer <YOUR_API_TOKEN>" \ -H "Content-Type: application/json"
此处的
SUB_DOMAIN
用需要更新的 IP 对应的目标三级域名替换,从结果中拿到RECORD_ID
,从而使用下一步来进行更新 IPv6 的 API 测试。在实际 OpenWRT 设置时,指定三级域名即可。Update IPv6 API 测试
curl -X PUT "https://api.cloudflare.com/client/v4/zones/<ZONE_ID>/dns_records/<RECORD_ID>" \ -H "Authorization: Bearer <YOUR_API_TOKEN>" \ -H "Content-Type: application/json" \ --data '{ "type": "AAAA", "name": "<SUB_DOMAIN>", "content": "<NEW_IP>", "ttl": 1, "proxied": false }'
Cloudflare DNS 解析记录更新验证
3. Openwrt 设置及测试
3.1. 更新设置
Luci Web Interface -> Services -> Dynamic DNS -> Information -> Edit -> Basic Settings: OpenWRT DDNS 基础设置
3.2. 接口设置
Luci Web Interface -> Services -> Dynamic DNS -> Information -> Edit -> Advanced Settings: 选择需更新 IP 对应的 Interface
3.3. 验证
Luci Web Interface -> Services -> Dynamic DNS -> Information: 确认手动 DDNS 更新测试成功
4. 更新局域网设备地址
当有了 IPv6 地址后,一个好的实践是将主机的全局 IPv6 地址使用 DDNS 更新到指定的域名上。
实现这点主要在于获取局域网内连接到该路由器的设备全局 IPv6 地址。如何获取呢?
通过 /usr/bin/ip -6 neigh | grep $MAC_ADDR | grep -v -E '^f' | grep REACHABLE | awk '{print $1}'
命令来获取。
其中 MAC_ADDR
是局域网设备 MAC 地址。
Luci Web Interface -> Services -> Dynamic DNS -> Information -> Edit -> Advanced Settings: 使用 Script 方式来获取 IP address
5. 访问防火墙设置
一般需要访问已绑定域名的更新 IP ,同时需要打开 WAN 口防火墙,将 WAN interface reject
修改为 accept
。
Luci Web Interface -> Network -> Firewall: 开放防火墙以在公网访问端口或服务