我们目前使用 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 文件。