2024最新Cloudflare DDNS设置教程(保姆级图文详解)
前言:为什么我们需要 DDNS,又为什么选择 Cloudflare?
在数字化浪潮席卷的今天,越来越多的人开始搭建属于自己的“家庭数据中心”——可能是 NAS (网络附属存储) 用来存放珍贵的家庭照片和影音资料,也可能是家庭服务器、软路由,用于托管个人网站、运行智能家居中枢,或是实现远程办公和访问。
这一切应用的核心需求之一,就是能够从外网(比如在公司、在旅途中)稳定地访问到家里的设备。然而,绝大多数家庭宽带服务商为我们分配的都是动态公网 IP 地址。这意味着每次路由器重启、网络重拨,甚至每隔一段时间,这个 IP 地址都可能会改变。这就好比你朋友家的门牌号天天在换,你想要去拜访他,就必须每次都重新问一遍新地址,这无疑是极其繁琐和不现实的。
DDNS (Dynamic Domain Name System,动态域名系统) 就是为了解决这个问题而生的“自动报地址”服务。它的工作原理很简单:在你的设备上运行一个客户端,这个客户端会定时检测你当前的公网 IP,一旦发现 IP 发生变化,就立刻通知 DNS 服务器,将你的域名(例如 home.yourdomain.com
)更新解析到这个新的 IP 地址上。这样,无论你家的 IP 怎么变,你只需要记住并访问那个固定的域名,就能准确地找到家里的设备。
市面上提供 DDNS 服务的厂商很多,比如花生壳、No-IP 等,但它们或多或少存在一些限制,比如免费版域名难记、需要定期手动续期、功能受限等。而我们今天的主角——Cloudflare,则提供了一套堪称完美的免费 DDNS 解决方案。
选择 Cloudflare 做 DDNS 的巨大优势:
- 完全免费:Cloudflare 的 DNS 解析服务是免费的,其功能强大的 API 也是免费开放的,设置 DDNS 无需任何额外成本。
- 使用自己的域名:你可以将自己购买的任何个性化域名(如
yourname.com
)接入 Cloudflare,创建任意子域名用于 DDNS,专业且易记。 - 极速稳定:Cloudflare 是全球最大的 CDN 和 DNS 服务商之一,其解析速度和稳定性无出其右,确保你的域名能够被快速、准确地解析。
- 安全加成(可选):你可以开启 Cloudflare 的橙色云朵(代理模式),它会隐藏你的真实家庭 IP 地址,有效抵御 DDOS 攻击和恶意扫描,并为你提供免费的 SSL 证书,让你的服务通过 HTTPS 访问,安全性大大提升。
- 生态强大,扩展性强:一次设置,终身受用。未来你还可以利用 Cloudflare 的其他免费功能,如 WAF(Web 应用程序防火墙)、Zero Trust 隧道等,进一步武装你的家庭网络。
本教程将以“保姆级”的详尽程度,手把手带你完成从零开始的 Cloudflare DDNS 设置。无论你是技术小白还是有一定基础的玩家,都能通过本教程轻松搞定。
第一部分:前期准备工作
在正式开始配置之前,请确保你已经准备好以下三样东西:
-
一个属于你自己的域名:
- 如果你还没有域名,可以从阿里云、腾讯云、GoDaddy、Namecheap 等国内外知名注册商处购买一个。价格因后缀而异,便宜的
.top
,.xyz
等后缀一年可能只需十几元。 - 本教程假设你已经拥有一个域名,例如
yourdomain.com
。
- 如果你还没有域名,可以从阿里云、腾讯云、GoDaddy、Namecheap 等国内外知名注册商处购买一个。价格因后缀而异,便宜的
-
一个 Cloudflare 账户:
- 访问 Cloudflare 官网 (https://www.cloudflare.com/),点击右上角的“Sign Up”(注册),使用你的邮箱即可免费注册一个账户。过程非常简单,这里不再赘述。
[图片:Cloudflare 注册页面截图]
-
能够运行 DDNS 客户端的设备:
- 这台设备需要 7×24 小时在线,并且与你的公网 IP 在同一个网络下。常见的选择有:
- 软路由 (如 OpenWrt, iStoreOS, pfSense)
- NAS (如群晖 Synology, 威联通 QNAP)
- 一台小型服务器或电脑 (如树莓派, NUC, 或任何安装了 Windows/Linux 的电脑)
- 支持 Docker 的任何设备 (这是目前最推荐的通用方法)
- 这台设备需要 7×24 小时在线,并且与你的公网 IP 在同一个网络下。常见的选择有:
第二部分:Cloudflare 侧的配置(核心步骤)
这部分是在 Cloudflare 的网站上进行操作,为后续客户端的自动更新做好准备。
步骤一:将你的域名添加到 Cloudflare 并修改 DNS 服务器
这是使用 Cloudflare 所有服务的基础。
-
登录你的 Cloudflare 账户,在主界面点击“+ Add a site”按钮。
[图片:Cloudflare 主面板,高亮“Add a site”按钮]
-
在输入框中输入你的根域名(例如
yourdomain.com
,不要带www
),然后点击“Add site”。[图片:输入你的域名并点击“Add site”的界面]
-
接下来,Cloudflare 会让你选择套餐。我们直接选择最下方的“Free”套餐,功能已经完全足够,然后点击“Continue”。
[图片:Cloudflare 套餐选择页面,高亮“Free”套餐]
-
Cloudflare 会自动扫描你域名当前已有的 DNS 解析记录。如果你的域名是新买的,这里可能是空的;如果是正在使用的,它会列出来。这里我们不用管它,直接点击“Continue”。
-
【关键步骤】更改域名服务器 (Nameservers)
- 现在,Cloudflare 会显示两行 NS (Nameserver) 地址。这是 Cloudflare 分配给你的专属 DNS 服务器地址。
- 你需要做的是:登录你购买域名的那个网站(比如阿里云、腾讯云),找到你域名的 DNS 管理或域名服务器修改入口,将原来的 NS 地址删除,替换成 Cloudflare 提供的这两条地址。
[图片:Cloudflare 页面显示两条 NS 地址,并有提示让你去域名注册商处修改]
- 以阿里云为例:登录阿里云控制台 -> 域名列表 -> 找到你的域名 -> 点击“管理” -> 左侧菜单“DNS 修改” -> 点击“修改 DNS 服务器”,然后填入 Cloudflare 给你的那两条地址。
[图片:阿里云或其他注册商修改 DNS 服务器的界面截图]
- 修改完成后,回到 Cloudflare 页面,点击“Done, check nameservers”。DNS 服务器的全球生效需要一些时间,短则几分钟,长则可能需要数小时。你可以偶尔点击一下页面的检查按钮,或者等待 Cloudflare 发送给你的确认邮件。当状态变为“Great news! Cloudflare is now protecting your site”时,就表示第一步成功了。
步骤二:创建用于 DDNS 的 DNS A 记录
我们需要先在 Cloudflare 上创建一个子域名记录,作为 DDNS 更新的目标。
-
在 Cloudflare 仪表板,点击你已经添加成功的域名,进入该域名的管理界面。
-
点击左侧菜单的“DNS”选项。
-
在“DNS management”页面,点击“+ Add record”按钮。
[图片:Cloudflare DNS 管理页面,高亮“Add record”按钮]
-
现在我们来填写记录信息,这是 DDNS 更新的目标:
- Type (类型):选择 A。A 记录代表将域名指向一个 IPv4 地址。
- Name (名称):填写你想要的子域名。例如,你想通过
nas.yourdomain.com
访问你的 NAS,这里就填nas
。为了教程清晰,我们以ddns
为例。 - IPv4 address (IPv4 地址):这里随便填一个公网 IP,比如
8.8.8.8
或1.1.1.1
。因为这个地址马上就会被 DDNS 客户端自动更新为你家的真实 IP,所以初始值不重要。 - Proxy status (代理状态):这里你会看到一个橙色/灰色云朵的开关,这个非常重要!
- 橙色云朵 (Proxied):推荐开启。这会隐藏你的真实家庭 IP,所有流量都经过 Cloudflare 中转,提供安全防护和 CDN 加速。非常适合 Web 服务(如网站、NAS 管理页面)。
- 灰色云朵 (DNS-only):直接将域名解析到你的真实家庭 IP。适用于非网页服务(如 SSH、FTP、游戏服务器等)或需要直接 IP 连接的场景。
- 新手建议:先开启橙色云朵,以获得最佳安全性。
- TTL (Time to Live):保持“Auto”即可。
-
填写完毕后,点击“Save”。
[图片:填写 A 记录的完整表单截图,并用箭头标注各个字段的含义]
现在,你已经有了一条名为
ddns.yourdomain.com
的 A 记录,准备好被动态更新了。
步骤三:创建 API 令牌 (API Token)
为了让你的客户端(路由器、NAS等)有权限来修改上面创建的 DNS 记录,我们需要给它一把“钥匙”——API 令牌。使用专用的 API 令牌而不是全局 API 密钥,是更现代、更安全的做法,因为它遵循“最小权限原则”。
-
在 Cloudflare 仪表板右上角,点击你的头像图标,然后选择“My Profile”。
-
在左侧菜单中,选择“API Tokens”。
-
点击“Create Token”按钮。
-
Cloudflare 提供了很多模板,我们直接找到“Edit zone DNS”这个模板,点击右侧的“Use template”。这个模板的权限正好是我们需要的——仅仅编辑指定域名的 DNS 记录。
[图片:创建 API Token 页面,高亮“Edit zone DNS”模板]
-
接下来,配置这个令牌的权限范围,以确保安全:
- Token name:给这个令牌起个名字,方便识别,比如
DDNS-Token
。 - Permissions (权限):保持默认的
Zone
–DNS
–Edit
即可。 - Zone Resources (区域资源):这是最关键的一步,用于限制这个令牌能操作哪个域名。
- 选择
Include
–Specific zone
– 然后在下拉菜单中选择你的域名 (yourdomain.com
)。 - 这样做可以确保即使这个令牌泄露了,也只能修改你这一个域名的 DNS,无法影响你账户下的其他域名。
- 选择
- IP Address Filtering (IP 地址过滤) (可选,高级安全设置):你可以设置只允许来自特定 IP 地址或 IP 段的请求使用此令牌。对于家庭 DDNS 场景,由于 IP 是动态的,通常留空。
- TTL (有效期) (可选):可以设置令牌的有效期。通常保持默认的永久有效。
- Token name:给这个令牌起个名字,方便识别,比如
-
配置完成后,滚动到页面底部,点击“Continue to summary”。
-
在确认页面,再次核对信息无误后,点击“Create Token”。
-
【极其重要】 Cloudflare 现在会显示生成的 API 令牌。这串字符是你唯一一次看到它的机会!请立刻点击“Copy”按钮,并将它安全地保存在一个地方(例如你的密码管理器或一个临时文本文件中)。 一旦你离开这个页面,就再也无法查看完整的令牌了。
[图片:显示已创建的 API Token 的页面,并用醒目的红色框和文字提示用户立即复制保存]
至此,Cloudf-lare 侧的所有准备工作已经全部完成!我们得到了:
* 一个待更新的域名:ddns.yourdomain.com
* 一个拥有更新权限的 API 令牌:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
(你刚刚复制的那一长串)
第三部分:客户端侧的配置(选择一种即可)
现在,我们需要在你的设备上安装并配置 DDNS 客户端,让它开始自动更新 IP。这里介绍三种最主流、最稳定的方法,请根据你的设备情况选择其中一种。
方法一:使用 Docker 部署(通用性最强,强烈推荐)
如果你的设备(NAS、软路由、Linux 服务器等)支持 Docker,这是最简单、最干净、最可靠的方法。我们使用一个非常流行的开源项目 oznu/cloudflare-ddns
。
-
准备参数:
- API_TOKEN:就是你在第二部分步骤三中创建并保存的那个 API 令牌。
- ZONE:你的根域名,例如
yourdomain.com
。 - SUBDOMAIN:你想要更新的子域名,例如
ddns
。(如果你想更新根域名本身,可以设为@
;如果你想更新www.yourdomain.com
,可以设为www
) - PROXIED:(可选)是否开启 Cloudflare 代理(橙色云朵)。设为
true
表示开启,false
表示关闭。建议设为true
。
-
执行 Docker 命令:
- 打开你设备的 SSH 终端。
- 如果你有 Portainer 或其他 Docker GUI 管理工具,也可以在图形界面中创建容器。
- 执行以下命令来启动容器(请将
<>
中的内容替换为你自己的信息):
bash
docker run -d \
--name=cloudflare-ddns \
--restart=always \
-e API_TOKEN=<你的API令牌> \
-e ZONE=<你的根域名,如yourdomain.com> \
-e SUBDOMAIN=<你的子域名,如ddns> \
-e PROXIED=true \
oznu/cloudflare-ddns命令解释:
*docker run -d
:在后台运行容器。
*--name=cloudflare-ddns
:给容器命名为cloudflare-ddns
。
*--restart=always
:让容器在设备重启后自动启动。
*-e
:设置环境变量,用于向容器传递配置信息。 -
验证:
- 运行
docker logs cloudflare-ddns
查看容器日志。 - 如果看到类似
Updating IP address to: xxx.xxx.xxx.xxx
和SUCCESS
的字样,就代表配置成功了!容器会每 5 分钟检查一次 IP 并自动更新。
[图片:Docker 容器成功运行并输出更新成功日志的终端截图]
- 运行
方法二:使用 OpenWrt/iStoreOS 路由器插件
如果你的主路由是 OpenWrt 或基于它开发的 iStoreOS 等系统,使用内置的 DDNS 插件非常方便。
-
安装插件:
- 登录你的路由器后台。
- 进入“系统” -> “软件包”。
- 在“筛选”框中输入
ddns
,找到ddns-scripts
和luci-app-ddns
这两个软件包,如果未安装,请点击安装。通常ddns-scripts
会附带一个cloudflare.com-v4
的脚本。
-
配置 DDNS 服务:
- 进入“服务” -> “动态 DNS”。
- 在“服务”部分,可以修改或添加一个新服务。我们添加一个新的,名称随意,比如
MyCloudflare
。 -
基本设置:
- 启用:勾选。
- 查询主机名/IP地址:填写你完整的 DDNS 域名,例如
ddns.yourdomain.com
。 - DDNS 服务提供商:在下拉列表中选择
cloudflare.com-v4
。 - 域名:再次填写完整的 DDNS 域名,
ddns.yourdomain.com
。 - 用户名:这里填写你的 根域名,例如
yourdomain.com
。 - 密码:这里粘贴你的 Cloudflare API 令牌。
- 使用 HTTPS:勾选。
- CA 证书路径:保持默认的
/etc/ssl/certs
。
-
高级设置:
- IP 地址来源:可以选择“URL”,并填入一个获取 IP 的地址,如
http://api.ipify.org/
或http://checkip.amazonaws.com/
。通常保持默认的“网络”或“接口”也能正常工作。 - 代理:如果你想开启橙色云朵,就在“高级设置”中找到代理或 proxy 相关选项并启用。具体字段名称可能因脚本版本而异。
- IP 地址来源:可以选择“URL”,并填入一个获取 IP 的地址,如
-
保存并应用:
- 点击“保存并应用”。
- 回到动态 DNS 主页面,找到你刚配置的服务,点击“启动/重启”,然后查看右侧的“日志”,如果显示成功更新,就大功告成了。
[图片:OpenWrt DDNS 配置页面的完整截图,标注了各个关键字段]
方法三:使用纯 Shell 脚本(适用于任何 Linux 环境)
对于喜欢 DIY 的高级用户,或者在没有 Docker 和专用插件的环境(如树莓派、普通 Linux 服务器)中,可以自己写一个简单的 Shell 脚本,并用 cron
定时任务来执行。
-
创建脚本文件:
- 在你的设备上创建一个文件,例如
cf-ddns.sh
。 touch cf-ddns.sh && chmod +x cf-ddns.sh
- 在你的设备上创建一个文件,例如
-
编辑脚本内容:
- 使用
vim
或nano
编辑该文件,粘贴以下内容,并修改顶部的配置变量:
“`bash
!/bin/bash
— 请修改以下配置 —
CF_API_TOKEN=”<你的API令牌>”
CF_ZONE_ID=”<你的Zone ID>” # Zone ID 而不是域名
CF_RECORD_NAME=”ddns.yourdomain.com” # 完整的 DDNS 域名— 配置结束 —
获取 Zone ID 的方法:
登录 Cloudflare -> 选择你的域名 -> 在右侧“API”区域下方找到 Zone ID 并复制
获取公网 IP
CURRENT_IP=$(curl -s https://api.ipify.org)
if [ -z “$CURRENT_IP” ]; then
echo “错误: 无法获取公网 IP”
exit 1
fi获取 DNS 记录的 Record ID 和当前 IP
RECORD_INFO=$(curl -s -X GET “https://api.cloudflare.com/client/v4/zones/${CF_ZONE_ID}/dns_records?name=${CF_RECORD_NAME}&type=A” \
-H “Authorization: Bearer ${CF_API_TOKEN}” \
-H “Content-Type: application/json”)CF_RECORD_ID=$(echo $RECORD_INFO | grep -o ‘”id”:”[^”]‘ | cut -d'”‘ -f4)
CF_RECORD_IP=$(echo $RECORD_INFO | grep -o ‘”content”:”[^”]‘ | cut -d'”‘ -f4)if [ -z “$CF_RECORD_ID” ]; then
echo “错误: 无法获取 Record ID,请检查域名和 API 令牌是否正确”
exit 1
fi比较 IP 地址
if [ “$CURRENT_IP” == “$CF_RECORD_IP” ]; then
echo “IP 地址未变化: ${CURRENT_IP}”
exit 0
else
echo “IP 地址已变化: ${CF_RECORD_IP} -> ${CURRENT_IP}”
# 更新 DNS 记录
UPDATE_RESULT=$(curl -s -X PUT “https://api.cloudflare.com/client/v4/zones/${CF_ZONE_ID}/dns_records/${CF_RECORD_ID}” \
-H “Authorization: Bearer ${CF_API_TOKEN}” \
-H “Content-Type: application/json” \
–data ‘{“type”:”A”,”name”:”‘”$CF_RECORD_NAME”‘”,”content”:”‘”$CURRENT_IP”‘”,”ttl”:1,”proxied”:true}’) # proxied: true 开启代理, false 关闭if [[ $(echo $UPDATE_RESULT | grep -o '"success":true') ]]; then echo "成功: DNS 记录已更新为 ${CURRENT_IP}" exit 0 else echo "失败: 更新 DNS 记录时出错" echo "API 响应: $UPDATE_RESULT" exit 1 fi
fi
``
CF_ZONE_ID`。请登录 Cloudflare,选择你的域名,在“概述(Overview)”页面的右下角就能找到并复制它。
* **注意**:这个脚本需要 - 使用
-
设置定时任务 (Cron Job):
- 执行
crontab -e
命令编辑定时任务。 -
在文件末尾添加一行,让脚本每 5 分钟执行一次:
cron
*/5 * * * * /path/to/your/cf-ddns.sh > /dev/null 2>&1
请将/path/to/your/
替换为脚本的实际存放路径。 -
保存退出即可。系统会自动按时执行脚本,实现 DDNS 功能。
- 执行
第四部分:验证与排错
配置完成后,如何确认 DDNS 是否正常工作?
- 查看客户端日志:无论你用的是 Docker、路由器插件还是脚本,第一步都是查看它们的运行日志,确认是否有成功更新的记录。
- 检查 Cloudflare DNS 记录:登录 Cloudflare,进入域名的 DNS 管理页面,查看你设置的那条 A 记录的 IP 地址是否已经变成了你当前的家庭公网 IP。
- 检查 Cloudflare 审计日志:在 Cloudflare 仪表盘,点击顶部菜单的“Audit Log”,这里会记录所有通过 API 进行的操作。你应该能看到由你的 API 令牌发起的“Update DNS Record”操作。这是一个非常有力的排错工具。
- 使用
ping
或nslookup
命令:- 在外网的任何一台电脑上(比如用手机流量),打开命令提示符或终端。
- 执行
ping ddns.yourdomain.com
。 - 如果你开启了橙色云朵(代理),它会返回一个 Cloudflare 的 IP 地址,这是正常的。
- 如果你关闭了代理(灰色云朵),它应该直接返回你家的公网 IP 地址。
常见问题排查 (Troubleshooting):
- 更新失败:最常见的原因是 API 令牌、Zone ID 或域名填写错误。请仔细核对。
- 权限不足:请检查你的 API 令牌是否拥有“DNS:Edit”权限,并且作用域(Zone Resources)是否包含了正确的域名。
- 客户端无法获取公网 IP:检查你的设备网络是否正常,或者尝试更换获取 IP 的 URL。
总结
恭喜你!通过以上步骤,你已经成功地为你的家庭网络配置了一套免费、稳定、高效且安全的动态域名系统。现在,无论你身在何处,只需在浏览器中输入你设置的专属域名,就能轻松回家。
Cloudflare DDNS 不仅仅是一个简单的 IP 指向工具,它更是你开启家庭网络高级玩法的一把钥匙。以此为基础,你可以安全地发布个人博客、搭建私有云盘、远程管理智能家居,将家庭网络的价值发挥到极致。希望这篇保姆级的教程能为你扫清障碍,祝你在数字世界中玩得开心!