如何搜索域集成 DNS 条目

如何搜索域集成 DNS 条目

例子:

  1. 我有一个名为server1.domain.local的服务器
  2. 我在各种正向查找区域中有很多指向 server1.domain.local 的 CNAME 条目
  3. 我想停止使用 server1,并使用新的服务器 server2 来替代它。

我需要将所有指向 server1.domain.local 的 CNAME 更改为指向 server2.domain.local。

我知道我可以将 server1.domain.local 创建为另一个 CNAME,但我更愿意找到所有条目并单独更改它们。

我如何才能在所有正向查找区域中找到对 server.domain.local 的所有引用?

答案1

Windows 支持工具中的实用dnscmd程序可能是您最好的选择。您可以使用以下命令获取所有 DNS 区域的列表:dnscmd [servername] /EnumZones。您可以使用以下命令枚举每个区域中的所有 CNAME 记录:dnscmd [servername] /EnumRecords [zone name] . /TYPE CNAME

理论上,您可以在脚本中将这两者链接在一起,处理输出,并自动进行所需的更改(也可以使用dnscmd/RecordDelete命令/RecordAdd)。这是我留给您的练习(目前)。

编辑:好吧——我忍不住了。这是那个脚本。它只会执行echo实际进行更改的命令。如果它执行了你想要的操作,那么你可以将echo命令拉出来并让它运行。

@echo off

set SERVER_TO_REPLACE=server1.domain.com
set REPLACEMENT_VALUE=server2.domain.com

rem Quick and dirty list of Primary zones that aren't Reverse zones
for /F "usebackq" %%i in (`dnscmd %1 /EnumZones ^| find " Primary" ^| find /v " Rev"`) do call :process_zone %1 %%i
goto end

:process_zone
rem Quick and dirty enumeration of all CNAME records in a zone
for /F "usebackq tokens=1,3,4" %%i in (`dnscmd %1 /EnumRecords %2 . /TYPE CNAME ^| find " CNAME"`) do call :process_RR %1 %2 %%i %%j %%k
goto end

:process_RR
rem Check a record and alter it if necessary
if /I "%5" EQU "%SERVER_TO_REPLACE%" (
  echo dnscmd %1 /RecordDelete %2 %3 %4 %5 /f
  echo dnscmd %1 /RecordAdd %2 %3 %4 %REPLACEMENT_VALUE%
)

:end

答案2

一种方法是nslookup从您的 DNS 服务器之一或允许执行区域传输的系统运行。使用nslookupdo a ls > file,它将请求区域数据库的副本并将其保存到文本文件中。然后使用您最喜欢的文本编辑器中的搜索功能查找要修复的内容。

答案3

这些是 AD 集成区域吗?如果不是,您可以使用记事本手动编辑区域文件(查找和替换),然后重新加载区域。

编辑

我的错。我没有从你的标题中看到这些是 AD 集成区域。你仍然可以使用我发布的方法,将区域更改为非 AD 集成区域,编辑将要创建的区域文件,然后将其更改回 AD 集成区域。这有点儿像黑客行为,所以这可能不是你喜欢使用的方法。

相关内容