Cloudflare 付費網域購買、託管和實做 DDNS

Cloudflare 付費網域購買、託管和透過 API 實做 DDNS – 教學

前言

💡
用途:註冊和管理網域名稱,整合 Cloudflare 提供的安全性和加速服務,提升網站效能及保護網站免受攻擊。
實做:使用 Cloudflare API 實現 Cloudflare DDNS (動態域名系統),通過 API 來自動更新 DNS 記錄,使域名始終指向正確的動態 IP。
 

隨著雲端服務和網路應用的普及,選擇合適的網域管理平台變得越來越重要,Cloudflare 作為業界領先的網路基礎設施服務商,提供了全方位的網域管理解決方案,包括成本透明的網域註冊服務、強大的內容分發網路CDN)和完整的安全防護機制。

透過 Cloudflare 一站式管理平台,使用者不僅能以合理的價格購買和管理網域,更可享有免費的 SSL/TLS 加密DDoS 防護等進階功能。本教學將介紹 Cloudflare 付費網域的購買流程、託管設定,以及如何透過 API 實現 DDNS 功能,協助您建立一個安全且高效能的網路服務環境。

Cloudflare 官網

Cloudflare 網域優點

  1. 強大的效能與速度優化
    1. 全球 CDN 支援:Cloudflare 提供強大的內容分發網路(CDN),可以加快全球連線速度。
    2. 快速 DNS:Cloudflare 的 DNS 是業界最快之一,解析速度極快,有助於提高網站的回應速度。
  2. 高水平的安全性
    1. 內建 DDoS 防護:自動攔截大規模攻擊,保護網站免受惡意流量影響。
    2. 免費 SSL/TLS 加密:輕鬆啟用 HTTPS,提升網站安全性和 SEO 排名。
    3. 防火牆規則:提供靈活的防火牆設定,保護網站免受常見攻擊。
  3. 簡單的網域管理
    1. 一站式管理:Cloudflare 提供網域註冊、DNS 設定、SSL/TLS、效能優化等功能集中管理,簡化運營。
    2. 價格透明:註冊網域時無隱藏費用,續費價格也相對穩定。
    3. 免費的 WHOIS 隱私保護:隱藏個人資訊,防止垃圾郵件和隱私洩露。
  4. 適合開發者的功能
    1. API 支援:開發者可以通過 API 自動化管理網域和其他服務。
    2. Workers:提供無伺服器運算功能,可在邊緣網路上執行應用程式邏輯。
  5. 穩定的技術支援
    1. 免費計劃提供基礎支援,高級付費方案可獲得更快速、專業的客戶服務。

Cloudflare 網域缺點

  1. 網域選擇範圍有限
    1. TLD 限制:Cloudflare 提供的頂級網域(TLD)選擇有限,可能無法找到某些特定後綴。
  2. 進階功能需要付費
    1. 雖然基礎功能免費,但高級安全規則、防火牆功能、高階效能優化(如圖片優化、負載均衡)需要額外收費。
  3. 較適合具技術背景的用戶
    1. Cloudflare 的平台與功能介面偏向技術型用戶,初學者可能需要時間學習使用。
  4. 沒有提供郵件服務
    1. Cloudflare 不包含內建的電子郵件主機功能,需要自行設定第三方郵件服務(如 Google Workspace 或 Zoho Mail)。
  5. 依賴 Cloudflare 的基礎架構
    1. 如果所有服務都依賴於 Cloudflare,當機(雖然罕見)時可能會影響所有網站功能。

適合使用 Cloudflare 的情境

  1. 網站需要全球連線且需要高效能(如 CDN 和 DNS 快速回應)。
  2. 對網站安全性有高要求(DDoS 防護、SSL 加密)。
  3. 希望集中管理網域並簡化操作流程。
  4. 適合對技術有一定了解,或需要可擴展性的開發者。

Cloudflare 網域購買

  1. 進入 Cloudflare 官網,點選右上角「登入」
    Cloudflare 官網

    點選右上角「登入」

    可以使用 Google 帳號快速登入
    可以使用 Google 帳號快速登入

  2. 建議啟用「雙因素驗證」,點選左側「管理帳號」,在右邊設定雙因素驗證,點選「您的帳戶」連結
    建議啟用「雙因素驗證」,點選左側「管理帳號」,在右邊設定雙因素驗證,點選「您的帳戶」連結

    「雙因素驗證」已啟用畫面
    「雙因素驗證」已啟用畫面

  3. 點選左側「網域註冊」,再點選下方「註冊網域」,在右邊「搜尋網域名稱」輸入您想要註冊的網域名稱,可以輸入 example.com 或是 example,然後點選右方的「搜尋」
    example.com 會檢查此網域是否被註冊過
    example 會提供此名稱可以註冊的相關網域後綴
    點選左側「網域註冊」,再點選下方「註冊網域」

  4. 搜尋後會列出可以購買和建議的網域名稱價格(美金/年)、續訂價格(美金/年),若確認無誤就可以點選右方的「購買」
    搜尋後會列出可以購買和建議的網域名稱價格(美金/年)、續訂價格(美金/年),若確認無誤就可以點選右方的「購買」

  5. Cloudflare 的優點是購買網域的價格每年固定,所以可以先選擇一年,之後再自動續約
    Cloudflare 的優點是購買網域的價格每年固定,所以可以先選擇一年,之後再自動續約

  6. 填寫註冊者和付款資訊 (必須使用英文),姓名、電話、地址、郵遞區號、信用卡或PayPal,可視情況「勾選」啟用自動續約,帳單地址同上,帳戶類型選擇「個人」(Personal),輸入完成後點選下方的「驗證地址」
    中文地址英譯、郵遞區號查詢

    填寫註冊者和付款資訊 (必須使用英文)

  7. 出現「全部完成」的訊息,若您有「勾選」啟用自動續約,Cloudflare 將在註冊到期前 60 天自動續訂您的註冊
    Cloudflare 結帳時會有 5% 的稅,若結帳價格總計是 10.44 美元/年,實際價格需乘上1.05,也就是 10.962 美元/年,約 357 新台幣/年
    出現「全部完成」的訊息

  8. 點選左側的「網域註冊」→「管理網域」,在右邊可以「開啟」或「關閉」自動續訂的功能
    點選左側的「網域註冊」→「管理網域」,在右邊可以「開啟」或「關閉」自動續訂的功能

託管到 Cloudflare

點選左側的「網站」,再點選右側的域名,就可以開始使用 Cloudflare 的免費服務
託管到 Cloudflare

Cloudflare 設定檢查

  1. 點選左側的「網站」,再點選右側的域名
    點選左側的「網站」,再點選右側的域名

  2. 上方域名的狀態顯示「使用中」,表示已經成功將域名託管到 Cloudflare
    上方域名的狀態顯示「使用中」,表示已經成功將域名託管到 Cloudflare

  3. 將右邊的功能下拉到底下,點選「從 Cloudflare 中移除」可以刪除已託管的域名
    將右邊的功能下拉到底下,點選「從 Cloudflare 中移除」可以刪除已託管的域名

  4. 點選「移除」會刪除已託管的域名
    點選「移除」會刪除已託管的域名

Cloudflare DNS 是否要開啟 Proxy 呢?

「Cloudflare DNS 設定」是否需要開啟 Proxy(雲端代理)取決於您的需求:

開啟 Proxy

  • 如果您希望 Cloudflare 給您提供 CDN、網站加速、SSL 和 DDoS 防護,則需要開啟 Proxy。
  • 此時,Cloudflare 會代理您的網站,並管理 SSL 和安全性。
  • Nginx 和 Cloudflare 之間的 HTTP/HTTPS 通訊會經過 Cloudflare 的 CDN 中轉。
  • 如果您的網站使用了 Cloudflare 的憑證和 SSL 設定,開啟 Proxy 是必要的。

