pipe理区域文件

由于各种原因,我们托pipe了我们自己的DNS服务器 (BIND),其中包括我们经常部署和终止机器的事实,而且我们有时需要通过DNS快速负载均衡。

然而,现在我们有了一个好的服务器 ,我们很难跟踪所有的logging,而且在编辑我们的区域文件时我们往往会犯错误。 还没有太坏(我们使用一些其他的DNS提供商作为备份),但我正在寻找一个更好的方式,而不仅仅是手动编辑文件。

此外,由于我们可以轻松地与臭名昭着的厨师一起部署新的实例,手工操作最需要的是时间! 如果我们可以自动化这个,会很感兴趣。 任何人都知道这个? 编辑和维护此区域文件的最佳做法是什么?

您可以使用Chefsearch,使用发现的主机名/ fqdn和节点的ipaddress,与Chefdynamic构build区域文件作为模板。

hosts = search(:node, "*:*") template '/path/to/zonefile' do source 'zonefile.erb' variables(:hosts => hosts) owner 'root' group 'root' mode 0644 end 

并且模板将遍历所传递的hostsvariables,使用search中每个结果的主机名,fqdn和ipaddress。 被举的例子:

 <% @hosts.each do |h| -%> <%= h['fqdn'] %>. IN A <%= h['ipaddress'] %> <% end -%> 

我知道现在已经有一个月了,但是我刚刚完成了一个自动化系统的设置来pipe理这个。 它由一个git仓库组成,其中包含:

  1. 所有主要区域和configuration文件。
  2. 所有辅助区域和configuration文件。
  3. 为我的辅助名称服务器构build脚本 – Ubuntu 10.0.4LTS
  4. 一个非常简单的Capistrano配方,可以更新主要和辅助名称服务器。

当我想对我的区域文件进行更新时,以下是这个过程。

 git pull #to make sure it's current. #Open the zone file and edit. git diff #verify the change is what I want. git commit -a; git push cap primary:update #that also sends a notify to my secondary who pulls down the new zone cap secondary:update #if I'm just updating the secondary. 

它的工作非常简单 – 我不必login一堆服务器来做任何事情,而且很容易看到我在改变什么。

另外 – 它给了我一个很好的变化的历史。

如果你想要一个回购的副本 – 只要知道,我会DM你。

这是一个痛苦,伴随着文本configuration的力量。 我发现有60个区域文件需要处理,除非你必须每天更改它们,但是也许你可以更好地服务于支持来自数据库(PostgreSQL,例如PowerDNS )的DNS数据的服务器。 这允许您创build简单的脚本/页面/应用程序来处理数据(甚至可以为客户提供前端)。

你甚至可以使用SQL将绑定configuration成服务器的从服务器,它会自动从主服务器加载区域信息。

至于最佳做法:

  • 保持区域文件干净无用的评论,
  • 强制正确使用制表符/空格
  • 使用区域文件的域名
  • 我使用vimmacros来编辑多个文件,但是你可以用sed和其他工具来完成

由于我假设您的所有服务器都是在您的厨师configuration中定义的,那么如何简单地使用该数据生成您的区域文件? 不知道厨师是否有一些内部的function,但它似乎是一个脚本应该相对较小的东西。 为了保持独立,将这些“dynamic”服务器委托给自己的区域可能是一个想法。

话虽如此,你确定你想使用DNS进行负载平衡?

完整性validation脚本,比如validation序列号已经升级,SCM(也许是Subversion,或者任何本地首选的毒药)是有历史logging和能力的。

一旦你有了像svn这样的数据,你可以使用添加/删除单个主机的工具,同时让人类编辑区域文件。

否则,将数据从平面文件移动到数据库有多种select。 PowerDNS是一个,绑定的DLZ补丁是另一个。 我会注意到,就性能而言,如果这些是公开的区域,您可能希望将数据库支持的服务器保持为隐藏的主服务器,并让AXFR / IXFR将更改传播到可以运行库存绑定的公共主服务器。 对于内部区域(corp.example.com)这可能是矫枉过正。

试试这些规则

  • configuration您的主DNS服务器通知从属区域更改。
  • 用一个可以自动增加版本的工具来编辑区域文件。 我使用emacs。
  • 将您的区域文件保存在版本控制系统(CVS,Subversion或GIT)中。
  • 在提交或重新加载主服务器之前,请将您的区域文件再次分配给源代码pipe理系统。 直观地validation您的更改,最好是针对书面更改规范。 使用更改规范作为提交消息。
  • 使用重新加载来更新更改,而不是重新启动主绑定服务器。 考虑一个脚本来更新源代码pipe理系统的区域configuration,并一步重新加载主服务器。
  • 在您的区域configuration中使用短暂的超时。 它应该小于变化之间的规定频率。
  • 如果您正在pipe理正向和反向区域,请考虑使用一种可从通用规范生成这两个文件的工具。

对于60台服务器,Webmin的BIND模块应该可以正常工作。 也检查这个列表

编辑:我没有读过这个问题的第一句话。

我不知道是否有一个廉价的方式来做这个,除了滚动自己的脚本,无论是通过木偶/厨师或独立。

我知道一些位于BIND之上的商业“DNSpipe理”解决scheme。 他们还提供简单的Web界面和SOAP / Rest API来快速添加/删除logging。 如果需要,我可以提供这些公司的信息,因为我们最近评估了几个产品。