Створення та управління DNS записами і зонами з PowerShell

Адміністратор DNS сервера на Windows для управління сервером, DNS зонами і записами може використовувати стару добру утиліту Dnscmd, або скористатися можливостями PowerShell модуля DNSServer. У цій статті ми розглянемо основні операцію по масовому створенню, модифікації і видалення різних DNS записів і зон за допомогою PowerShell.

зміст:

  • Модуль PowerShell - DNSServer
  • Управління DNS зонами з PowerShell
  • Управління DNS записи з допомогою модуля DNSServer
  • Як додати відразу кілька A / PTR записів в DNS зону за допомогою PowerShell?

Модуль PowerShell - DNSServer

PowerShell модуль DNSServer входить до складу RSAT. У Windows 10 RSAT устаналівается окремо, а в Windows Server ви можете встановити модуль через Server Manager (Role Administration Tools -> Dns Server Tools).

Перевіримо, що в системі є модуль PoSh DNSServer:

Get-Module DNSServer -ListAvailable

Можна вивести список команд в ньому (в версії модуля на Windows Server 2012 R2 є понад 100 команд):

Get-Module DNSServer

Управління DNS зонами з PowerShell

Виведемо список зон на DNS сервері (в нашому випадку це контролер домен):

Get-DnsServerZone -ComputerName dc01

Щоб додати нову первинну DNS зону з ім'ям contoso.local, виконайте команду:

Add-DnsServerPrimaryZone -Name contoso.local -ReplicationScope "Forest" -PassThru

Як ви бачите, була створена первинна DNS зона, інтегрована в Active Directory (isDsIntegrated = True).

Можна створити зону зворотного перегляду (Lockup Zone):

Add-DnsServerPrimaryZone -NetworkId "192.168.1.0/24" -ReplicationScope Domain

Щоб синхронізувати нову зону з іншими DC в домені, виконайте команду:

Sync-DnsServerZone -passthru

Виведемо список записів в новій DNS зоні (вона порожня):

Get-DnsServerResourceRecord -ComputerName dc01 -ZoneName contoso.local

Для видалення зони скористайтеся командою:

Remove-DnsServerZone -Name contoso.local -ComputerName dc01

Ця команда також видалить всі існуючі DNS записи в зоні.

Управління DNS записи з допомогою модуля DNSServer

Щоб створити нову A запис в указнаной DNS зоні, скористаємося командою:

Add-DnsServerResourceRecordA -Name rds1 -IPv4Address 192.168.1.30 -ZoneName contoso.local -TimeToLive 1:00:00

Щоб додати PTR запис в зворотній зоні, в попередній команді можна додати параметр -CreatePtr або створити покажчик вручну Командлети Add-DNSServerResourceRecordPTR:

Add-DNSServerResourceRecordPTR -ZoneName 1.168.192.in-addr.arpa -Name 30 -PTRDomainName rds1.contoso.local

Для додавання аліаса (CNAME) Для певної A записи, скористайтеся командою:

Add-DnsServerResourceRecordCName -ZoneName contoso.local -Name RDSFarm -HostNameAlias ​​rds1.contoso.local

Щоб змінити IP адресу даної A записи потрібно скористатися досить складною схемою, тому що ви не можете просто змінити IP адресу у DNS записи.

$ NewADNS = get-DnsServerResourceRecord -Name rds1 -ZoneName contoso.local -ComputerName dc01
$ OldADNS = get-DnsServerResourceRecord -Name rds1 -ZoneName contoso.local -ComputerName dc01

Тепер змінимо властивість IPV4Address у об'єкта $ NewADNS

$ NewADNS.RecordData.IPv4Address = [System.Net.IPAddress] :: parse ( '192.168.1.230')

Тепер змінимо IP адреса A записи за допомогою Set-DnsServerResourceRecord:

Set-DnsServerResourceRecord -NewInputObject $ NewADNS -OldInputObject $ OldADNS -ZoneName contoso.local -ComputerName dc01

Перевіримо, що IP адреса A записи змінився:

get-DnsServerResourceRecord -Name rds1 -ZoneName contoso.local

Можна вивести список DNS записів одного типу, вказавши тип в аргументі -RRType. Виведемо список записів CNAME в зоні:

Get-DnsServerResourceRecord -ComputerName DC01 -ZoneName contoso.local -RRType CNAME

Також ви можете використовувати фільтр за різними параметрами DNS записів за допомогою Where-Object. Наприклад, виведемо список A записів, у яких в імені є фраза rds.

Get-DnsServerResourceRecord -ZoneName contoso.local -RRType A | Where-Object HostName -like "* rds *"

Для видалення записів в DNS використовується командлет Remove-DnsServerResourceRecord.

Наприклад, для видалення CNAME записи, виконайте:

Remove-DnsServerResourceRecord -ZoneName contoso.local -RRType CName -Name RDSFarm

Для видалення A записи:

Remove-DnsServerResourceRecord -ZoneName contoso.local -RRType A -Name rds1 -Force

Для видалення PTR запису в зворотній зоні:

Remove-DnsServerResourceRecord -ZoneName "1.168.192.in-addr.arpa" -RRType "PTR" -Name "30"

Як додати відразу кілька A / PTR записів в DNS зону за допомогою PowerShell?

Припустимо, вам потрібно створити відразу безліч A записів в певній DNS зоні прямого перегляду. Ви можете завести їх по-одній з допомогою команди Add-DnsServerResourceRecordA, але гораздол простіше і швидше масово завести A записи за списком з файлу.

Створіть текстовий файл NewDnsRecords.txt ч іменами і IP адресами, які ви хочете завести. Формат файлу такий:

HostName, IPAddress

Щоб завести A записи в зоні contoso.local за даними з TXT / CSV файлу, скористайтеся наступним скриптом PowerShell:

Import-CSV "C: \ PS \ NewDnsRecords.txt" | %
Add-DNSServerResourceRecordA -ZoneName contoso.local -Name $ _. "HostName" -IPv4Address $ _. "IPAddress"

Якщо потрібно відразу завести записи в зворотній зоні, додайте в команду Add-DNSServerResourceRecordA параметр -CreatePtr.

Тепер за допомогою консолі DNS Manager (dnsmgmt.msc) або команнди Get-DnsServerResourceRecord -ZoneName contoso.local переконайтеся, що всі A записи успішно створені.

Якщо потрібно масово завести PTR запису в зоні зворотного перегляду створіть текстовий / csv файл з наступною структурою

octet, hostName, zoneName 65, rds5.contoso.local, 1.168.192.in-addr.arpa 66, rds6.contoso.local, 1.168.192.in-addr.arpa 67, rds7.contoso.local, 1.168.192 .in-addr.arpa. 

Потім запустіть такий скрипт:

Import-CSV "C: \ PS \ NewDnsPTRRecords.txt" | %
Add-DNSServerResourceRecordPTR -ZoneName $ _. "ZoneName" -Name $ _. "Octet" -PTRDomainName $ _. "HostName"

Переконайтеся, що PTR запису з'явилися в зазначеній Reverse зоні DNS.