This morning Douzi accidentally discovered that the company’s DNS server only had forward resolution and no corresponding PTR record. In other words, the IP address can be resolved through the domain name, but the IP address cannot find the domain name when reversed.
I wrote a very simple script in 1 hour to determine whether the existing records have corresponding reverse zone and PTR records. If not, automatically create them for me.
The idea is very simple, and the script is relatively rough. There is no fault tolerance processing or optimization, but it is just a matter of implementing the function.
$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 } } }
Execute script
Result