如何在Windows Server 2012R2的git版本控制下放置DNS区域

我们目前使用Windows Server 2012 R2作为我们的DNS服务器。 我想把所有的区域文件在版本控制下。 我发现这个问题展示了如何通过PowerShell导出区域。 但是,似乎没有将其导出,以便以后可以重新导入。

我也读了关于DnsCmd命令,但不推荐使用。

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

你将要遇到的一个问题是,Active Directory区域不仅仅是一个正常的区域文件,就像你可能期望的bind 。 我的意思是,这一个普通的区域,但它也具有整合的权限,不能以纯文本格式进行备份。

(由于提到了git,我假设你在纯文本之后,而且我猜你想在不同的时间区分AD区域)

但是,如果你不这样做, 导出你的区域文件的方式是使用Export-DnsServerZone

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

现在,文档说,你可以指定一个文件path的文件-FileName ,但在我的testing中,我实际上是无法做到这一点。 所以这意味着这个文件将以%WinDir%\System32\dns结尾。 你会想从那里抓住它,并将其移动到你的git仓库并提交。

但是,如果要恢复区域文件,则将区域文件恢复到原来的状态并不完全相同。 这似乎没有一个很好的PowerShell包装(可能是因为它不是微软希望你用一个集成的AD区域):

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

请注意,在执行此恢复时,您将失去该区域的所有权限 – 但是您将拥有原始数据,并且可以在git中进行区分。

您是否使用Active Directory集成区域? 它不是优雅的,但你可以添加一个辅助DNS服务器为您的区域,然后你将有权访问一个ZONE txt文件。