加入 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 家寬主機租用指南


此文章对您是否有帮助?

« 返回