如何将 Windows Server 2012R2 中的 DNS 区域置于 git 版本控制之下

如何将 Windows Server 2012R2 中的 DNS 区域置于 git 版本控制之下

我们目前使用 Windows Server 2012 R2 作为 DNS 服务器。我想将所有区域文件置于版本控制之下。我发现问题显示了如何通过 PowerShell 导出区域。但它似乎无法以我稍后可以重新导入的方式导出它。

我也阅读了有关 DnsCmd 命令的信息,但它已被弃用。

那么:如何将存储在 Active Directory 中的区域导出到文本文件中,以便我可以将它们放入 git/版本控制中,以及(重要的),以便以后可以根据需要重新导入旧版本?

答案1

这里你要遇到的一个问题是,Active Directory 区域不仅仅是你可能期望的普通区域文件bind。我的意思是,是的,它一个普通区域,但它还具有集成权限,无法以纯文本格式轻易备份。

(由于提到了 git,我假设您在纯文本中寻找某些内容,并且我猜您想在不同时间比较 AD 区域的差异)

但如果你下定决心要这么做,出口您的区域文件正在使用Export-DnsServerZone

Export-DnsServerZone -Name ad.example.com -FileName ad.example.com.zone

现在,文档您可以为 指定文件路径-FileName,但在我的测试中我实际上无法做到这一点。这意味着该文件最终将位于 中%WinDir%\System32\dns。您需要从那里获取它并将其移动到您的 git 存储库并提交它。

但是,当您想要恢复区域文件时,将其恢复回来就不一样了。似乎没有一个很好的 powershell 包装器可以做到这一点(可能是因为这不是 Microsoft 希望您使用集成 AD 区域做的事情):

dnscmd /ZoneAdd ad.example.com /Primary /File ad.example.com.zone /load

请注意,在执行此恢复时,您将失去区域中的所有权限 - 但您将拥有原始数据,并且能够在 git 中进行差异化。

答案2

您是否正在使用 Active Directory 集成区域?虽然它不太优雅,但您可以为您的区域添加辅助 DNS 服务器,然后您就可以访问 ZONE txt 文件。

相关内容