假設您從家用網絡發布了一個網站,並創建了一個將指向您路由器的公共IP地址的DNS記錄。當您的公共IP地址更改時,您如何保持DNS記錄的更新?也許您應該考慮設置Cloudflare動態DNS。
互聯網服務提供商(ISP)通常為其用戶分配動態IP地址,這些地址可能隨時更改。因此,您的DNS記錄仍然指向不再屬於您的IP地址,您的網站變得無法訪問。
繼續閱讀,因為本教程將幫助您使用Cloudflare的應用程序編程接口(API)和PowerShell來保持DNS記錄的更新。讓我們開始吧!
先決條件
如果您計劃跟隨本教程進行實作,以下是您需要的要求。
- A computer with PowerShell 7.1 where you’ll run the Cloudflare dynamic DNS update script. This tutorial will use a Windows 10 computer.
- A script editor of your choice. This tutorial will use Visual Studio Code v1.59.1 (recommended).
- A domain that you already own. The example domain in this tutorial is lazyexchangeadmin.cyou.
免費頂級域名(TLD),如.ml、.ga、.tk、.cf和.gq,不適用於Cloudflare動態DNS自動化,並且無法在本教程中使用。
- A Cloudflare account. A free account is enough to use in this tutorial.
- 您一定已經將您的域名添加到了Cloudflare中。
- 您一定已經在Cloudflare中的您的域名下添加了一個DNS記錄。本教程中的DNS A記錄將是demo.lazyexchangeadmin.cyou,初始IP地址為0.0.0.0。

什麼是Cloudflare動態DNS?
DNS記錄本質上是靜態的,因此無法與動態IP地址很好地配合。現在,為了解決這個問題,您需要設置動態DNS。幸運的是,Cloudflare提供了一個API,可以讓您以程序化的方式管理DNS記錄。
要設置Cloudflare動態DNS,您需要在您的網絡內運行一個進程,執行兩個主要操作:獲取您網絡的當前公共IP地址,並自動更新相應的DNS記錄。
下面的圖顯示了 Cloudflare 動態 DNS 更新流程的高級概要。

有許多可安裝的動態 DNS 客戶端,主要用於 Linux 系統,例如 Ubuntu 伺服器或 Raspberry PI。也存在第三方動態 DNS 服務,可能是付費的或免費的。但在本教程中,您將部署一個在 PowerShell 7.1 上運行的 DNS 更新腳本。
獲取 Cloudflare API 標記
當以程式方式更新 Cloudflare 動態 DNS 記錄時,您的腳本必須對 Cloudflare API 進行身份驗證。只有這樣,Cloudflare 才允許您對帳戶中的 DNS 記錄進行更改。
Cloudflare 允許您創建具有足夠權限的 API 標記。然後,您可以使用 Cloudflare 帳戶的用戶名和生成的 API 標記來對 Cloudflare API 进行身份验证。
要创建 Cloudflare API 標記,請按照以下步驟進行。
1. 打開瀏覽器,訪問 https://dash.cloudflare.com/login/,並登錄到您的 Cloudflare 帳戶。
2. 在 Cloudflare 控制面板中登錄後,點擊右上角的個人資料按鈕,然後點擊 我的個人資料。

3. 接下來,點擊 API 標記 鏈接標籤。在 API 標記 部分,點擊 創建標記 按鈕。以下示例假設您尚未創建任何 API 標記。

4. 在 API 令牌模板 列表中,點擊 編輯區域 DNS 模板以使用它。此模板允許您創建一個具有編輯權限的 API 令牌,以編輯您帳戶中的所有或選定的 DNS 區域。

5. 在 創建令牌 頁面的 區域資源 部分下,點擊最右邊的下拉框,選擇要包含在此 API 令牌訪問權限中的 DNS 區域。選擇 DNS 區域後,點擊 繼續到摘要。
選擇性地,要限制 API 令牌的有效期,請填寫 開始日期 和 結束日期 在 TTL 部分下。如果留空,API 令牌將沒有到期日期。

6. 檢查摘要,確保 API 具有對先前選定的 DNS 區域的 DNS:Edit 權限。最後,點擊 創建令牌 以創建 API 令牌。

7. 創建 API 令牌後,複製令牌值並確保安全存儲。請像處理密碼一樣處理 API 令牌。

8. 返回到 API 令牌 選項卡,確認您創建的 API 令牌是否存在。

