Создание записей 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)
}