2009-02-25 50 views
4

我想以编程方式自动更新我的DNS更多多个域。我在GoDaddy上运行BIND服务器(在FreeBSD上)以及主机域和DNS。我无法找到GoDaddy的Web服务API来访问和更新他们托管的DNS,因此我可能必须使用我的BIND服务器来提供动态解决方案。你会如何自动使用DNS创建子域?

基本上我只想查询哪些子域已经存在并添加新子域。

是BIND最佳解决方案吗?有没有我不必登录到GoDaddy或手动更新我的BIND配置自动添加新域的另一种方法?

回答

3

您需要添加新子域的功能是动态更新,如RFC 2136中所述,并且受到BIND的支持。

使用DNS“UPDATE”消息添加和删除区域文件中的记录是相当容易的(例如使用Perl的Net :: DNS模块)。

要实际获取那里的东西,你有两种方法:

  1. 治疗一些其他的数据库作为明确,并转换变化在该数据库中到DDNS更新,或。

  2. 许可证DNS“AXFR”的消息,让您下载整个区域的内容

3

一种方法是编写一个程序,读取和/或更新BIND配置文件(它只是一个文本文件,具有特定的格式),并在有任何更改时重新加载BIND守护进程。所以,就好像你手动更新了你的BIND配置,除非你已经写了一个程序来为你做。

2

仅供参考(虽然只在您的区管理系统,而不是整个世界!):这是一个系统/网络管理问题,而不是编程问题。你可能可以在其他地方更快地得到更好的答案。

这就是说...这很简单:你只需要一个支持数据库后端数据的DNS服务器。然后,您只需将条目写入数据库,或者查询数据库中的内容,DNS记录就会自动发送出去。理想情况下,使用支持触发器的数据库,以便您可以让DNS记录的序列号在更改时自动更新。否则,您需要在代码的每次更改中读取/写入序列号,以便在事务中执行整个更新。

编辑:刚刚看到上面的其他评论。不要允许AXFR。这些被认为是安全风险。

是否将域TTL设置为低,因此更新会尽快传播到其他服务器。