![如何设置 DNS 服务器以便能够动态添加记录?](https://linux22.com/image/565311/%E5%A6%82%E4%BD%95%E8%AE%BE%E7%BD%AE%20DNS%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%BB%A5%E4%BE%BF%E8%83%BD%E5%A4%9F%E5%8A%A8%E6%80%81%E6%B7%BB%E5%8A%A0%E8%AE%B0%E5%BD%95%EF%BC%9F.png)
我需要在一组服务器上托管基于子域的 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
答案4
djbdns 更新完全透明 - 不会中断 - 并且“区域文件”结构非常适合脚本修改和自动化。记录格式与 BIND 完全不同,但并不像乍一看那么难理解。强烈推荐。