使用cloudflare worker实现DDNS

DDNS Worker

背景

DDNS可实现具有公网IP(重启路由器后会变化)家庭路由器IP到域名的动态绑定。很多朋友使用花生壳或tp-link自带的tpddns.cn来实现此功能,最近收到通知2025.6.1以后tp-link不再提供服务。本文介绍使用Cloudflare Worker实现的ddns的方法和代码。

代码地址

移步Github ddns-worker

前提条件

  • 已经有自己的域名,购买申请有多种方式,自查方法
    • 如主域名为example.com
    • ddns地址为my.example.com
    • worker的地址为worker.example.com(也可使用cf的默认域名但会墙,如何修改见下文)
  • 在cloudflare上托管,注册一个账户,免费plan,把域名配置上
  • cloudflare的操作参见后文:Cloudflare Workers 简介

部署方法

worker的代码部署

  1. 将本ddns-worker工程fork到自己的github账户下(也可以通过将index.js直接上传到worker的代码编辑框,就不用执行以下步骤了
  2. 在 Cloudflare Dashboard 中创建一个新的 Worker 项目
  3. 进入 Workers & Pages > 创建应用程序 > 连接到 Git(或在settings界面中设置build)
  4. 连接到您的 GitHub 账户并选择包含 DDNS Worker 代码的仓库
  5. 配置构建设置:
    • Build command: 留空(None)
    • Deploy command: npx wrangler deploy
    • Root directory: /
  6. 设置生产分支(默认为 main
  7. 配置必要的环境变量(见下文的worker中配置环境变量)
  8. 点击"保存并部署"

完成上述步骤后,每当您推送代码到指定的分支,Cloudflare 将自动构建和部署您的 Worker。

woker中配置环境变量

在 Cloudflare Dashboard 中配置

  • 进入 Workers & Pages > your-worker-name > Settings > Variables
  • 添加相应的变量或加密变量
  • 重要:所有变量都应设置为加密变量(Secret),以确保在自动部署过程中不会丢失

本程序可支持多域名,每个域名需要配置以下三个环境变量:

{
   
   your_dns_record_name}__zone_id - 域名所在的 Cloudflare 区域 ID(应设置为加密变量,否则部署时会覆盖)
{
   
   your_dns_record_name}__api_token - 用于 Cloudflare API 认证的令牌(应设置为加密变量)
{
   
   your_dns_record_name}__access_key - 用于客户端访问验证的密钥(应设置为加密变量)

例如,要为 my.example.com 配置 DDNS 更新:

my.example.com__zone_id
my.example.com__api_token
my.example.com__access_key

使用方法

手工调用:

  • 查询当前 IP:直接访问 https://your-worker-domain.workers.dev/(修改route后可以为https://worker.example.com)
  • 更新 DNS 记录:访问 https://your-worker-domain.workers.dev/update?name=your_dns_record_name&key=your_access_key
    • name:需要更新的 DNS 记录名称,使用完整域名(如 my.example.com
    • key:访问密钥,用于验证更新请求,要等于worker中的my.example.com__access_key值

使用 crontab 自动更新

您可以在Linux主机(希望将其所在网络的公网出口IP作为dns解析ip)上使用 crontab 设置定时任务,自动更新您的 DNS 记录:

  1. 编辑 crontab

    crontab -e
    
  2. 添加定时任务

    每分钟更新一次

    * * * * * /usr/bin/curl -4 -s "https://worker.example.com/update?name=your.example.com&key=your_access_key" > /dev/null 2>&1
    

    每小时更新一次(推荐):

    0 * * * * /usr/bin/curl -4 -s "https://worker.example.com/update?name=your.example.com&key=your_access_key" > /dev/null 2>&1
    

    注意

    • 使用完整路径 /usr/bin/curl 避免环境变量问题(可通过 which curl 命令查找您系统上的curl路径)
    • 使用 -4 参数强制使用 IPv4 连接
    • -s 参数使 curl 静默运行,不输出进度或错误信息
    • > /dev/null 2>&1 将所有输出重定向到空设备,防止 cron 发送邮件

Cloudflare Workers 简介

Cloudflare Workers 是一个无服务器计算平台,允许您在 Cloudflare 的边缘网络上部署和运行代码,无需管理服务器。

必要的 Cloudflare 设置

  1. 创建 Cloudflare 账户

  2. 添加域名到 Cloudflare

    • 将您的域名添加到 Cloudflare 进行管理
    • 参考:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值