[原]批量添加DNS的A记录和PTR记录

搞SQL Server集群难免要搞域控制器,搞域控制器就不得不提DNS服务器,但DNS不只是为域服务,还可以作为ESX服务器所需的DNS服务器来复用,于是涉及到如何批量添加DNS的记录了(包括A记录和PTR记录)。

在Google上面搜索的话,估计最容易搜索到的是如何使用 dnscmd.exe 这个工具来添加A记录,这个工具位于Windows 安装光盘的 SUPPORT\TOOLS\SUPPORT.CAB 中,用WinRAR可以打开,只需要Copy 一个文件出来就可以用了,命令很简单:

dnscmd [DNS] /RecordAdd [域] [主机名] A [IP]
dnscmd . /RecordAdd myhome.com hostA A 172.16.2.1
dnscmd . /RecordAdd myhome.com hostB A 172.16.2.2
dnscmd . /RecordAdd myhome.com hostC A 172.16.2.3
dnscmd . /RecordAdd myhome.com hostD A 172.16.2.4

到此为止,感觉上还是比较简单的,找个“工具”(C#、Perl、JS)生成一下这些命令就可以了。

但是添加完A记录后,PTR记录如何添加呢,这个也可以dnscmd工具做,这里我就不写了,本文重点不在这里。

有没有一种解决方案可以做到:A记录和PTR记录一起添加呢,答案是肯定的。

以下是一段在Google中搜索到的脚本,用于同时添加A记录和PTR记录的工具,出处无从查起了。

::  addaptr.bat
::
::  Purpose:         Add an A and PTR record using dnscmd.exe
::
::  Usage:           addaptr dnsserver fqdn ipadd
::
::                     dnsserver  DNS server's ip, hostname or "." if the
::                                DNS service is running on local machine
::                     fqdn       FQDN of the host you want the records
::                                to be added for (hostname.mydomain.com)
::                     ipadd      ip address of the host
:: __________________________________________________________________
::
@Echo Off
SetLocal

Set dnsserver=%1
Set fqdn=%2
Set ipadd=%3

If Not Defined ipadd (
  Echo Add an A and PTR record using dnscmd.exe
  Echo.
  Echo %~n0 dnsserver fqdn ipadd
  Echo.
  Echo   dnsserver  DNS server's ip address, hostname, or "." if the DNS
  Echo              service is running on local machine.
  Echo   fqdn       FQDN of the host you want the records to be added for
  Echo              ^(hostname.mydomain.com^)
  Echo   ipadd      ip address of the host
  Goto End
)

For /F "Tokens=1,* Delims=." %%A In ("%fqdn%") Do (
  Set hostname=%%A
  Set fzone=%%B
)
For /F "Tokens=1-4 Delims=." %%A In ("%ipadd%") Do (
  Set rzone=%%C.%%B.%%A.in-addr.arpa
  Set okt4=%%D
)

:: Exists reverse lookupzone?
DnsCmd %dnsserver% /ZoneInfo %rzone% >%TEMP%.\%~n0.log 2>&1 || (Goto Err)

:: Add PTR record
DnsCmd %dnsserver% /RecordAdd %rzone% %okt4% PTR %fqdn% >%TEMP%.\%~n0.log 2>&1 || (Goto Err)

:: Exists forward lookupzone?
DnsCmd %dnsserver% /ZoneInfo %fzone% >%TEMP%.\%~n0.log 2>&1 || (Goto Err)

:: Add A record
DnsCmd %dnsserver% /RecordAdd %fzone% %hostname% A %ipadd% >%TEMP%.\%~n0.log 2>&1 || (Goto Err)

Echo Done.
Goto End

:Err
Type %TEMP%.\%~n0.log
Pause

:End
If Exist %TEMP%.\%~n0.log Del %TEMP%.\%~n0.log
EndLocal

将这段脚本另存为 addaptr.bat 和 dnscmd.exe 放在同一个目录,这个命令的使用方法也很简单:

addaptr.bat [DNS] [主机名+域名] [IP]
addaptr.bat . Host096.myhome.com 172.16.2.96
addaptr.bat . Host097.myhome.com 172.16.2.97
addaptr.bat . Host098.myhome.com 172.16.2.98
addaptr.bat . Host099.myhome.com 172.16.2.99

下一步就很简单了,找个“工具”(C#、Perl、JS)生成一下脚本就行了,下面是我用于批量生成的一段Perl脚本,将整个C段加入DNS:

#! /usr/bin/perl

$i=1;
for($i=1 ; $i<= 9 ; $i++)
{
 print "addaptr.bat  .  Host00$i.myhome.com  172.16.2.$i"."\n";
}
for($i=10 ; $i<= 99; $i++)
{
 print "addaptr.bat  .  Host0$i.myhome.com  172.16.2.$i"."\n";
}
for($i=100 ; $i <= 254 ; $i++)
{
 print "addaptr.bat  .  Host$i.myhome.com  172.16.2.$i"."\n";
}
原文地址:https://www.cnblogs.com/killkill/p/1455850.html