加入 Telegram 官方群 @joysohinet — 公告、优惠、即时支持
DDNS 动态域名完整教学 2026:从无到有绑定 Cloudflare + Docker 自动更新
打印
  • 0

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(免费方案)

  1. 注册 Cloudflare 账号(免费)
  2. Dashboard 点 Add a domain → 输入你的域名 → 选 Free 方案
  3. Cloudflare 会给你两组 nameserver(形如 xxx.ns.cloudflare.com
  4. 回到你的域名注册商后台,把域名的 NS(nameserver)改成 Cloudflare 给的这两组
  5. 等待生效(多数注册商几分钟~数小时,最长 24 小时),Cloudflare 会寄信通知「Active」

四、Step 2:建立 API Token(不要用 Global API Key)

  1. Cloudflare 右上角头像 → My ProfileAPI TokensCreate Token
  2. 选用现成模板 Edit zone DNS
  3. Zone Resources 限定为你的那一个域名(Specific zone)
  4. 建立后立刻复制 Token——它只显示这一次

安全原则:永远用「只能改单一域名 DNS」的最小权限 Token,不要用 Global API Key(那把钥匙能动你整个账号)。Token 若外泄,到 API Tokens 页面 Roll / Revoke 即可作废。

五、Step 3:先建一笔 A 记录

到你的域名 → DNSAdd record

  • Type:A
  • Namevps(即 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.comvps2.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 家宽主机租用指南


此文章对您是否有帮助?

« 返回