關閉 Proxy

  1. 如果不開啟 Proxy,您將無法使用 Cloudflare 的 SSL、CDN 加速、DDoS 防護等服務。
  2. DNS 設定仍然會指向 Cloudflare,但 HTTP/HTTPS 將不會被 Cloudflare 管理,會直接對接 Nginx。

建議

  1. 如果您使用了 Cloudflare 的「原點憑證」(Origin Certificate),並希望透過 Cloudflare 提供的 SSL 和安全服務,那麼 Proxy 應該開啟。
  2. 如果您希望簡單的 DNS 設定(不需要 Cloudflare CDN、SSL 加速等),可以關閉 Proxy。

Cloudflare DNS 設定

  1. 點選左側的「網站」,再點選右側的域名
    點選左側的「網站」,再點選右側的域名

  2. 點選左側的「DNS」
    點選左側的「DNS」

  3. 點選右側的「新增記錄」
    點選右側的「新增記錄」

  4. 使用瀏覽器開啟下列網址,查詢自己的「外部IP位址」
    我的IP位址查詢

    外部IP位址

  5. 類型:A﹑名稱:@﹑IPv4 位址:外部IP﹑Proxy 狀態:向右啟用,接著點選「儲存」
    類型:A﹑名稱:@﹑IPv4 位址:外部IP﹑Proxy 狀態:向右啟用,接著點選「儲存」

  6. 出現一筆自己域名的 A記錄:bugtest.us.kg
    出現一筆自己域名的 A記錄:bugtest.us.kg

  7. 再次點選右側的「新增記錄」
    再次點選右側的「新增記錄」

  8. 類型:A﹑名稱:www﹑IPv4 位址:外部IP﹑Proxy 狀態:向右啟用,接著點選「儲存」
    類型:A﹑名稱:www﹑IPv4 位址:外部IP﹑Proxy 狀態:向右啟用,接著點選「儲存」

  9. 出現一筆 A記錄:www

  10. 測試網頁 index.htm
    <html><body><h1>It works!</h1>
    <p>This is the default web page for this server.</p>
    <p>The web server software is running but no content has been added, yet.</p>
    </body></html>
    測試網頁 index.htm

  11. 測試您的伺服器,在瀏覽器輸入 http://www.bugtest.us.kg
    測試您的伺服器

  12. 測試您的伺服器,在瀏覽器輸入 https://www.bugtest.us.kg
    Cloudflare 預設已經啟用 SSL 憑證,可以透過 https 連線伺服器
    測試您的伺服器

  13. 點選左側的「SSL/TLS」,可以看到預設的加密模式「彈性」
    點選左側的「SSL/TLS」,可以看到預設的加密模式「彈性」

  14. 點選右方的「編輯」可以編輯 DNS 記錄
    點選右方的「編輯」可以編輯 DNS 記錄

  15. 修改 DNS 內容後,再點選右下角的「儲存」
    修改 DNS 內容後,再點選右下角的「儲存」

  16. 「勾選」一筆或多筆記錄後點選「刪除記錄」可以將 DNS 記錄刪除
    「勾選」一筆或多筆記錄後點選「刪除記錄」可以將 DNS 記錄刪除

  17. 輸入「刪除」後點選下方的「刪除」即可將 DNS 記錄刪除
    輸入「刪除」後點選下方的「刪除」即可將 DNS 記錄刪除

Cloudflare DDNS

Cloudflare DDNS – 動態 IP 自動對應網址

Cloudflare DDNS 是一種技術,讓使用者能夠將變動的動態 IP 地址與域名保持一致,無需手動更改 DNS 記錄,從而確保服務的持續可用性,特別適合那些無法獲得固定 IP 的場景,如家庭網路、監控設備或一些小型企業。

使用 Cloudflare API 實現 Cloudflare DDNS

在許多情境下,動態 IP 地址可能會影響設備或網站的連線穩定性。為了解決這個問題,我們可以利用 Cloudflare DDNS (動態域名系統),通過 Cloudflare API 來自動更新 DNS 記錄,使域名始終指向正確的動態 IP。