設置 Cloudflare 動態 DNS 更新腳本
您現在擁有 Cloudflare 帳戶和具有編輯 DNS 區域權限的 Cloudflare API 令牌。接下來呢?您需要使用 API 令牌並將其與一個腳本集成起來,該腳本將以程序方式更新 Cloudflare 動態 DNS 記錄。
此教程为您提供了一个用于在Cloudflare中更新DNS记录的可工作的PowerShell脚本。
保存脚本
按照以下步骤将Cloudflare动态DNS PowerShell脚本保存到客户端计算机上。
1. 决定将脚本存储在哪个文件夹中,并在该文件夹不存在时创建该文件夹。在此示例中,脚本位置位于C:\CloudflareDDNS。
2. 打开您的代码编辑器,例如VSCode,并创建一个名为Update-CloudflareDDNS.ps1
的新PowerShell脚本文件。将脚本保存在C:\CloudflareDDNS文件夹中。
3. 复制下面的脚本,粘贴到您的代码编辑器中,并保存文件。请参考内联注释以了解脚本的功能。
執行腳本
現在您已經保存了Cloudflare動態DNS更新腳本,接下來該做什麼呢?在部署腳本之前,測試其功能是否正常是必不可少的。執行腳本需要四個詳細信息才能成功,它們是:
電子郵件
– 這是您Cloudflare帳戶的電子郵件地址。令牌
– 您之前從Cloudflare帳戶中創建的API令牌。域名
– 包含您要更新的DNS記錄的DNS域名(例如,lazyexchangeadmin.cyou)。記錄
– 您要更新的DNS記錄(例如,demo.lazyexchangeadmin.cyou)。
要執行腳本,請按照以下步驟進行。
1. 首先,打開PowerShell會話。或者,如果您使用VSCode,請改用VSCode PowerShell終端。
2. 接下來,執行DNS記錄查找以確認當前DNS記錄的IP地址。為此,運行Resolve-DnsName
cmdlet,如下所示。請確保使用-Name
參數提供完全限定的域名(FQDN)。
該命令應返回您查找的DNS記錄,包括其IP地址。

3. 現在,執行以下命令調用 Update-CloudflareDDNS.ps1
腳本來更新 Cloudflare 中的 DNS 記錄。請確保更改 Email
、Token
、Domain
和 Record
。以下命令假設您的腳本位於 C:\CloudflareDDNS\Update-CloudflareDDNS.ps1。
然後,腳本執行以下操作,如下圖所示。
- 驗證 API 令牌。
- 查找包含要更新的 DNS 記錄的域。
- 查找要更新的 DNS 記錄。
- 將 DNS 記錄的 IP 地址與實際的外部或公共 IP 地址進行比較。
- 在 Cloudflare 中更新 DNS 記錄的 IP 地址。
- 顯示動態 DNS 更新結果。

4. 返回到您的 Cloudflare 控制台,並驗證 DNS 記錄是否反映了新的 IP 地址。如下圖所示,在運行更新腳本後,IP 地址已更改為外部 IP 地址值。

5. 最後,像在步驟 2 中所做的那樣,執行另一個 DNS 記錄查找,以確認新的 IP 地址是否已公開傳播。
DNS 記錄傳播可能需要幾分鐘、幾小時,甚至幾天。在此示例中,Cloudflare 傳播僅花費不到一分鐘。

安排 Cloudflare 動態 DNS 更新任務
這時,您已經有一個可以更新 Cloudflare 動態 DNS 記錄的工作腳本。但是,手動運行腳本並不是目標。您必須確保動態 DNS 更新以所需的頻率自動運行。
根據您使用的操作系統,安排腳本運行的方式會有所不同,比如在 Linux 中使用 cron 作業。本教程將創建一個 Windows 定期任務,每五分鐘運行一次 Cloudflare 動態 DNS 更新腳本。
定義定期任務操作
您的定期任務必須有一個操作,您可以通過運行 New-ScheduledTaskAction
cmdlet 來創建它。在此示例中,操作是使用 PowerShell 可執行文件 Update-CloudflareDDNS.ps1 運行腳本。
為此,以管理員身份打開新的 PowerShell 窗口。然後,複製並在 PowerShell 中運行下面的代碼。請務必更改 $scriptPath
、$Email,
$Token
、$Domain
和 $Record
變數。
創建預定任務觸發器
在定義任務的操作後,您必須通過運行 New-ScheduledTaskTrigger
cmdlet 來為任務創建觸發器或計劃。複製下面的代碼並在 PowerShell 中運行它,以創建一個在十年內每五分鐘運行一次的新任務觸發器。
在系統中註冊新的預定任務
最後,您準備在計算機上註冊新的定期任務。為此,您需要運行 Register-ScheduledTask
命令,與下面的代碼相同。複製下面的代碼並在 PowerShell 中運行它以註冊定期任務。
生成的定期任務將在 本地 SYSTEM 帳戶 下運行。如有需要,請隨意 指定不同的使用者帳戶 來運行定期任務。
如下所示,命令創建了定期任務,狀態為就緒。從這一點開始,腳本將以五分鐘的間隔運行。

結論
保持 DNS 記錄與動態 IP 地址變更的更新並不一定是一個挑戰。您也不需要為動態 DNS 服務付費!通過在 Cloudflare 中管理您的 DNS 區域,您可以利用其 API,允許您以程序方式更新您的 DNS 記錄。
您在本教程中學習了如何使用 API 調用、PowerShell 7 和定期任務來更新 Cloudflare 動態 DNS 記錄的組合。所有這些都允許您設置您的 Cloudflare 動態 DNS 更新機制一次並保持定期更新而無需監督。
您會考慮使用 Cloudflare 管理您的 DNS 區域以獲取其 API 的好處嗎?還是您知道更方便和易於使用的方式?
Source:
https://adamtheautomator.com/cloudflare-dynamic-dns/