使用 DNControl 用代码管理 DNS 记录


共计 1222 个字符,预计需要花费 4 分钟才能阅读完成。

看见别人介绍了一下 DNControl,感觉挺有意思,就尝试使用了一下,效果还不错。它可以通过自己写配置文件,通过 DSL(Domain Specific Language)同时管理多个厂商的 DNS 记录。

官网地址:https://dnscontrol.org/

支持的 DNS 厂商列表:https://docs.dnscontrol.org/service-providers/providers

看了下介绍,似乎还不支持 dnspod,但是支持 cf,所以这里以托管在 cf 的域名为例。

首先创建一个文件夹,存放配置文件。

mkdir /home/docker/dc/

然后创建 cf 的配置文件。这里有两种方式可以使用。

# 方式一(推荐)
cat > creds.json <<EOF
{
  "cloudflare": {                               // 在 dnsconfig.js 文件中需要用到的厂商名称
    "TYPE": "CLOUDFLAREAPI",                    // cloudflare 的认证类型
    "accountid": "account-id",                  // 账户 id,即管理域名右下角那个帐户 id
    "apitoken": "api-token",                    // token,需要在 https://dash.cloudflare.com/profile/api-tokens 创建,以便给此认证方式最小的权限
  }
}
EOF

# 方式二 - 这种方式权限很大,因为这些凭据允许 DNSControl 访问所有内容
cat > creds.json <<EOF
{
  "cloudflare": {                               // 在 dnsconfig.js 文件中需要用到的厂商名称
    "TYPE": "CLOUDFLAREAPI",                    // cloudflare 的认证类型
    "accountid": "account-id",  // 账户 id,即管理域名右下角那个帐户 id
    "apiuser": "api-user",     // cloudflare 登陆的邮箱
    "apikey": "api-key" // 这个页面下的 Global API Key
  }
}
EOF

配置完凭据,然后就是配置具体的域名和其解析记录,这里根据自己的需要配置。

cat > dnsconfig.js <<EOF
var REG_NONE = NewRegistrar("none");
var DNS_CF = NewDnsProvider("cloudflare");

D("xxx.com", REG_NONE, DnsProvider(DNS_CF),
    A("@", "1.2.3.4", CF_PROXY_ON)
);
EOF

然后执行命令检查配置是否有误。

docker run --rm -it -v /home/docker/dc/:/dns  ghcr.io/stackexchange/dnscontrol preview

如果没有报错会提示新增或修改删除了哪些记录,然后执行修改命令即可。

docker run --rm -it -v /home/docker/dc/:/dns  ghcr.io/stackexchange/dnscontrol push

提醒:本文发布于294天前,文中所关联的信息可能已发生改变,请知悉!

Tips:清朝云网络工作室

阅读剩余
THE END