建置步驟

  1. 獲取 API Token
    點選右上角的人員圖示,再點選「我的設定檔」(My Profile)
    點選右上角的人員圖示,再點選「我的設定檔」(My Profile)

    點選左邊「API 權杖」(API Token),再點選右邊的「建立 Token」(Create Token)
    點選左邊「API 權杖」(API Token),再點選右邊的「建立 Token」(Create Token)

    點選「編輯區域 DNS」(Edit zone DNS) 右方的「使用範本」(Use template)
    點選「編輯區域 DNS」(Edit zone DNS) 右方的「使用範本」(Use template)

    設定 Token 最小權限範圍
    權限(Permissions):區域(Zone) / DNS / 編輯(Edit)
    區域資源(Zone Resources):包含(Include) / 特定區域(Specific zone) / 您的域名(Domain)
    設定完成後點選「繼續至摘要」(Continue to summary)
    設定 Token 最小權限範圍

    點選「建立 Token」(Create Token)
    點選「建立 Token」(Create Token)

    獲取 API Token
    獲取 API Token

    Cloudflare API 呼叫測試
        • Bearer 後方的字串 → 您的 API Token

    如果呼叫成功會收到 JSON Success response
    API Token:L01u13czcFZ8Wd2_3cWmxxex0qZXTKPEymW_6w8T

    curl -X GET "https://api.cloudflare.com/client/v4/user/tokens/verify" \
         -H "Authorization: Bearer L01u13czcFZ8Wd2_3cWmxxex0qZXTKPEymW_6w8T" \
         -H "Content-Type:application/json" | python -m json.tool
    

    Cloudflare API 呼叫測試

  2. 獲取 ZoneID
    1. Bearer 後方的字串 → 您的 API Token

    如果呼叫成功會收到 ZoneID,找到 name 是您域名 bugtest.us.kg 的 id
    ZoneID:d95801613008c8b6d131a3ff72d7e4be

    curl -X GET "https://api.cloudflare.com/client/v4/zones" \
         -H "Authorization: Bearer L01u13czcFZ8Wd2_3cWmxxex0qZXTKPEymW_6w8T" \
         -H "Content-Type:application/json" | python -m json.tool
    

    獲取 ZoneID

  3. 獲取 RecordID
    1. zones/ 後方的字串 → 您的 ZoneID
    2. Bearer 後方的字串 → 您的 API Token

    如果呼叫成功會收到 RecordID,找到 name 是您域名 bugtest.us.kg 的 id
    RecordID:e3ff3df73968e2c423577e0a21f2eb97
    獲取 RecordID

    若您要更新 A記錄是 www 的 DNS,找到 name 是 www.bugtest.us.kg 的 id
    RecordID:9398c983e25cdaa1c47973e851b12307
    獲取 RecordID-2

    curl -X GET "https://api.cloudflare.com/client/v4/zones/d95801613008c8b6d131a3ff72d7e4be/dns_records" \
         -H "Authorization: Bearer L01u13czcFZ8Wd2_3cWmxxex0qZXTKPEymW_6w8T" \
         -H "Content-Type:application/json" | python -m json.tool
    

    獲取 RecordID-3

  4. 使用 Cloudflare API 更新 DNS IP 位址
    1. zones/ 後方的字串 → 您的 ZoneID:d95801613008c8b6d131a3ff72d7e4be
    2. dns_records/ 後方的字串 → 您的 RecordID:e3ff3df73968e2c423577e0a21f2eb97
    3. Bearer 後方的字串 → 您的 API Token:L01u13czcFZ8Wd2_3cWmxxex0qZXTKPEymW_6w8T
    4. name 後方的字串 → 您的域名:bugtest.us.kg
    5. content 後方的字串 → 您的外部 IP 位址:114.25.133.1

      透過下面的命令更新 IP 資訊

    curl -X PUT "https://api.cloudflare.com/client/v4/zones/d95801613008c8b6d131a3ff72d7e4be/dns_records/e3ff3df73968e2c423577e0a21f2eb97" \
         -H "Authorization: Bearer L01u13czcFZ8Wd2_3cWmxxex0qZXTKPEymW_6w8T" \
         -H "Content-Type: application/json" \
         --data '{"type":"A","name":"bugtest.us.kg","content":"114.25.133.1","ttl":120,"proxied":false}' \
         | python -m json.tool
    

    使用 Cloudflare API 更新 DNS IP 位址

    1. zones/ 後方的字串 → 您的 ZoneID:d95801613008c8b6d131a3ff72d7e4be
    2. dns_records/ 後方的字串 → 您的 RecordID:9398c983e25cdaa1c47973e851b12307
    3. Bearer 後方的字串 → 您的 API Token:L01u13czcFZ8Wd2_3cWmxxex0qZXTKPEymW_6w8T
    4. name 後方的字串 → 您的域名:www.bugtest.us.kg
    5. content 後方的字串 → 您的外部 IP 位址:114.25.139.242
     

    透過下面的命令更新 IP 資訊

    curl -X PUT "https://api.cloudflare.com/client/v4/zones/d95801613008c8b6d131a3ff72d7e4be/dns_records/9398c983e25cdaa1c47973e851b12307" \
         -H "Authorization: Bearer L01u13czcFZ8Wd2_3cWmxxex0qZXTKPEymW_6w8T" \
         -H "Content-Type: application/json" \
         --data '{"type":"A","name":"www.bugtest.us.kg","content":"114.25.139.242","ttl":120,"proxied":false}' \
         | python -m json.tool
    

    透過下面的命令更新 IP 資訊

自動更新 IP 腳本

使用 Cloudflare API 自動更新 DNS IP 的腳本

透過 Shell Script 利用 Crontab 排程執行,就可以自動更新主機的動態 IP,實現自動化的 Cloudflare DDNS 功能。

  1. 自動更新 IP 腳本 (bugtest.us.kg)
     

     cf-ddns-root.sh 

    #!/bin/bash
    
    # 設定變數
    CF_TOKEN="L01u13czcFZ8Wd2_3cWmxxex0qZXTKPEymW_6w8T"  # Cloudflare API Token
    CF_ZONE_ID="d95801613008c8b6d131a3ff72d7e4be"    # Cloudflare ZoneID
    CF_RECORD_ID="e3ff3df73968e2c423577e0a21f2eb97"  # Cloudflare RecordID
    DDNS_NAME="bugtest.us.kg"                   # 要更新的域名
    
    # 獲取目前「外部IP」和「DNS記錄IP」
    InternetIP=$(curl -s http://ipv4.icanhazip.com | tr -d '\n')
    DNS_RecordIP=$(host "$DDNS_NAME" | grep "has address" | awk '{print $NF}')
    
    # 如果兩個IP不同,就更新「DNS記錄」,"ttl":1 表示自動(Auto)
    if [ "$InternetIP" != "$DNS_RecordIP" ]; then
        echo "Updating IP from $DNS_RecordIP to $InternetIP"
        curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$CF_ZONE_ID/dns_records/$CF_RECORD_ID" \
            -H "Authorization: Bearer $CF_TOKEN" \
            -H "Content-Type: application/json" \
            --data '{"type":"A","name":"'$DDNS_NAME'","content":"'$InternetIP'","ttl":1,"proxied":true}' \
            | grep -q '"success":true' && echo "Update successful" || echo "Update failed"
    else
        echo "No update needed. Current IP: $InternetIP"
    fi
     

    變更檔案權限成可執行 (cf-ddns-root.sh)

    chmod +x cf-ddns-root.shl
    

    變更檔案權限成可執行 (cf-ddns-root.sh)

  2. 自動更新 IP 腳本 (www.bugtest.us.kg)
     

     cf-ddns-www.sh 

    #!/bin/bash
    
    # 設定變數
    CF_TOKEN="L01u13czcFZ8Wd2_3cWmxxex0qZXTKPEymW_6w8T"  # Cloudflare API Token
    CF_ZONE_ID="d95801613008c8b6d131a3ff72d7e4be"    # Cloudflare ZoneID
    CF_RECORD_ID="9398c983e25cdaa1c47973e851b12307"  # Cloudflare RecordID
    DDNS_NAME="www.bugtest.us.kg"                    # 要更新的域名
    
    # 獲取目前「外部IP」和「DNS記錄IP」
    InternetIP=$(curl -s http://ipv4.icanhazip.com | tr -d '\n')
    DNS_RecordIP=$(host "$DDNS_NAME" | grep "has address" | awk '{print $NF}')
    
    # 如果兩個IP不同,就更新「DNS記錄」,"ttl":1 表示自動(Auto)
    if [ "$InternetIP" != "$DNS_RecordIP" ]; then
        echo "Updating IP from $DNS_RecordIP to $InternetIP"
        curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$CF_ZONE_ID/dns_records/$CF_RECORD_ID" \
            -H "Authorization: Bearer $CF_TOKEN" \
            -H "Content-Type: application/json" \
            --data '{"type":"A","name":"'$DDNS_NAME'","content":"'$InternetIP'","ttl":1,"proxied":true}' \
            | grep -q '"success":true' && echo "Update successful" || echo "Update failed"
    else
        echo "No update needed. Current IP: $InternetIP"
    fi
    
     

    變更檔案權限成可執行 (cf-ddns-www.sh)

    chmod +x cf-ddns-www.sh
    

    變更檔案權限成可執行 (cf-ddns-www.sh)

  3. 排程 每30分鐘 執行腳本
     

     sudo vim /etc/crontab 

    */30 * * * * root /root/ddns/cf-ddns-root.sh >/dev/null 2>&1 &
    */30 * * * * root /root/ddns/cf-ddns-www.sh >/dev/null 2>&1 &
    

網站主機 DNS 設定

💡 範例 → 樹莓派 5B:8GB 型號、作業系統:Ubuntu Server 24.04.1 LTS 64Bit
 
  1. 在自己的網站主機上修改設定檔
    將 DNS 指向 Cloudflare 的 DNS 伺服器

    sudo vim /etc/netplan/50-cloud-init.yaml
    
  2. 增加 DNS 設定
    找到 nameservers,將 addresses 設定成 Cloudflare 的 DNS 伺服器

    1.  1.1.1.1  是 Cloudflare 的 DNS 主要伺服器
    2. 1.0.0.1 是 Cloudflare 的 DNS 備用伺服器

    network:
      ethernets:
        eth0:
          dhcp4: true
          dhcp6: false
          nameservers:
            addresses:
              - 1.1.1.1
              - 1.0.0.1
        version: 2
    

    增加 DNS 設定

  3. 套用網路設定
    sudo netplan apply
    
  4. DNS 伺服器修改設定
    # 備份舊設定檔
    sudo cp /etc/resolv.conf /etc/resolv.conf.bak
    
    # 使用軟連結替換,將 /etc/resolv.conf 指向 Systemd-resolved 完整的DNS設定檔
    sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
    
    # 驗證設定
    cat /etc/resolv.conf
    
    # 重啟網路服務
    sudo systemctl restart systemd-resolved
    
     

    修改前後對照

結語

透過本文的完整教學,可以從 Cloudflare 網域購買DNS 託管 DDNS 功能實作,建立一個專業的網域管理環境。Cloudflare 提供的服務不僅在價格上具有優勢,其強大的 CDN 網路DNS 解析速度和多層次的安全防護,為網站提供了穩定且安全的基礎架構。

特別是透過 API 實現的 DDNS 功能,讓使用動態 IP 的用戶也能建立可靠的網路服務。雖然在某些進階功能上需要付費升級,但以基礎建設和安全防護而言,Cloudflare 已經提供了相當完整的免費功能,是個人用戶和小型企業架設網路服務的理想選擇。

閱讀完成

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

返回頂端