Для настройки DNS сервера в Windows Server установите роль DNS Server через Server Manager или PowerShell, создайте прямую и обратную зоны, добавьте нужные записи A, CNAME, MX и настройте пересылку запросов. Без правильного DNS не работает Active Directory, почта и вообще ничего в сети (это не преувеличение).
Установка роли DNS Server
Короче, без DNS никуда. Ставим.
# Устанавливаем роль DNS-сервера
# Если AD уже установлен, DNS обычно ставится вместе с ним
Install-WindowsFeature DNS -IncludeManagementToolsНа самом деле, установка DNS через PowerShell быстрее. Или через Server Manager: Add Roles and Features → Server Roles → DNS Server. Перезагрузка не нужна.
Тут такое дело. Если у вас Active Directory, DNS ставится автоматически при повышении до контроллера домена. Отдельно ставить нужно только для standalone DNS-серверов. По факту, 90% DNS-серверов в корпоративных сетях работают на контроллерах домена.
Проверка установки
# Проверяем что роль установлена
Get-WindowsFeature DNS
# Проверяем что служба DNS запущена
Get-Service DNS
# Открываем консоль DNS
dnsmgmt.mscЕсли честно, установка занимает минуту. Настройка, которая идёт дальше, занимает гораздо больше.
Создание зон DNS
Прямая зона (Forward Lookup Zone)
Прямая зона преобразует имена в IP-адреса. Это основа. Когда компьютер обращается к server01.company.local, DNS ищет запись в прямой зоне и возвращает IP-адрес.
# Создаём первичную зону для нашего домена
# AD-integrated зона реплицируется между контроллерами
Add-DnsServerPrimaryZone -Name "company.local" `
-ReplicationScope "Domain" `
-DynamicUpdate "Secure"
# Для зоны без AD (standalone DNS)
Add-DnsServerPrimaryZone -Name "company.local" `
-ZoneFile "company.local.dns"Вот в чём прикол: AD-integrated зоны хранятся в Active Directory и реплицируются автоматически. Не нужно настраивать трансфер зон. Для доменной среды это единственный правильный вариант.
Кстати, параметр DynamicUpdate важен. «Secure» означает, что обновлять записи могут только авторизованные компьютеры домена. «Nonsecure» позволяет обновлять кому угодно (небезопасно). «None» отключает динамическое обновление (тогда все записи нужно добавлять вручную).
Обратная зона (Reverse Lookup Zone)
Преобразует IP в имена. Многие забывают её создать. А потом удивляются, что nslookup по IP не работает. Знаете что? Без обратной зоны куча вещей ломается. Exchange, например, не сможет получать почту с серверов, которые проверяют reverse DNS.
# Создаём обратную зону для подсети 192.168.1.0/24
# NetworkID задаёт подсеть
Add-DnsServerPrimaryZone -NetworkID "192.168.1.0/24" `
-ReplicationScope "Domain" `
-DynamicUpdate "Secure"
# Для нескольких подсетей создаём несколько зон
Add-DnsServerPrimaryZone -NetworkID "192.168.2.0/24" `
-ReplicationScope "Domain" `
-DynamicUpdate "Secure"
Add-DnsServerPrimaryZone -NetworkID "10.0.0.0/16" `
-ReplicationScope "Domain" `
-DynamicUpdate "Secure"Типы DNS-записей
На самом деле типов записей много, но в повседневной работе используются 5-6. Вот подробный разбор каждого.
Запись A (Address)
Самый простой и частый тип. Связывает имя с IPv4-адресом.
# Запись A - имя в IPv4 адрес
Add-DnsServerResourceRecordA -ZoneName "company.local" `
-Name "web-server" -IPv4Address "192.168.1.100"
# Несколько записей A для одного имени (round-robin балансировка)
Add-DnsServerResourceRecordA -ZoneName "company.local" `
-Name "app" -IPv4Address "192.168.1.101"
Add-DnsServerResourceRecordA -ZoneName "company.local" `
-Name "app" -IPv4Address "192.168.1.102"
# DNS будет чередовать ответы между двумя IPЗапись CNAME (Canonical Name)
Алиас, который указывает на другое имя. Удобно, когда один сервер выполняет несколько ролей.
# CNAME - алиас (псевдоним)
# Указывает на другое имя, а не на IP
Add-DnsServerResourceRecordCName -ZoneName "company.local" `
-Name "www" -HostNameAlias "web-server.company.local"
Add-DnsServerResourceRecordCName -ZoneName "company.local" `
-Name "portal" -HostNameAlias "web-server.company.local"
# Теперь www и portal ведут на web-serverЗапись MX (Mail Exchange)
# MX - почтовый сервер
# Preference задаёт приоритет, меньше = выше
Add-DnsServerResourceRecordMX -ZoneName "company.local" `
-Name "." -MailExchange "mail.company.local" -Preference 10
# Резервный почтовый сервер (приоритет ниже)
Add-DnsServerResourceRecordMX -ZoneName "company.local" `
-Name "." -MailExchange "mail-backup.company.local" -Preference 20Запись PTR (Pointer)
# PTR - обратная запись (IP в имя)
Add-DnsServerResourceRecordPtr -ZoneName "1.168.192.in-addr.arpa" `
-Name "100" -PtrDomainName "web-server.company.local"Запись SRV (Service)
Используется Active Directory для поиска контроллеров домена, LDAP-серверов и других сервисов. Обычно создаётся автоматически.
# Проверяем SRV-записи AD
Resolve-DnsName -Name "_ldap._tcp.company.local" -Type SRV
# Если эти записи отсутствуют, AD работать не будетМой коллега Антон из Ростова полгода мучился с почтой, потому что забыл создать PTR-запись для почтового сервера. Письма уходили в спам, принимающие серверы проверяли reverse DNS и не находили совпадения. Работал на Supermicro SuperServer, шесть месяцев бился с проблемой, а решение заняло 30 секунд.
Настройка пересылки (Forwarders)
DNS-сервер должен знать, куда отправлять запросы, которые не может разрешить сам. Если кто-то запрашивает google.com, а ваш DNS знает только про company.local, запрос нужно переслать.
# Добавляем пересылку на публичные DNS
# Cloudflare и Google как резервный
Set-DnsServerForwarder -IPAddress "1.1.1.1","8.8.8.8"
# Проверяем настроенные пересылки
Get-DnsServerForwarder
# Удаляем старые пересылки
Remove-DnsServerForwarder -IPAddress "old.dns.ip" -ForceЕсли честно, для корпоративной сети лучше пересылать на DNS провайдера. Задержка меньше. Публичные DNS (Google, Cloudflare) как резерв. А ещё можно использовать DNS с фильтрацией (Yandex DNS 77.88.8.88 блокирует вредоносные сайты).
Условная пересылка (Conditional Forwarders)
Когда нужно резолвить имена из другого домена. Кстати, это частый сценарий при слияниях компаний или при доверительных отношениях между лесами AD.
# Все запросы к partner.local пересылаем на их DNS
Add-DnsServerConditionalForwarderZone -Name "partner.local" `
-MasterServers "10.20.30.1","10.20.30.2"
# Для AD-integrated (реплицируется на все DNS-серверы домена)
Add-DnsServerConditionalForwarderZone -Name "partner.local" `
-MasterServers "10.20.30.1" `
-ReplicationScope "Forest"Грубо говоря, условная пересылка говорит DNS-серверу: «если кто-то спрашивает про partner.local, не пересылай на Google, а спроси вот этот конкретный сервер». Просто и эффективно.
Диагностика DNS
Знаете что, 90% сетевых проблем это DNS. Вот инструменты для диагностики.
# Проверяем разрешение имени
Resolve-DnsName -Name "web-server.company.local" -Type A
# Проверяем с указанием конкретного DNS-сервера
Resolve-DnsName -Name "web-server.company.local" -Server "192.168.1.10"
# Проверяем SOA-запись зоны
Resolve-DnsName -Name "company.local" -Type SOA
# Очищаем кэш DNS на сервере
Clear-DnsServerCache
# Очищаем кэш DNS на клиенте
ipconfig /flushdns
# Смотрим статистику DNS-сервера
# Много запросов NXDOMAIN может означать проблемы
Get-DnsServerStatistics
# Проверяем все зоны на ошибки
dcdiag /test:dns /vА ещё включите DNS-логирование для отладки. Server Manager → DNS → правой кнопкой по серверу → Properties → Debug Logging. Но не оставляйте надолго, лог растёт быстро. По факту, за день активной работы лог может занять несколько гигабайт.
Виктория, сетевой инженер из Санкт-Петербурга, настраивала DNS на двух контроллерах домена (Lenovo ThinkSystem SR250). Пользователи жаловались на медленный интернет. Оказалось, один из DNS-серверов пересылал запросы на несуществующий IP. Половина запросов таймаутилась. Нашла за 5 минут через Get-DnsServerForwarder.
Безопасность DNS
DNS без защиты это приглашение для атак. Основные меры:
- Используйте Secure Dynamic Updates (обновлять записи могут только авторизованные компьютеры)
- Ограничьте трансфер зон (только между вашими DNS-серверами)
- Включите DNS-логирование для аудита
- Рассмотрите DNSSEC для критичных зон
- Заблокируйте рекурсивные запросы от внешних клиентов
# Ограничиваем трансфер зоны только на указанные серверы
Set-DnsServerPrimaryZone -Name "company.local" `
-SecureSecondaries "TransferToSecureServers" `
-SecondaryServers "192.168.1.2","192.168.1.3"
# Отключаем рекурсию для внешних запросов (если сервер доступен извне)
Set-DnsServerRecursion -Enable $falseГрубо говоря, DNS это фундамент сети. Если его скомпрометируют, можно перенаправить пользователей куда угодно. Фишинг, перехват данных, всё что угодно. DNS spoofing это одна из самых простых и эффективных атак.
Типичные ошибки при настройке DNS
За 10 лет работы я видел одни и те же ошибки десятки раз. Вот список того, что не надо делать.
Ошибка 1: использование .local в публичном DNS. Домен .local работает только внутри сети. Если у вас company.local, а вам нужен публичный домен для сайта и почты, используйте company.ru или company.com. Внутренний и внешний домены могут (и должны) быть разными.
Ошибка 2: один DNS-сервер на всю компанию. Упал сервер, легла вся сеть. Всегда ставьте минимум два DNS-сервера. Это занимает 10 минут, а спасает от часов простоя.
Ошибка 3: забытая обратная зона. Без PTR-записей не работает nslookup по IP, Exchange может отвергать почту, а некоторые приложения вообще отказываются функционировать.
Ошибка 4: динамическое обновление в режиме Nonsecure. Любой комп в сети может зарегистрировать любую запись. Это приглашение для атаки DNS spoofing. Всегда используйте Secure Dynamic Updates в доменной среде.
Ошибка 5: не обновлённые пересылки после смены провайдера. Компания сменила интернет-провайдера, а DNS-сервер всё ещё пересылает запросы на DNS старого провайдера. Результат: медленное разрешение имён или полный отказ.
Тут такое дело: все эти ошибки элементарно исправляются. Но если не знать о них, можно потратить часы на диагностику «непонятных» проблем.
Рекомендации по архитектуре DNS
Вот в чём прикол: правильная архитектура DNS предотвращает большинство проблем.
- Минимум два DNS-сервера для отказоустойчивости (оба контроллера домена)
- Клиенты должны использовать оба DNS-сервера (первичный и вторичный)
- DNS-сервер не должен указывать на себя как на единственный DNS (петля при сбое)
- Пересылки настраивайте на обоих серверах одинаково
- Используйте AD-integrated зоны для автоматической репликации
# Настройка сетевого интерфейса DNS-сервера
# Первый DNS - партнёрский контроллер, второй - сам сервер
# НЕ ставьте 127.0.0.1 как единственный DNS!
Set-DnsClientServerAddress -InterfaceAlias "Ethernet" `
-ServerAddresses "192.168.1.11","192.168.1.10"Разве это не логично? Если DNS-сервер указывает только на себя, а потом падает, все клиенты, которые используют его как DNS, тоже останутся без разрешения имён.
DNS и Split-Brain: внутренние и внешние зоны
Тут такое дело: если ваша компания использует один и тот же домен для внутренней сети и для публичного сайта (например, company.ru), вам нужна конфигурация split-brain DNS.
Как это работает: на внутреннем DNS-сервере создаёте зону company.ru с внутренними IP-адресами. На публичном DNS (у регистратора домена) те же имена указывают на внешние IP.
# Создаём внутреннюю зону для публичного домена
Add-DnsServerPrimaryZone -Name "company.ru" `
-ReplicationScope "Domain" `
-DynamicUpdate "Secure"
# Добавляем внутренние записи
Add-DnsServerResourceRecordA -ZoneName "company.ru" `
-Name "portal" -IPv4Address "192.168.1.50"
# Внутри сети portal.company.ru = 192.168.1.50
# Снаружи portal.company.ru = 85.143.xxx.xxx (публичный IP)Вот в чём прикол: без split-brain внутренние пользователи будут обращаться к сайту company.ru через интернет (выход наружу, потом обратно через файрвол). С split-brain они идут напрямую к серверу по внутреннему IP. Быстрее и надёжнее.
Короче, если у вас есть корпоративный портал или внутренний сайт на том же домене, что и публичный, split-brain DNS обязателен. Без него трафик ходит кругами, а при отключении интернета внутренние ресурсы становятся недоступны.
Автоматизация управления DNS через PowerShell
Если честно, для рутинных операций с DNS, PowerShell экономит кучу времени. Вот несколько полезных скриптов для повседневной работы.
# Массовое добавление записей из CSV-файла
# CSV формат: Name,IP
# web1,192.168.1.101
# web2,192.168.1.102
Import-Csv "D:dns-records.csv" | ForEach-Object {
Add-DnsServerResourceRecordA -ZoneName "company.local" `
-Name $_.Name -IPv4Address $_.IP
Write-Host "Добавлена запись: $($_.Name) -> $($_.IP)"
}
# Поиск всех записей определённого типа
Get-DnsServerResourceRecord -ZoneName "company.local" -RRType A | Format-Table HostName, RecordData
# Экспорт всех DNS-записей в файл для документации
Get-DnsServerResourceRecord -ZoneName "company.local" | Export-Csv "D:dns-export.csv" -NoTypeInformationНа самом деле, при переезде на новый сервер DNS экспорт и импорт записей через PowerShell спасает от ручного ввода сотен записей. Мой знакомый Роман, инженер в телеком-компании (Supermicro SuperServer на Xeon E-2378), мигрировал DNS с Windows Server 2016 на 2022. Экспортировал 340 записей в CSV, импортировал на новый сервер одним скриптом. По факту, операция заняла 5 минут вместо нескольких часов ручной работы.
Лицензирование
Тут такое дело: DNS это сервис, который работает 24/7 без выходных. Если он ляжет, вся сеть встанет. Поэтому два DNS-сервера это не рекомендация, а железное правило. Настройте мониторинг, настройте алерты, и DNS будет работать годами без проблем.
Лицензирование
Роль DNS Server входит в Windows Server, отдельная лицензия не нужна. Но сам сервер должен быть лицензирован. Ключ для Windows Server можно приобрести в keytrust24.store. Доставка моментальная, есть все версии: Standard и Datacenter для Windows Server 2019, 2022 и 2025. Активация занимает пару минут, а DNS-роль вы настроите ещё за полчаса. По факту, от покупки ключа до работающего DNS-сервера можно уложиться в один рабочий день.



