DDNS 动态域名完整教学 2026:从无到有绑定 Cloudflare + Docker 自动更新
⚠️ 禁用清单(违者立即停机不退款)
- ❌ 点数卡储值、银行金融交易、政府/公部门网站
- ❌ 虚实名不符、诈欺、假购物、投资诈骗
- ❌ DDoS / 端口扫描 / 暴力破解
- ❌ 对外提供付费 Proxy / VPN 服务(仅限自用)
完整条款见 使用政策。
HiNet 家宽 PPPoE 动态 IP VPS 每次重拨 IP 都会变(中华电信机制每日强制断线重拨,加上你随时可以一键换 IP)。这带来一个日常痛点:每天 SSH / RDP 之前都要先查「现在的 IP 是多少」。解法就是 DDNS(Dynamic DNS,动态域名解析)——让一个固定域名(例如 vps.example.com)自动追踪 VPS 的最新 IP。设定一次,之后永远用域名连接,IP 怎么变都不用管。
本文从「完全没有域名」开始,一步一步做到全自动更新。方案选择上我们推荐 Cloudflare(免费 DNS)+ Docker(cloudflare-ddns 容器):Cloudflare 的 API 成熟、免费方案就够用;Docker 容器开机自启、断线自愈,比 crontab 脚本更省心。
一、什么是 DDNS?为什么动态 IP VPS 需要它
一般 DNS 是「域名 → 固定 IP」的静态对应。DDNS 则是在 IP 变动时,由一个常驻程序自动呼叫 DNS 服务商的 API,把域名指向的 IP 改成最新的。流程如下:
- VPS 上的 DDNS 程序每几分钟检测一次「目前对外 IP」
- 发现 IP 变了 → 呼叫 Cloudflare API 更新 DNS 记录
- 你永远用
vps.example.com连接,背后 IP 自动跟上
适用场景:SSH / RDP 远程连接、自建网站或 API、自用代理(仅限自用)、任何「需要从外面找到这台 VPS」的服务。若你用的是固定 IP 方案(IP 永远不变),就不需要 DDNS,本文可略过。动态与固定 IP 的差异详见 HiNet 家宽 PPPoE VPS vs 固定 IP VPS 完整解析。
二、Step 0:准备一个域名(已有可跳过)
DDNS 需要一个你自己的域名。还没有的话:
- 到任一注册商购买:Cloudflare Registrar、Namecheap、GoDaddy 等均可,
.com约 USD 10-12/年;预算有限可选.xyz等约 USD 2-5/年的后缀 - 域名本身没有任何限制,纯自用即可;不需要备案,也不需要跟 VPS 在同一家购买
三、Step 1:把域名接入 Cloudflare(免费方案)
- 注册 Cloudflare 账号(免费)
- Dashboard 点 Add a domain → 输入你的域名 → 选 Free 方案
- Cloudflare 会给你两组 nameserver(形如
xxx.ns.cloudflare.com) - 回到你的域名注册商后台,把域名的 NS(nameserver)改成 Cloudflare 给的这两组
- 等待生效(多数注册商几分钟~数小时,最长 24 小时),Cloudflare 会寄信通知「Active」
四、Step 2:建立 API Token(不要用 Global API Key)
- Cloudflare 右上角头像 → My Profile → API Tokens → Create Token
- 选用现成模板 Edit zone DNS
- Zone Resources 限定为你的那一个域名(Specific zone)
- 建立后立刻复制 Token——它只显示这一次
安全原则:永远用「只能改单一域名 DNS」的最小权限 Token,不要用 Global API Key(那把钥匙能动你整个账号)。Token 若外泄,到 API Tokens 页面 Roll / Revoke 即可作废。
五、Step 3:先建一笔 A 记录
到你的域名 → DNS → Add record:
- Type:A
- Name:
vps(即vps.example.com,名称随意) - IPv4 address:先随便填一个(例如目前的 IP),DDNS 之后会自动改
- Proxy status:选 DNS only(灰云)——这点很重要,见 FAQ Q2
- TTL:Auto 或 1 min
怎么查目前的公网 IP?在 VPS 里执行:curl ip.sb,回传的就是目前对外 IP。
家宽(PPPoE 动态 IP)机器若因为不知道 IP 而连不进 SSH,从会员中心的 VPS 管理页开启 Virtualizor(VZ)noVNC 主控台——noVNC 不需要知道 IP、等同直接坐在主机前面,登入后执行 curl ip.sb 即可取得目前公网 IP。
六、Step 4(推荐):Docker 跑 cloudflare-ddns 全自动更新
VPS 还没装 Docker 的话,一行搞定(Ubuntu / Debian):
curl -fsSL https://get.docker.com | sh
然后跑 favonia/cloudflare-ddns(轻量、活跃维护、支持最小权限 Token):
docker run -d \
--name cloudflare-ddns \
--restart unless-stopped \
--network host \
-e CLOUDFLARE_API_TOKEN=贴上你的Token \
-e DOMAINS=vps.example.com \
-e PROXIED=false \
-e IP6_PROVIDER=none \
favonia/cloudflare-ddns:1
习惯用 docker compose 的话,compose.yml:
services:
cloudflare-ddns:
image: favonia/cloudflare-ddns:1
container_name: cloudflare-ddns
restart: unless-stopped
network_mode: host
environment:
- CLOUDFLARE_API_TOKEN=贴上你的Token
- DOMAINS=vps.example.com
- PROXIED=false
- IP6_PROVIDER=none
参数说明:
DOMAINS:要更新的域名,多个用逗号分隔(如vps.example.com,nas.example.com)PROXIED=false:保持灰云(DNS only),SSH / RDP 才连得上IP6_PROVIDER=none:没有 IPv6 需求就关掉,避免误判- 默认每 5 分钟检测一次 IP;容器随 Docker 开机自启(
--restart unless-stopped)
七、Step 5:验证有没有生效
看容器日志,应看到成功把域名指到目前 IP:
docker logs cloudflare-ddns
实测换 IP:本平台 PPPoE 动态 IP VPS 内建一键换 IP——
curl 10.231.100.100/changeip/changeip.aspx
换完等几分钟,再查域名目前解析到哪:
dig +short vps.example.com
# 或 Windows:nslookup vps.example.com
输出变成新 IP 就是成功了。之后 SSH 直接 ssh [email protected],永远不用再查 IP。
八、替代方案:没有 Docker 的极简 crontab 脚本
不想跑 Docker 的话,用 Cloudflare API 直接更新也行。先到 Cloudflare 选择你的域名 → Overview(概览)页面,在 API 区块复制 Zone ID,再查你那笔 A 记录的 Record ID:
curl -s "https://api.cloudflare.com/client/v4/zones/你的ZoneID/dns_records?name=vps.example.com" \
-H "Authorization: Bearer 你的Token" | grep -o '"id":"[^"]*"' | head -1
存成 /root/ddns.sh:
#!/bin/sh
TOKEN="你的Token"
ZONE="你的ZoneID"
RECORD="你的RecordID"
NAME="vps.example.com"
IP=$(curl -s https://api.ipify.org)
curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$ZONE/dns_records/$RECORD" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
--data "{\"type\":\"A\",\"name\":\"$NAME\",\"content\":\"$IP\",\"ttl\":60,\"proxied\":false}"
加进 crontab 每 5 分钟跑一次:
chmod +x /root/ddns.sh
( crontab -l 2>/dev/null; echo "*/5 * * * * /root/ddns.sh >/dev/null 2>&1" ) | crontab -
功能等价,但 Docker 版有日志、重试与开机自启,长期使用更稳。
九、常见问题 FAQ
Q1:IP 变了之后,域名多久会跟上?
DDNS 容器默认每 5 分钟检测一次,加上 DNS TTL(建议 1 分钟)与本地缓存,一般 1-6 分钟内收敛。对 SSH / RDP 日常使用完全够用。
Q2:Proxy 状态可以开橘云吗?
看用途。SSH、RDP、自建非 HTTP 服务:必须灰云(DNS only),橘云只代理 HTTP/HTTPS 流量,开了会连不上。纯网站流量可以开橘云(还能隐藏真实 IP),此时 DDNS 参数改 PROXIED=true。
Q3:整套要花多少钱?
Cloudflare DNS 与 API 免费方案就够用;Docker 与 cloudflare-ddns 都是开源免费。唯一成本是域名年费(USD 2-12/年)。
Q4:固定 IP 方案需要 DDNS 吗?
不需要。固定 IP 不会变,直接用 IP 或建一笔静态 A 记录即可。DDNS 是动态 IP(PPPoE)专属需求。两者差异与选购建议见 PPPoE vs 固定 IP 完整解析。
Q5:一台 VPS 可以绑多个域名吗?多台 VPS 呢?
一台绑多域名:DOMAINS 用逗号分隔即可。多台 VPS:每台跑一个自己的 DDNS 容器、各自绑不同子域名(如 vps1.example.com、vps2.example.com),一个 Cloudflare 账号全部管理。
Q6:API Token 安全要注意什么?
三条原则:(1)用 Edit zone DNS 最小权限模板,只授权单一域名;(2)Token 不要写进公开的脚本仓库;(3)怀疑外泄立刻到 API Tokens 页 Roll / Revoke。就算 Token 被拿走,最多也只能改那个域名的 DNS,不会波及账号其他资源。
还没有动态 IP VPS?台湾 HiNet 家宽动态 IP VPS 月付 NT$495 起,PPPoE 真实住宅 IP、内建一键换 IP,搭配本文 DDNS 设定即可「IP 天天换、连接永远通」。选购前建议先读 HiNet VPS 家宽主机租用指南。