假设您从家庭网络发布了一个网站,并创建了一个DNS记录,该记录指向您路由器的公共IP地址。当您的公共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动态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模板以使用它。此模板允许您创建一个具有对帐户中所有或选定的 DNS 区域进行编辑权限的 API 令牌。

5. 在创建令牌页面的区域资源部分下,单击最右边的下拉框,并选择要包含在此 API 令牌访问权限中的 DNS 区域。选择 DNS 区域后,单击继续到摘要。
可选地,要限制 API 令牌的有效期,请在TTL部分下填写开始日期和结束日期。如果留空,API 令牌将没有过期日期。

6. 查看摘要,并确保 API 具有对先前选择的 DNS 区域的DNS:编辑权限。最后,单击创建令牌以创建 API 令牌。

7. 创建 API 令牌后,复制令牌值,并确保安全存储。将 API 令牌视为密码对待。

8. 返回到API 令牌选项卡,并确认您创建的 API 令牌的存在。

设置 Cloudflare 动态 DNS 更新脚本
您现在拥有 Cloudflare 帐户和 Cloudflare API 令牌,具有编辑 DNS 区域的权限。接下来呢?您需要将 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,如下所示。确保提供完全限定域名(FQDN)作为-Name
参数。
该命令应返回你查找的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可执行文件pwsh.exe
运行Update-CloudflareDDNS.ps1脚本。
要这样做,请以管理员身份打开一个新的PowerShell窗口。接下来,复制并运行下面的代码在PowerShell中。确保更改$scriptPath
、$Email,
$Token
、$Domain
和$Record
变量。
创建系统预定任务触发器
在定义任务将执行的操作后,您必须通过运行New-ScheduledTaskTrigger
cmdlet 来创建任务的触发器或计划。复制下面的代码并在 PowerShell 中运行它,以创建一个在十年内每五分钟运行一次的新任务触发器。
在系统中注册新的预定任务
最后,您准备好在计算机上注册新的计划任务了。在这样做时,您需要运行 Register-ScheduledTask
cmdlet,与下面的代码相同。复制下面的代码并在 PowerShell 中运行以注册计划任务。
生成的计划任务将在 本地系统帐户 下运行。随时 根据需要分配不同的用户帐户 来运行计划任务。
如您所见,下面的命令创建了计划任务,并且状态为准备就绪。从此时起,脚本将以五分钟的间隔运行。

结论
保持动态IP地址更改的DNS记录并不一定是一项挑战。您也不必为动态DNS服务付费!通过在Cloudflare中管理您的DNS区域,您可以利用他们的API,从而可以以编程方式更新您的DNS记录。
在本教程中,您学会了如何使用API调用、PowerShell 7和定期任务的组合来更新Cloudflare动态DNS记录。所有这些都允许您一次配置Cloudflare动态DNS更新机制,并在无人看管的情况下定期进行更新。
您是否考虑使用Cloudflare来管理您的DNS区域,以享受其API的好处?或者您知道其他更方便、更易访问的方式吗?
Source:
https://adamtheautomator.com/cloudflare-dynamic-dns/