Server 24 марта 2026 9 мин чтения
ЕС
Евгений Семёнов
Генеральный директор ООО АйТи Фреш · 15+ лет в IT

Управление DNS-записями и зонами из PowerShell в Windows Server

Управление DNS-записями и зонами из PowerShell в Windows Server

Служба DNS является одним из краеугольных камней инфраструктуры Active Directory и сетевых сервисов любой организации. Когда количество зон и записей исчисляется сотнями, ручное администрирование через графическую консоль dnsmgmt.msc становится крайне неэффективным. PowerShell предоставляет модуль DnsServer, содержащий свыше 100 командлетов для полноценного управления DNS-сервером: от создания зон до массового импорта записей из CSV-файла. В этом руководстве мы подробно разберём все ключевые операции с DNS через командную строку.

Установка и проверка модуля DnsServer

Модуль DnsServer входит в состав средств удалённого администрирования (RSAT). На контроллере домена с установленной ролью DNS Server он доступен автоматически. На рабочей станции Windows 10/11 его потребуется установить отдельно.

Проверьте наличие модуля в системе:

Get-Module DnsServer -ListAvailable

Если модуль отсутствует, установите компонент RSAT через PowerShell с правами администратора:

Add-WindowsCapability -Online -Name Rsat.Dns.Tools~~~~0.0.1.0

На Windows Server добавьте компонент через Server Manager или командой:

Install-WindowsFeature -Name RSAT-DNS-Server

После установки убедитесь, что модуль загружается корректно, и посмотрите список доступных командлетов:

Import-Module DnsServer
Get-Command -Module DnsServer | Measure-Object
Модуль DnsServer поддерживает удалённое подключение к любому DNS-серверу в домене через параметр -ComputerName. Устанавливать RSAT на каждый сервер не нужно — достаточно одной административной рабочей станции.

Просмотр существующих DNS-зон

Перед внесением изменений полезно получить полную картину текущей конфигурации. Чтобы вывести все зоны, зарегистрированные на DNS-сервере, выполните:

Get-DnsServerZone -ComputerName dc01

Результат покажет имя зоны, тип (Primary, Secondary, Stub), способ хранения (AD-интегрированная или файловая) и статус динамических обновлений. Для фильтрации только прямых зон используйте:

Get-DnsServerZone -ComputerName dc01 | Where-Object { $_.IsReverseLookupZone -eq $false -and $_.ZoneName -notlike "*.arpa" }

Это удобно при инвентаризации: вы сразу видите, какие домены обслуживает сервер, и можете экспортировать список для документации.

Создание DNS-зон через PowerShell

Для создания новой первичной зоны, интегрированной с Active Directory и реплицируемой на все DNS-серверы леса, используйте команду:

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

Параметр -ReplicationScope принимает значения: Forest (весь лес AD), Domain (текущий домен) или Legacy (совместимость со старыми контроллерами). Для зоны обратного просмотра укажите подсеть:

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

Создание вторичной (secondary) зоны с указанием мастер-сервера:

Add-DnsServerSecondaryZone -Name "partner.local" -ZoneFile "partner.local.dns" -MasterServers 192.168.1.10

Стаб-зона (stub), хранящая только NS-записи и SOA:

Add-DnsServerStubZone -Name "branch.contoso.local" -MasterServers 10.10.1.5 -ReplicationScope "Domain"
При создании зон с реплицируемой областью Forest убедитесь, что между доменами леса настроена корректная репликация AD. Ошибки репликации приведут к рассинхронизации DNS-данных и труднодиагностируемым сбоям разрешения имён.

Управление записями типа A и AAAA

Запись типа A связывает имя хоста с IPv4-адресом. Это наиболее часто используемый тип записи в корпоративной среде. Создание записи:

Add-DnsServerResourceRecordA -ZoneName "contoso.local" -Name "fileserver01" -IPv4Address "10.20.30.50" -ComputerName dc01

Для IPv6 используется аналогичный командлет для записей AAAA:

Add-DnsServerResourceRecordAAAA -ZoneName "contoso.local" -Name "fileserver01" -IPv6Address "fd00::50"

Просмотр всех A-записей в конкретной зоне:

Get-DnsServerResourceRecord -ZoneName "contoso.local" -RRType A -ComputerName dc01

Чтобы найти конкретную запись по имени:

Get-DnsServerResourceRecord -ZoneName "contoso.local" -Name "fileserver01" -RRType A

Записи CNAME, MX и SRV

Псевдоним (CNAME) указывает на каноническое имя другого хоста. Это удобно для балансировки и абстрагирования сервисов от конкретных серверов:

Add-DnsServerResourceRecordCName -ZoneName "contoso.local" -Name "portal" -HostNameAlias "webserver01.contoso.local"

Запись MX определяет почтовый сервер для домена с указанием приоритета:

Add-DnsServerResourceRecordMX -ZoneName "contoso.local" -Name "." -MailExchange "mail.contoso.local" -Preference 10

Запись SRV используется для обнаружения сервисов (Kerberos, LDAP, SIP и других):

