DDNS-利用免费的CloudflareWorker操作DNS更新
本文将利用 Cloudflare Worker 的无服务器架构和 Linux/NAS 的脚本能力,提供了一个低成本、灵活的 DDNS 解决方案。
Cloudflare Worker配置
Step1
创建一个cloudflare的worker.js,填入以下内容:
1 | async function getZoneId(domain, headers) { |
Step2 创建环境变量(可选)
环境变量有以下三个,如果不填也可以用,即[旧版传参方式]
由于API_KEY这里是你的cloudflare global api key
建议创建环境变量并用pass
代替直接在请求中传apikey
Type | Name | Value |
---|---|---|
Secret | API_KEY | Value encrypted |
Secret | Value encrypted | |
Plaintext | PASS | Your passcode |
参数说明和用法
支持的请求参数(通过URL查询参数传递)
参数名 | 说明 | 是否必需 | 备注 |
---|---|---|---|
record |
需要更新的DNS记录,完整域名,如example.com 或sub.example.com |
是 | 自动解析顶级域与子域名 |
ip |
IPv4或IPv6地址 | 旧版必需 | 新版优先使用请求头中的cf-connecting-ip 的IPv6地址 |
ttl |
TTL值 | 否 | 默认为1(自动TTL) |
proxied |
是否启用Cloudflare代理 | 否 | 默认为false,传true 启用代理 |
email |
Cloudflare账户邮箱 | 旧版认证 | 通过URL传入,旧版参数 |
api_key |
Cloudflare API Key | 旧版认证 | 通过URL传入,旧版参数 |
pass |
访问密码 | 新版认证 | 必须与环境变量PASS 一致 |
旧版示例
GET https://your-worker-url/?email=you@example.com&api_key=your_api_key&record=sub.example.com&ip=1.2.3.4&ttl=120&proxied=true
- 说明:更新
sub.example.com
的A记录为1.2.3.4
,TTL为120秒,启用Cloudflare代理。
新版示例
GET https://your-worker-url/?pass=your_pass&record=example.com
cf-connecting-ip
会自动获取请求发起者的IPv6地址(如有),或者URL中带ip
参数(IPv4或IPv6)。- 使用环境变量
EMAIL
和API_KEY
作鉴权。 - 如果未传ttl,默认为1(自动)。
proxied
参数可选,默认false。
在命令行中,执行wget或者curl + 链接都可以触发
Linux脚本示例 - 以QNAP NAS为例
事实上QNAP的DDNS配置里可以直接用这个请求,但是这里还是使用cron job运行脚本的方法以展现通用性:
一、创建一个脚本
1 |
|
二、给脚本授权执行权限
SSH登录NAS,执行:
bash复制
chmod +x /share/Public/DDNS/ddns.sh
三、创建日志目录(如果不存在)
bash复制
mkdir -p /share/Public/DDNS/log
四、设置威联通的定时任务
- 编辑 crontab 配置文件(威联通重启后该文件自带生效)
bash复制
vi /etc/config/crontab
- 在文件末尾添加(假设每天凌晨4点执行):
复制
0 4 * * * /share/Public/DDNS/ddns.sh
保存并退出。
重新加载crontab并重启服务:
bash复制
crontab /etc/config/crontab && /etc/init.d/crond.sh restart
五、验证和调试
- 手动执行脚本测试:
bash复制
/share/Public/DDNS/ddns.sh
- 查看日志:
bash复制
cat /share/Public/DDNS/log/ddns.log
vim
编辑 /etc/config/crontab
文件,添加定时任务行
1. 打开文件
在威联通的 SSH 终端执行:
1 | vi /etc/config/crontab |
(vi
和 vim
通常是同一个编辑器)
2. 进入编辑模式添加行
打开文件后你处于“普通模式”,可以用以下步骤添加新行:
按键盘上的Page Down键或用方向键
↓
滚动到文件末尾(也可以用快捷键G
直接跳到文件末尾,按大写G
)按
o
(小写字母o),这会在当前行下面新开一行,并进入编辑模式(光标出现,能输入文字)输入你要添加的内容:
1 | 0 4 * * * /share/Public/DDNS/ddns.sh |
建议放在/share/共享目录 下,如果放在/root或者/sbin这类地方,可能重启后就没了。
3. 保存并退出
输入完毕后,按下键盘上的
Esc
键,退出编辑模式回到普通模式输入
:wq
(注意冒号是英文状态下的冒号,w
是写入保存,q
是退出)按回车键执行命令,文件保存后退出
vim
4. 如果意外更改了内容,不想保存想退出怎么办?
按
Esc
键确保处于普通模式输入
:q!
(冒号 + q + 感叹号),表示强制退出且不保存改动按回车即可退出
vim
,所有改动都会丢弃,文件保持原样
5. 常用 Vim 小技巧总结
操作 | 命令/按键 | 说明 |
---|---|---|
进入编辑模式 | i (光标处插入),o (下一行插入) |
可以输入文本 |
退出编辑模式 | Esc |
回到普通模式 |
保存文件并退出 | :wq 或 :x + 回车 |
写入文件并退出 |
不保存退出 | :q! + 回车 |
强制退出,不保存改动 |
跳转到文件末尾 | G |
快速跳转 |
上下移动 | 方向键 ↑ ↓ | 移动光标 |
6. 例子流程
1 | vi /etc/config/crontab |
- 按大写
G
跳到底部 - 按
o
新建下一行 - 输入:
1 | 0 4 * * * /share/Public/DDNS/ddns.sh |
- 按
Esc
- 输入
:wq
- 按回车退出保存
这样你的定时任务就被添加到了 /etc/config/crontab
,重启后不会丢失。
如果你对vim不熟练,也可以把文件内容备份出来,在本地电脑编辑好后再传回NAS替换,或者用 cat >> /etc/config/crontab
方式追加(需要小心)。
5. 调试(可选)
如果想在运行时看到脚本输出,可以临时修改脚本,在关键步骤加一些 echo
命令,或者直接执行脚本时启用shell的调试:
bash复制
sh -x /share/Public/DDNS/ddns.sh
这会打印每条执行的命令和参数,方便排查问题。
- Title: DDNS-利用免费的CloudflareWorker操作DNS更新
- Author: Kevin Tsang
- Created at : 2025-06-14 00:00:00
- Updated at : 2025-06-24 18:08:49
- Link: https://blog.infrost.site/2025/06/14/CloudflareDDNSbyScript/
- License: This work is licensed under CC BY-NC-SA 4.0.