如何设置 DNS 服务器以便能够动态添加记录?

如何设置 DNS 服务器以便能够动态添加记录?

我需要在一组服务器上托管基于子域的 SaaS 应用程序。服务器包括 xx1.example.com、xx2.example.com 等等。我想在这些服务器上托管一组 yyy.example.com 网站。

由于网站是动态创建的,因此我也需要能够动态设置 DNS 记录。DNS 通配符区域实际上无法扩展,因为最终我将超出第一台服务器的容量,需要将新实例推送到其他机器上。因此,我需要能够将特定子域指向特定 IP 地址。

我四处寻找基于 API 的云 DNS 服务(这很棒),但它们似乎对我的需求(大量低容量实例)来说太贵了。Rackspace 有一个免费的云 DNS 服务,但它最多只能支持 500 个区域,技术支持告诉我他们正在重写 API,所以我暂时不想使用他们的服务。

因此,我认为我应该为这些区域设置自己的 DNS 服务器。因此,问题是:哪种 DNS 服务器软件适合这种特定需求,让我无需重启即可创建区域?

有什么建议吗?谢谢!

答案1

如果您要添加的所有记录都是特定区域的子域,那么您可以轻松设置绑定以进行动态更新。然后只需使用 nsupdate 向区域提交更新即可。

如果所有新记录都是现有域内的记录,那么这应该可以正常工作。如果您需要动态添加其他域,那么这实际上没什么帮助。

// zone config
// using ip only for authentication, should really use hmac auth
zone "example.com" {
        type master;
        file "/etc/bind/dyn/example.com.dns";
        allow-query {any;};
        allow-update {
                127.0.0.1;
                192.0.2.0/24;
        };
};

使用更新脚本更新

#!/bin/bash
record=yyy.example.com
(
 echo "server xx1.example.com"
 echo "zone example.com"

 echo "update delete ${record} A"
 echo "update add ${record} ${ttl} A 192.0.2.1"
 echo "send"
) | /usr/bin/nsupdate

答案2

bind能够(重新)加载单个域的文件,而无需重新启动。

答案3

我用我的DNS它工作得很好,很简单,也可以轻松地与 BIND 配合使用。还有其他的,比如强力DNS和别的。

答案4

djbdns 更新完全透明 - 不会中断 - 并且“区域文件”结构非常适合脚本修改和自动化。记录格式与 BIND 完全不同,但并不像乍一看那么难理解。强烈推荐。

相关内容