
dnscontrol v5.0.0-rc9
DNS的基础设施即代码!
DNSControl
DNSControl 是 DNS 的基础设施即代码(Infrastructure as Code)工具。 它包含一套功能完备的配置语言(兼容 JavaScript), 以及可与 DNS 提供商 API(如 AWS Route 53、 Cloudflare 和 Gandi)通信的“插件”。它可以将相同的 DNS 记录发送到多个提供商。 它可以在任何 Go 能运行的地方运行(Linux、macOS、Windows)。提供商模型 是可扩展的,因此可以添加更多提供商。
示例
dnsconfig.js:
// define our registrar and providers
var REG_NAMECOM = NewRegistrar("ndc_main");
var DSP_ROUTE53 = NewDnsProvider("r53_main");
D("example.com", REG_NAMECOM, DnsProvider(DSP_ROUTE53),
A("@", "1.2.3.4"),
CNAME("www","@"),
MX("@",5,"mail.myserver.com."),
A("test", "5.6.7.8")
)
运行 dnscontrol preview 会与提供商(此处为作为注册商的 name.com 和作为 DNS 主机的 route 53)通信,并确定需要进行哪些更改。
运行 dnscontrol push 会通过提供商进行这些更改,我的 DNS 记录将被正确更新。
运行 DNSControl 最简单的方式是使用 Docker 容器:
docker run --rm -it -v "$(pwd):/dns" ghcr.io/dnscontrol/dnscontrol preview
快速开始
最快的入门方式是 dnscontrol init。交互式向导会询问你的 DNS 提供商和注册商,验证你的凭据,并写入可用的 creds.json 和 dnsconfig.js,其中包含你区域中已存在的记录。
有关完整演练,请参阅文档站点上的 快速开始 页面。
想要对你的 DNS 数据进行完整的“GitOps”控制?克隆 dns-config 起始仓库即可开始!
支持的提供商
DNSControl 支持 68 个 DNS 提供商和注册商:
¹同时支持注册商功能 ²仅支持注册商
优势
- 比编辑 BIND 区域文件更不易出错。
- 比在 Web 门户上点击按钮更具可复现性。
- 轻松在 DNS 提供商之间切换: DNSControl 语言是 厂商无关的。如果你用它来维护你的 DNS 区域记录, 就可以轻松地在 DNS 提供商之间切换。事实上,DNSControl 会将你的 DNS 记录上传到多个提供商,这意味着你 可以在测试一个提供商的同时切换到另一个。我们在三年内 切换了 3 次提供商,从未丢失过一条 DNS 记录。
- 将 CI/CD 原则应用于 DNS! StackOverflow 将他们的 DNSControl 配置保存在 Git 中,并使用我们的 CI 系统来推出 更改。将 DNS 信息保存在 VCS 中意味着我们拥有完整的 历史记录。使用 CI 使我们能够包含单元测试和 系统测试。还记得你忘记在 MX 记录末尾加上“.”的时候吗? 自从我们加入了一个测试来确保 Tom 不会犯那个错误……再次犯下之后, 我们就再也没有遇到过这个问题。
- 采用(GitOps)基于 PR 的更新。 允许开发者以 PR 的形式发送更新, 你可以在批准之前进行审查。
- 变量节省时间! 将 IP 地址分配给一个常量,并在整个文件中 使用该变量名。需要全局更改 IP 地址? 只需更改变量并“重新编译”即可。
- 宏! 定义一次你的 SPF 记录、MX 记录或其他重复数据, 即可在所有域中重复使用。
- 从单一事实来源控制 Cloudflare。 直接从你的 DNSControl 文件中启用/禁用 Cloudflare 代理(“橙色云”按钮)。
- 通过转换和其他功能保持相似域同步。 如果 一个域应该是另一个域的过滤版本,这很容易 设置。
- 它是可扩展的! 所有 DNS 提供商都以插件形式编写。 编写新插件非常容易。
安装
DNSControl 可以通过 macOS、Linux 和 Windows 的软件包安装,也可以从源代码安装。请参阅官方说明。
通过 GitHub Actions (GHA)
官方 GitHub Action 是:github.com/dnscontrol/dnscontrol-action
其他人也创建了一些,例如:
弃用警告(更新于 2026-08-17)
- REV() 将在 v5.0 发布后的某个时间从 RFC2317 切换到 RFC4183。 这是一个破坏性更改。如果你的配置受到影响,会输出警告。请参阅 https://docs.dnscontrol.org/language-reference/top-level-functions/revcompat
- NAMEDOTCOM、OPENSRS 和 SOFTLAYER 需要维护者! 这些提供商没有维护者。维护者会及时响应 PR 并修复 bug,并努力跟上协议变化。有兴趣成为英雄并接手它们吗?请联系 tal at what exit dot org。
贡献
想要贡献?无论是修复 bug、添加新的 DNS 提供商,还是改进文档,都欢迎贡献。请参阅 CONTRIBUTING.md 了解如何开始。