Add-DnsServerResourceRecord -ZoneName "contoso.local" -Srv -Name "_sip._tcp" -DomainName "sipserver.contoso.local" -Priority 0 -Weight 5 -Port 5060

Просмотр всех MX-записей зоны:

Get-DnsServerResourceRecord -ZoneName "contoso.local" -RRType MX
При создании CNAME-записи убедитесь, что целевое имя (alias target) завершается точкой или содержит полный FQDN. Иначе DNS-сервер может добавить к нему суффикс зоны, что приведёт к некорректному разрешению.

Записи PTR и обратные зоны

Обратные записи (PTR) обеспечивают разрешение IP-адреса в имя хоста. Они критически важны для работы почтовых серверов, систем мониторинга и ряда приложений, выполняющих reverse DNS lookup.

Создайте PTR-запись в соответствующей обратной зоне:

Add-DnsServerResourceRecordPtr -ZoneName "30.20.10.in-addr.arpa" -Name "50" -PtrDomainName "fileserver01.contoso.local"

Здесь 50 — это последний октет IP-адреса 10.20.30.50. Проверить, что запись создана корректно, можно командой:

Resolve-DnsName -Name "10.20.30.50" -Type PTR -Server dc01

Для массового создания PTR-записей по всем существующим A-записям можно использовать скрипт:

$records = Get-DnsServerResourceRecord -ZoneName "contoso.local" -RRType A
foreach ($r in $records) {
    $ip = $r.RecordData.IPv4Address.ToString()
    $lastOctet = $ip.Split('.')[-1]
    $fqdn = "$($r.HostName).contoso.local"
    Add-DnsServerResourceRecordPtr -ZoneName "30.20.10.in-addr.arpa" `
        -Name $lastOctet -PtrDomainName $fqdn -ErrorAction SilentlyContinue
}

Изменение существующих DNS-записей

Модификация записей в PowerShell требует особого подхода: командлет Set-DnsServerResourceRecord принимает два объекта — старую и новую версию записи. Сначала получите текущую запись, затем создайте её копию, измените нужное свойство и примените обновление:

$old = Get-DnsServerResourceRecord -ZoneName "contoso.local" -Name "fileserver01" -RRType A
$new = $old.Clone()
$new.RecordData.IPv4Address = [System.Net.IPAddress]::Parse("10.20.30.55")
Set-DnsServerResourceRecord -ZoneName "contoso.local" -OldInputObject $old -NewInputObject $new

Этот метод гарантирует атомарность изменения: DNS-сервер заменяет запись целиком, без промежуточного удаления. Аналогичным способом можно изменить TTL записи:

$old = Get-DnsServerResourceRecord -ZoneName "contoso.local" -Name "portal" -RRType CName
$new = $old.Clone()
$new.TimeToLive = [System.TimeSpan]::FromMinutes(30)
Set-DnsServerResourceRecord -ZoneName "contoso.local" -OldInputObject $old -NewInputObject $new
Метод .Clone() создаёт поверхностную копию объекта. Если вы случайно измените свойство в переменной $old вместо $new, командлет завершится ошибкой, поскольку старый объект не будет найден на сервере. Всегда работайте с переменной $new.

Удаление DNS-записей и зон

Для удаления конкретной записи укажите её имя, тип и зону:

Remove-DnsServerResourceRecord -ZoneName "contoso.local" -RRType A -Name "fileserver01" -Force

Параметр -Force подавляет запрос подтверждения, что полезно при автоматизации. Удаление целой зоны:

Remove-DnsServerZone -Name "old.contoso.local" -ComputerName dc01 -Force

Для безопасного удаления устаревших записей можно предварительно проверить, какие хосты больше не отвечают на ping:

$stale = Get-DnsServerResourceRecord -ZoneName "contoso.local" -RRType A | Where-Object {
    -not (Test-Connection -ComputerName $_.RecordData.IPv4Address -Count 1 -Quiet)
}
$stale | ForEach-Object {
    Write-Host "Удаляю: $($_.HostName) -> $($_.RecordData.IPv4Address)"
    Remove-DnsServerResourceRecord -ZoneName "contoso.local" -InputObject $_ -Force
}

Массовый импорт записей из CSV

Одно из главных преимуществ PowerShell — автоматизация рутинных операций. Представьте, что при миграции нужно создать 200 DNS-записей. Подготовьте CSV-файл dns_records.csv со следующей структурой:

Hostname,IPAddress
print-srv01,10.20.30.60
print-srv02,10.20.30.61
app-node01,10.20.30.70
app-node02,10.20.30.71
monitoring,10.20.30.80

Затем выполните импорт одной командой:

Import-Csv "C:\Scripts\dns_records.csv" | ForEach-Object {
    Add-DnsServerResourceRecordA -ZoneName "contoso.local" `
        -Name $_.Hostname -IPv4Address $_.IPAddress -ComputerName dc01
    Write-Host "Создана запись: $($_.Hostname) -> $($_.IPAddress)" -ForegroundColor Green
}

Для экспорта всех текущих записей зоны в CSV (для резервного копирования или аудита):

Get-DnsServerResourceRecord -ZoneName "contoso.local" -RRType A -ComputerName dc01 |
    Select-Object HostName, @{N='IP';E={$_.RecordData.IPv4Address}}, TimeToLive, Timestamp |
    Export-Csv -Path "C:\Backup\dns_export.csv" -NoTypeInformation -Encoding UTF8
Всегда создавайте экспорт записей перед массовыми операциями. В случае ошибки вы сможете быстро восстановить исходное состояние, импортировав данные из резервной копии.

Настройка пересылки DNS-запросов (Forwarders)

Условная пересылка (Conditional Forwarder) позволяет направлять запросы для определённых доменов на указанные серверы. Это необходимо при взаимодействии с партнёрскими организациями или облачными сервисами:

Add-DnsServerConditionalForwarderZone -Name "partner.com" -MasterServers 203.0.113.10,203.0.113.11 -ReplicationScope "Forest"

Просмотр настроенных пересылок:

Get-DnsServerZone -ComputerName dc01 | Where-Object { $_.ZoneType -eq "Forwarder" }

Глобальные форвардеры (серверы, на которые перенаправляются все неразрешённые запросы) настраиваются так:

Set-DnsServerForwarder -IPAddress "8.8.8.8","1.1.1.1" -ComputerName dc01

Проверить текущие форвардеры:

Get-DnsServerForwarder -ComputerName dc01

Диагностика и устранение проблем DNS

При возникновении проблем с разрешением имён PowerShell предоставляет мощные средства диагностики. Проверка конкретного имени с указанием сервера:

Resolve-DnsName -Name "fileserver01.contoso.local" -Server dc01 -Type A

Очистка кэша DNS на сервере:

Clear-DnsServerCache -ComputerName dc01 -Force

Просмотр содержимого серверного кэша:

Get-DnsServerCache -ComputerName dc01
Show-DnsServerCache -ComputerName dc01

Проверка статистики DNS-сервера для выявления аномалий:

Get-DnsServerStatistics -ComputerName dc01 | Select-Object -ExpandProperty QueryStatistics

Для мониторинга в реальном времени включите аналитический журнал:

Set-DnsServerDiagnostics -All $true -ComputerName dc01
Включение полной диагностики на высоконагруженном DNS-сервере может существенно повлиять на производительность и быстро заполнить диск журнальными файлами. Используйте -All $true только для временной отладки, после чего отключите командой Set-DnsServerDiagnostics -All $false.

Автоматизация очистки устаревших записей (Scavenging)

Со временем в DNS накапливаются устаревшие записи от компьютеров, которые были выведены из эксплуатации. Механизм Scavenging автоматически удаляет такие записи. Настройка на уровне сервера:

Set-DnsServerScavenging -ComputerName dc01 -ScavengingState $true -ScavengingInterval 7.00:00:00 -RefreshInterval 7.00:00:00 -NoRefreshInterval 7.00:00:00

Активация scavenging для конкретной зоны:

Set-DnsServerZoneAging -ZoneName "contoso.local" -Aging $true -ComputerName dc01

Просмотр настроек старения записей:

Get-DnsServerZoneAging -ZoneName "contoso.local" -ComputerName dc01

Для принудительного запуска очистки вручную:

Start-DnsServerScavenging -ComputerName dc01 -Force

Грамотное управление DNS-инфраструктурой через PowerShell позволяет сократить время на рутинные операции в десятки раз, минимизировать человеческий фактор при массовых изменениях и обеспечить аудируемость всех действий. Если вашей компании требуется профессиональное администрирование серверной инфраструктуры, включая Active Directory, DNS, DHCP и групповые политики, специалисты IT-аутсорсинговой компании ITfresh готовы взять эти задачи на себя — от разовой настройки до полного сопровождения.

Официальная документация: Microsoft Learn — Windows Server, Microsoft Learn — PowerShell

Часто задаваемые вопросы

Что такое Управление DNS-записями и зонами из PowerShell в Windows Server?

Управление DNS-записями и зонами из PowerShell в Windows Server — это важный аспект системного администрирования, который позволяет настроить и оптимизировать работу IT-инфраструктуры. В данной статье подробно рассматриваются все ключевые моменты.

Как правильно настроить Управление DNS-записями и зонами из PowerShell в Windows Server?

Для корректной настройки Управление DNS-записями и зонами из PowerShell в Windows Server необходимо следовать пошаговой инструкции, представленной в статье выше. Важно учитывать особенности вашей инфраструктуры и требования безопасности.

Какие типичные ошибки возникают при работе с Управление DNS-записями и зонами из PowerShell в Windows Server?

Наиболее частые ошибки при работе с Управление DNS-записями и зонами из PowerShell в Windows Server: некорректная конфигурация, недостаточные права доступа и несовместимость версий. Рекомендуем обратиться к специалистам ITFresh для профессиональной настройки.

ООО АйТи Фреш

Возьмём это на себя

Настройка и администрирование — наша ежедневная работа. 15+ лет опыта, собственная инфраструктура, сертифицированные инженеры.

15+лет опыта
25+клиентов
8серверов Dell