家裡的 IP 會變、沒有固定位址,想從外面連回自己的伺服器就麻煩了。DuckDNS 解決這件事:把一個固定子網域(例如 yourname.duckdns.org)指向你現在的 IP,IP 變了就更新,網域名稱不變。完全免費,架在 Amazon AWS 上,一個帳號最多五個子網域。

什麼是 DuckDNS?

DuckDNS 是免費的動態 DNS 託管服務。它讓你把一個固定的子網域(例如 yourdomain.duckdns.org)指向一個會變動的 IP 位址,對沒有固定 IP 的家庭網路或小型伺服器來說很實用。

DuckDNS 的主要特點

  • 完全免費:不收任何費用,靠捐款維持營運。
  • 支援 IPv4 和 IPv6:兩種協定都能用。
  • API 支援:提供簡單的 HTTP API,方便整合到自己的應用程式或腳本。
  • 多平台支援:官方提供 Windows、Linux、macOS、路由器、Raspberry Pi 等平台的腳本與說明。

如何使用 DuckDNS

步驟 1:註冊帳號

  1. 前往 DuckDNS 官網
  2. 使用 GitHub 或 Google 帳號登入(Twitter 登入目前已停用)

步驟 2:建立子網域

  1. 登入後,在頁面上方的文字框輸入想要的子網域名稱(例如 mywebsite
  2. 點擊「add domain」按鈕
  3. 建立成功後會出現在下方列表,目前指向的 IP 也會一併顯示

步驟 3:更新 IP 位址

有幾種方式可以保持 IP 同步:

  1. 手動更新:在 DuckDNS 網站上點擊「update ip」,適合測試用。

  2. Linux cron 腳本:官網 install 頁面有現成腳本,選平台後貼上即可。以 Linux + cron 為例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # 建立腳本檔案
    mkdir -p ~/duckdns
    cat > ~/duckdns/duck.sh << 'EOF'
    echo url="https://www.duckdns.org/update?domains=yourname&token=your-token&ip=" | curl -k -o ~/duckdns/duck.log -K -
    EOF
    chmod 700 ~/duckdns/duck.sh

    # 加進 cron,每 5 分鐘更新一次
    crontab -e
    # 加入這行:
    # */5 * * * * ~/duckdns/duck.sh >/dev/null 2>&1

    yourname 換成你的子網域、your-token 換成帳號頁面上的 token。

  3. 路由器整合:部分路由器韌體(例如 DD-WRT、OpenWrt)直接支援 DuckDNS,在 DDNS 設定頁填入網域與 token 即可。

  4. 用戶端軟體:有各作業系統的第三方用戶端可以選用。

步驟 4:測試

設定完成後用 ping 確認是否指向正確 IP:

1
ping yourname.duckdns.org

回應的 IP 和你目前的對外 IP 相符就表示設定成功。

應用場景

  • 遠端存取家庭網路:IP 變動也能穩定連回家中的 NAS 或其他裝置。
  • 架設個人網站或服務:讓外部訪客用固定網址找到你的服務。
  • 遊戲伺服器:需要固定位址讓朋友連線時很方便。
  • IoT 專案:物聯網裝置的遠端管理與連線。

安全性注意事項

DuckDNS 本身只做 DNS 解析,安全性要靠自己把關:

  1. 確保路由器和對外服務有適當的防火牆設定
  2. 帳號的 token 不要外洩,這個 token 可以直接更新你的網域
  3. 定期確認網域設定沒有被異動