在 BIND 中更新 100 多个区域记录的最快方法是什么?

在 BIND 中更新 100 多个区域记录的最快方法是什么?

我目前正在使用 Cpanel 来管理我的 BIND 服务器,每当记录指向的服务器关闭时,更新 100 多条记录就很痛苦。

有没有更快的方法来更新 BIND 记录?cpanel 方式需要多次点击。命令行方式也很慢,因为您必须进入每个区域、编辑和保存。

如果我能准备好预先录制的区域就太好了。当我需要切换时,我只需替换区域文件即可。

答案1

如果出于某种原因您经常这样做,那么您可以简单地创建配置文件和数据库文件集,然后简单地将其设置为named.conf指向您想要激活的任何文件版本的符号链接。当您需要切换时,更改符号链接并重新启动。

// named.primary.conf for primary link
...
zone "example.org" {
        type master;
        file "/etc/bind/master/example.org.primary.dns";
};

// named.backup.conf for primary link
...
zone "example.org" {
        type master;
        file "/etc/bind/master/example.org.backup.dns";
};

答案2

如果使用正确的工具,从命令行工作会非常快。例如,您可以使用以下命令查找特定文件并执行所需的替换。

$ find /path -name "*.zone" | sudo xargs sed -i 's/string/replacement/g'

您需要根据您的需要和文件命名更改搜索条件。另外,我认为最好在开始时sed-i选择任何选项以确保您操作正确,或者至少备份您的文件。

答案3

Khaled 命令的变体sed

perl -pi.bak -e 's/string/replacement/' *zone

这将导致 perl 为其运行的每个文件创建一个 .bak 文件。当然,如果有必要,您可以在表达式中使用更复杂的 perl。

转到区域文件目录并在那里设置版本控制也没什么坏处。例如:

git init
git add /path/to/zone/files
git commit -m 'Initial checkin'

将设置存储库。然后,您可以使用git命令来管理版本控制。

答案4

您是否拥有多个域,并且它们基本上都具有相同的区域文件?

如果是这样,那么我发现最简单的方法是删除所有这些区域文件,只留下一个副本,然后将所有已删除区域文件的名称符号链接到剩下的一个。在上述单个区域文件中,确保避免对任何此类域使用绝对引用,例如使用“@ IN AAAA ...”而不是“example.com. IN AAAA ...”等。Viola,您现在可以编辑单个区域文件,并将更改同时应用于所有域。

相关内容