Создание записей PTR из существующих записей A (Windows DNS)

Я мигрирую DNS-зоны (как прямые, так и обратные) из Bind в Windows DNS. Обратные записи в существующем сервере Bind не были так хорошо сохранены для статических зон, и я бы предпочел не просто импортировать все записи.

Однако я перенес все записи А в настройки Windows и убедился, что они очищены. Теперь у меня есть пустые обратные зоны.

Что меня интересует, так это то, что существует ли относительно простой способ сообщить DNS-серверу (Windows 2008 R2, интегрированный Active Directory), либо через графический интерфейс, либо через строку cmd, чтобы создать записи PTR для всех записей A.

2 ответа

Решение

Каковы ваши навыки PowerShell? Это может быть довольно простой вопрос использования

$hosts = Get-WmiObject -ComputerName $DomainController -Namespace 'root\MicrosoftDNS' -Class MicrosoftDNS_AType 

А затем с помощью метода CreateInstanceFromPropertyData:

foreach ($record in $hosts)  {
  $PTRRecord = [wmiclass]"\\$DomainController\root\MicrosoftDNS:MicrosoftDNS_PTRType
  $PTRRecord.createInstanceFromPropertydata("foo","bar","baz")
}

Мой пример выше - это фрагмент скрипта, который я использую для добавления записей CNAME для существующих записей A. Делать PTRs должно быть очень похоже; исправить мою ручную волну foo-bar-baz. В этой статье Scripting Guys есть больше идей и указателей.

Итак, более полный ответ следует. Обратите внимание, что он очень мало проверяет ошибки и слишком болтлив. Я взял большинство идей из ответа сценариста и AndyN. Это ни в коем случае не идеально.

$server = "mydns.domain.name"

if (-not (Test-Connection -ComputerName $server)){Throw "DNS server not found"}

$srvr = $server -split "\."

$hosts = Get-WmiObject -ComputerName $server -Namespace 'root\MicrosoftDNS' -Class MicrosoftDNS_AType | where { $_.DomainName -eq "$($srvr[1]).$($srvr[2])" }

foreach ($record in $hosts)  {
  $resource = [WmiClass]"\\$($srvr[0])\root\MicrosoftDNS:MicrosoftDNS_ResourceRecord"
  $computer = $record.OwnerName
  $addr = $record.IPAddress -split "\."
  $rzone = "$($addr[1]).$($addr[0]).in-addr.arpa"
  $text = "$($addr[3]).$($addr[2]).$rzone IN PTR $computer"
write-host "$server, $rzone, $text"
  $resource.CreateInstanceFromTextRepresentation($server, $rzone, $text)
}
Другие вопросы по тегам