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