今天早上豆子无意中发现公司的dns服务器上面只有正向的解析,而没有对应的ptr记录。换句话说,可以通过域名来解析ip地址,但是倒过来ip地址是找不着域名的。
1个小时写了个很简单的脚本,判断已有的记录是否存在对应的reverse zone 和ptr记录,如果没有的话,自动给我创建加上。
思路很简单,脚本也比较糙,没有任何容错处理和优化,不过实现功能就好。
$ptrzones=get-dnsserverzone -computername syddc01 | where-object {$_.zonename -like "*.arpa"}
#获取所以的a记录
$machines=get-dnsserverresourcerecord -computername syddc01 -rrtype a -zonename 'omnicom.com.au'| select @{n='ip';e={$_.recorddata.ipv4address.ipaddresstostring}}, hostname, timestamp, @{n='ptrzone';e={$temp=$_.recorddata.ipv4address.ipaddresstostring.split('.');$t=$temp[2]+'.'+$temp[1]+'.'+$temp[0]+‘.in-addr.arpa’;$t}}
foreach($machine in $machines){
#判断是否存在ptr的reverse zone
write-host $machine.hostname
write-host $machine.ptrzone
$flag=0
foreach($p in $ptrzones){
if($p.zonename -eq $machine.ptrzone){
#write-host " matched ptr zone" -backgroundcolor cyan
$flag=1
break
}
}
#如果ptr zone不存在,创建一个对应的
if($flag -eq 0){
write-host " ptrzone is missing,a new ptrzone will be created" -foregroundcolor red
$temp=$machine.ip.split('.')
$range=$temp[0]+'.'+$temp[1]+'.'+$temp[2]+".0/24"
#$range
add-dnsserverprimaryzone -dynamicupdate secure -networkid $range -replicationscope domain -computername syddc01
}
else{
#如果ptr zone存在,判断是否存在对应的ptr记录
$hname=get-dnsserverresourcerecord -computername syddc01 -rrtype ptr -zonename $machine.ptrzone | select @{n='name';e={$_.recorddata.ptrdomainname}}
#$hname
$temp="*"+$machine.hostname+"*"
if($hname -like $temp){
write-host "already exist" -foregroundcolor cyan
}
else{
#ptr zone存在 但是ptr记录不存在
write-host "adding ptr record" -foregroundcolor yellow
add-dnsserverresourcerecordptr -computername syddc01 -zonename $machine.ptrzone -name $machine.ip.split('.')[3] -allowupdateany -timetolive 01:00:00 -agerecord -ptrdomainname $machine.hostname
}
}
}
执行脚本
结果
