- Создание и управление DNS записями и зонами из PowerShell
- Модуль PowerShell — DNSServer
- Управление DNS зонами из PowerShell
- Управление DNS записиями с помошью модуля DNSServer
- Как добавить сразу несколько A / PTR записей в DNS зону с помощью PowerShell?
- Dns Server
- DnsServer
- Заметки: Выгрузка DNS-записей с помощью Powershell
- Выгрузка DNS-записей
- Задача
- Теория
Создание и управление DNS записями и зонами из PowerShell
Администратор DNS сервера на Windows для управления сервером, DNS зонами и записями может использовать старую добрую утилиту Dnscmd , или воспользоваться возможностями PowerShell модуля DNSServer. В этой статье мы рассмотрим основные операцию по массовому созданию, модификации и удалению различных 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 команд):
Управление 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 в домене, выполните команду:
Выведем список записей в новой 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 01: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
Теперь изменим 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 адресами, которые вы хотите завести. Формат файла такой:
Чтобы завести 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 файл со следующей структурой
Затем запустите такой скрипт:
Import-CSV «C:\PS\NewDnsPTRRecords.txt» | %<
Add-DNSServerResourceRecordPTR -ZoneName $_.»zoneName» -Name $_.»octet» -PTRDomainName $_.»hostName»
>
Убедитесь, что PTR записи появились в указанной Reverse зоне DNS.
Dns Server
This reference provides cmdlet descriptions and syntax for all DNS Server cmdlets. It lists the cmdlets in alphabetical order based on the verb at the beginning of the cmdlet. DnsServer Module can be obtained either by installing DNS Server role or adding the DNS Server Tools part of Remote Server Administration Tools (RSAT) feature.
DnsServer
Adds a client subnet to a DNS server.
Adds a conditional forwarder to a DNS server.
Creates a DNS application directory partition.
Adds server level forwarders to a DNS server.
Adds a primary zone to a DNS server.
Adds a policy for query resolution to a DNS server.
Adds a recursion scope on a DNS server.
Adds a resource record of a specified type to a specified DNS zone.
Adds a type A resource record to a DNS zone.
Adds a type AAAA resource record to a DNS server.
Adds a type CNAME resource record to a DNS zone.
Adds a type DNSKEY resource record to a DNS zone.
Adds a type DS resource record to a DNS zone.
Adds an MX resource record to a DNS server.
Adds a type PTR resource record to a DNS server.
Adds an RRL exception list on the DNS server.
Adds root hints on a DNS server.
Adds a DNS server secondary zone.
Adds a KSK or ZSK to a signed zone.
Adds a DNS stub zone.
Adds a trust anchor to a DNS server.
Adds a virtualization instance.
Adds a new delegated DNS zone to an existing zone.
Adds a zone scope to an existing zone.
Adds a zone transfer policy to a DNS server.
Clears resource records from a cache on the DNS server.
Clears all DNS server statistics or statistics for zones.
Converts a zone to a DNS primary zone.
Converts a primary zone or stub zone to a secondary zone.
Disables DNS server policies.
Disables key rollover on an input key.
Enables DNS server policies.
Enables rollover on the input key.
Exports DS and DNSKEY information for a DNSSEC-signed zone.
Exports contents of a zone to a file.
Retrieves a DNS server configuration.
Retrieves DNS server cache settings.
Gets client subnets for a DNS server.
Retrieves DNS event logging details.
Gets a DNS application directory partition.
Gets DNSSEC settings for a zone.
Retrieves DNS Server Active Directory settings
Gets EDNS configuration settings on a DNS server.
Gets forwarder configuration settings on a DNS server.
Retrieves DNS server GlobalName zone configuration details.
Gets a global query block list.
Gets policies for query resolution from a DNS server.
Retrieves DNS server recursion settings.
Gets the DNS server recursion scopes.
Gets resource records from a specified DNS zone.
Displays the RRL settings on a DNS server.
Enumerates the RRL exception lists on a DNS Server.
Gets root hints on a DNS server.
Gets DNS aging and scavenging settings.
Retrieves DNS server settings.
Gets zone signing keys.
Retrieves DNS server statistics or statistics for zones.
Gets trust anchors on a DNS server.
Gets trust points on a DNS server.
Gets the virtualization instances on the DNS server.
Gets details of DNS zones on a DNS server.
Gets DNS aging settings for a zone.
Gets the zone delegations of a DNS server zone.
Gets the scopes of a zone on a DNS server.
Gets the zone transfer policies on a DNS server.
Imports DS resource record information from a file.
Copies root hints from a DNS server.
Imports a trust anchor for a DNS server.
Initiates rollover of signing keys for the zone.
Signs a DNS server zone.
Unsigns a DNS server zone.
Registers a DNS server in a DNS application directory partition.
Removes a client subnet from a DNS server.
Removes a DNS application directory partition.
Removes server level forwarders from a DNS server.
Removes a policy for query resolution from a DNS server.
Removes a recursion scope from a DNS server.
Removes specified DNS server resource records from a zone.
Removes an RRL exception list from a DNS server.
Removes root hints from a DNS server.
Removes signing keys.
Removes a trust anchor from a DNS server.
Removes a virtualization instance.
Removes a zone from a DNS server.
Removes a name server or delegation from a DNS zone.
Removes a zone scope from an existing zone.
Removes a zone transfer policy from a DNS server.
Transfers the role of Key Master for a DNS zone.
Restores primary DNS zone contents from Active Directory or from a file.
Restores secondary zone information from its source.
Resumes name resolution on a suspended zone.
Overwrites a DNS server configuration.
Modifies cache settings for a DNS server.
Updates the IP addresses in a client subnet.
Changes settings for a DNS conditional forwarder.
Sets debugging and logging parameters.
Changes settings for DNSSEC for a zone.
Modifies DNS Active Directory settings.
Changes EDNS settings on a DNS server.
Changes forwarder settings on a DNS server.
Changes configuration settings for a GlobalNames zone.
Changes settings of a global query block list.
Changes settings for a DNS primary zone.
Updates settings of a query resolution policy on a DNS server.
Modifies recursion settings for a DNS server.
Modifies a recursion scope on a DNS server.
Changes a resource record in a DNS zone.
Begins aging of resource records in a specified DNS zone.
Enables RRL on a DNS server.
Updates the settings of an RRL exception list.
Replaces a list of root hints.
Changes DNS server scavenging settings.
Changes settings for a DNS secondary zone.
Modifies DNS server settings.
Changes settings of a signing key.
Changes settings for a DNS server stub zone.
Updates the virtualization instance on the DNS server.
Configures DNS aging settings for a zone.
Changes delegation settings for a child zone.
Updates a zone transfer policy on a DNS server.
Shows the records in a DNS Server Cache.
Returns a list of key storage providers.
Notifies a DNS server to attempt a search for stale resource records.
Starts a zone transfer for a secondary DNS zone from master servers.
Rolls over a KSK that is waiting for a parent DS update.
Suspends a zone on a DNS server.
Checks the DNS server memory for changes, and writes them to persistent storage.
Tests that a specified computer is a functioning DNS server.
Validates DNSSEC settings for a zone.
Deregisters a DNS server from a DNS application directory partition.
Updates all trust points in a DNS trust anchor zone.
Заметки: Выгрузка DNS-записей с помощью Powershell
Недавно для настройки представлений на серверах Bind мне потребовалась выгрузка DNS-записей с серверов Windows. Несмотря на очевидную простоту задачи на деле все оказалось далеко не так просто и быстро.
Пока разбирался каким образом решать задачу и собрал все подводные камни, натолкнулся на множество интересных статей и ресурсов. Обязательно с вами поделюсь.
Если вам интересны статьи о Powershell, рекомендую обратиться к тегу PowerShell scripting на моем блоге
Выгрузка DNS-записей
Кому сразу нужен код/команды — листайте до пункта Скрипт, а пока разберем саму задачу и теорию.
Задача
Есть сервер Windows с ролью DNS. Есть сервер Bind на Linux с настроенными для различных клиентов представлениями. Нужно с сервера Windows выгрузить (крайне желательно в формате, который знает Bind 1 ) все записи определенной зоны и засунуть в Bind. Вручную копировать не вариант, записей сотни.
Теория
Выгрузить записи нужной вам зоны (или всех зон враз, почему бы и нет) роли Windows Server DNS можно разными путями. Вот основные.
1. Например записи неинтегрированных в AD зон можно просто скопировать из соответствующих файлов в директории C:\Windows\System32\dns. Для AD-integrated зон такой вариант не подойдет.
2. Вполне можно воспользоваться старой доброй утилитой dnscmd, например: