Управление 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
-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
Записи 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
-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+ лет опыта, собственная инфраструктура, сертифицированные инженеры.