跳到正文
发现
命令行工具开发者工具

DNSControl:DNS 基础设施即代码工具

用 JavaScript 兼容配置管理 DNS 记录,支持 77 家 DNS 服务商与注册商。

admin
发布于 2026-10-30 · 更新于 2026-11-02
浏览
2
访问
0
下载
0
版本
v5.7.2
平台
Windows、macOS、Linux
该作品还没有经过官方审核。访问演示、下载或复制命令前,请自行确认来源可信。

详细介绍

项目简介

DNSControl 是一个用代码管理 DNS 的开源工具,把 DNS 记录写成配置文件,像管理代码一样管理域名解析。配置语言兼容 JavaScript,可通过插件调用 AWS Route 53、Cloudflare、Gandi 等服务商 API,并支持把同一组记录推送到多个服务商。它用 Go 编写,可运行在 Linux、macOS、Windows。

主要功能

  • 基础设施即代码:用 dnsconfig.js 描述 A、CNAME、MX 等记录。
  • 多服务商:支持 77 家 DNS 服务商和注册商,可在不同服务商之间迁移或同时推送。
  • 变更预览:dnscontrol preview 先查询服务商并显示将要做的修改,dnscontrol push 再执行。
  • 可复用:支持变量、宏等,SPF、MX 等重复记录可定义一次多处使用。
  • 适配 GitOps:配置可放进 Git,通过 PR 审核,并结合 CI/CD 自动发布。
  • 可扩展:服务商以插件形式实现,便于新增支持。

安装与使用

官方文档提供 macOS、Linux、Windows 的软件包安装方式,也可从源码编译。最简单的运行方式是用 Docker:

docker run --rm -it -v "$(pwd):/dns" ghcr.io/dnscontrol/dnscontrol preview

也可以先运行 dnscontrol init,通过交互式向导选择 DNS 服务商和注册商、验证凭据,并生成可用的 creds.json 与 dnsconfig.js,其中会包含现有解析记录。

配置示例(README 中的 dnsconfig.js 片段):

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 查看将要变更的内容,运行 dnscontrol push 将变更推送到服务商。

注意事项

  • v5.7.1 引入实验性 D() 语法,可用 REGISTRAR()、SERVICE() 直接选择凭据;旧语法仍受支持,官方希望用户测试并反馈。
  • REV() 计划从 RFC2317 切换到 RFC4183,属于破坏性变更,受影响配置会输出警告。
  • NAMEDOTCOM、OPENSRS、SOFTLAYER 三个服务商目前缺少维护者。

本作品整理自 GitHub 开源项目 DNSControl/dnscontrol,原作者 @DNSControl,许可证 MIT。中文介绍由 AI 根据项目 README 整理,以原仓库为准。

更新记录

  1. v5.7.2当前版本

    Greetings DNS fans! Thanks to all contributors involved in this release! This is a community project and we couldn't do it without all of your contributions! Sincerely, --Tom Limoncelli ## Monthly video call! Everyone is invited to the __Monthly DNSControl Community Video Conference Call__ on the 2nd Tuesday of each month. Join whether you are a new user with questions or an experienced developer that wants to discuss DNSControl internals... or anything in between! Meeting details on [GitHub Discussions](https://github.com/DNSControl/dnscontrol/discussions?discussions_q=label%3AAnnouncement%3Afuture_vc). ## Experimental: Try the new D() syntax! Select credential entries directly with REGISTRAR() and SERVICE() in dnsconfig.js. The legacy syntax remains supported; this revision replaces the experimental PROVIDER()/DNS_SERVICE() syntax from v5.3.0. See the examples in the [conversion guide](https://docs.dnscontrol.org/getting-started/converting-dnsconfig). Please test

  2. v5.7.1

    实验性 D() 语法可用 REGISTRAR()、SERVICE() 选择凭据,旧语法仍兼容;修复 BIND、Namecheap、Azure DNS 等服务商问题。

评论