В этой статье мы рассмотрим два способа организации условного разрешения имен в DNS сервере на Windows Server 2016: DNS conditional forwarding и DNS policy. Эти технологии позволяют настроить условное разрешение DNS имен в зависимости от запрошенного имени, IP адреса и местоположения клиента, времени суток и т.д.
Условная пересылка DNS (Conditional Forwarding) позволяет перенаправить DNS запросы об определенном домене на определенные DNS-сервера. Обычно Conditional Forwarders используется, когда нужно настроить быстрое разрешение имен между несколькими внутренними приватными доменами, или вы не хотите, чтобы DNS запросы с вашего сервера пересылались через публичную сеть Интернет. В этом случае вы можете создать на DNS сервере правило DNS пересылки DNS запросов для определенной доменной зоны (только !!!) на определенный DNS сервер.
Настройка DNS Conditional Forwarder в Windows Server
Попробуем настроить условное перенаправление DNS запросов для определенной доменной зоны на Windows Server 2016. Например, я хочу, чтобы все DNS запросы к зоне corp.winitpro.ru пересылались на DNS сервер 10.1.10.11.
- Запустите консоль управления DNS (
dnsmgmt.msc
); - Разверните ваш DNS сервер, щелкните правой кнопкой по разделу Conditional Forwarders и выберите New Conditional Forwarder;
- В поле DNS domain укажите FQDN имя домена, для которого нужно включить условную пересылку;
- В поле IP addresses of the master servers укажите IP адрес DNS сервера, на который нужно пересылать все запросы для указанного пространства имен;
- Если вы хотите хранить правило условной переадресации не только на этом DNS сервере, вы можете интегрировать его в AD. Выберите опцию “Store this conditional forwarder in Active Directory”;
- Выберите правило репликации записи conditional forwarding (All DNS servers in this forest, All DNS servers in this domain или All domain controllers in this domain).
Настройка DNS Conditional Forwarding с помощью PowerShell
Вы можете создать правило Conditional Forward для определенной DNS зоны с помощью PowerShell. Воспользуйтесь командлетом Add-DnsServerConditionalForwarderZone:
Add-DnsServerConditionalForwarderZone -Name dmz.winitpro.ru -MasterServers 192.168.1.11,192.168.101.11 -ReplicationScope Forest
Чтобы вывести список DNS Conditional Forwarders на определенном сервере, выполните следующий PowerShell скрипт:
$DNSServer = "DC01"
$Zones = Get-WMIObject -Computer $DNSServer -Namespace "root\MicrosoftDNS" -Class "MicrosoftDNS_Zone"
$Zones | Select-Object Name,MasterServers,DsIntegrated,ZoneType | where {$_.ZoneType -eq "4"} | ft -AutoSize
Фильтрация запросов DNS, политики разрешения имен в Windows Server 2016
В Windows Server 2016 появилась новая фича в службе DNS сервера – DNS политики. DNS политики позволяют настроить DNS сервер так, чтобы он возвращал различные ответы на DNS запросы в зависимости от местоположения клиента (с какого IP адреса или подсети пришел запрос), интерфейса DNS сервера, времени суток, типа запрошенной записи (A, CNAME, PTR, MX) и т.д. DNS политики в Windows Server 2016 позволяют реализовать сценарии балансировки нагрузки, фильтрации DNS трафика, возврата DNS записей в зависимости от геолокации (IP адреса клиента) и многие другие сложные сценарии.
Вы можете создать политику как на уровне DNS сервера, так и на уровне всей зоны. Настройка DNS политик в Windows Server 2016 возможна только из командной строки PowerShell.
Попробуем создать простую политику, которая позволяет вернуть разный ответ на DNS запрос в зависимости от геолокации клиента. Допустим, вы хотите, чтобы клиенты в каждом офисе использовали собственный прокси на площадке. Вы создали политику назначения прокси в домене (на всех клиентах будет указано proxy.winitpro.ru). Но клиент из каждого офиса должен резолвить этот адрес по-разному, чтобы использовать для доступа свой локальный прокси-сервер.
Я создал 3 подсети для разных офисов компании:
Add-DnsServerClientSubnet -Name "MSK_DNS_Subnet" -IPv4Subnet "192.168.1.0/24"
Add-DnsServerClientSubnet -Name "EKB_DNS_Subnet" -IPv4Subnet "192.168.11.0/24"
Add-DnsServerClientSubnet -Name "SPB_DNS_Subnet" -IPv4Subnet "192.168.21.0/24"
-ComputerName dc01
.Чтобы вывести список всех IP подсетей клиентов, выполните:
Get-DnsServerClientSubnet
Теперь нужно для каждого офиса создать отдельную DNS область:
Add-DnsServerZoneScope -ZoneName “winitpro.ru” -Name “MSKZoneScope”
Add-DnsServerZoneScope -ZoneName “winitpro.ru” -Name “EKBZoneScope”
Add-DnsServerZoneScope -ZoneName “winitpro.ru” -Name “SPBZoneScope”
Следующие команды добавят 3 DNS записи с одним именем, но указывающие на разные IP адреса в разных областях DNS:
Add-DnsServerResourceRecord -ZoneName “winitpro.ru” -A -Name “proxy” -IPv4Address “192.168.1.10” -ZoneScope “MSKZoneScope”
Add-DnsServerResourceRecord -ZoneName “winitpro.ru” -A -Name “proxy” -IPv4Address “192.168.11.10” -ZoneScope “EKBZoneScope”
Add-DnsServerResourceRecord -ZoneName “winitpro.ru” -A -Name “proxy” -IPv4Address “192.168.21.10” -ZoneScope “SPBZoneScope”
Get-DnsServerResourceRecord -ZoneName “winitpro.ru” -ZoneScope SPBZoneScope
Теперь нужно создать DNS политики, которые свяжут IP подсети, DNS области и A записи.
Add-DnsServerQueryResolutionPolicy -Name “MSKResolutionPolicy” -Action ALLOW -ClientSubnet “eq,MSK_DNS_Subnet” -ZoneScope “MSKZoneScope,1” -ZoneName “winitpro.ru” –PassThru
Add-DnsServerQueryResolutionPolicy -Name “EKBResolutionPolicy” -Action ALLOW -ClientSubnet “eq,EKB_DNS_Subnet” -ZoneScope “EKBZoneScope,1” -ZoneName “winitpro.ru” -PassThru
Add-DnsServerQueryResolutionPolicy -Name “SPBResolutionPolicy” -Action ALLOW -ClientSubnet “eq,SPB_DNS_Subnet” -ZoneScope “SPBZoneScope,1” -ZoneName “winitpro.ru” –PassThru
-
-Action ALLOW
-
-Action DENY
-
-Action IGNORE
Можно использовать следующие параметры в фильтре DNS:
-InternetProtocol "EQ,IPv4,NE,IPv6"
-TransportProtocol "EQ,UDP,TCP"
-ServerInterfaceIP "EQ,192.168.1.21"
-QType "EQ,A,AAAA,NE,PTR"
-TimeOfDay "EQ,9:00-18:00"
Вывести список всех DNS политик для DNS зоны на сервере можно так:
Get-DnsServerQueryResolutionPolicy -ZoneName winitpro.ru
Теперь с устройств из различных офисов проверьте, что DNS сервер на один и тот же запрос возвращает различные IP адреса прокси:
nslookup proxy.winitpro.ru
Можно запретить DNS серверу возвращать DNS адреса для определенного пространства имен (домена):
Add-DnsServerQueryResolutionPolicy -Name 'BlockFidhingPolicy' -Action IGNORE -FQDN "EQ,*.cberbank.ru"
Awesome!! Thanks for your help!!
Что-то совсем слабенько написано. Не понятно зачем было объединять в одну статью две темы. Думаю, про политики DNS можно написать отдельную статью.
Зачем такие сложности по выводу информации об Conditional Forwarder? Все можно одной строкой сделать «Get-DnsServerZone | ? ZoneType -eq «Forwarder» | select zonename, MasterServers, IsDsIntegrated» При этом у командлета есть -computername.
Спосибо за статью, но есть вопрос. В статье сказано, что «Эти команды придется выполнить на всех DNS серверах, на которых должна работать условная политика DNS. Эти записи не реплицируются в DNS и хранятся локально в реестре DNS сервера.», вопрос будут ли политики отрабатывать на DNS-ах RODC, расположенных в сайтах филиалов?
Нужно будет применить правила и для каждого DNS сервера RODC
Для зон интегрированных с AD и для Secondary DNS похоже верно следующее:
1. ZoneScope и записи в нем реплицируется между DC и DNS
2. ClientSubnet и DNS policy не реплицируется и хранятся локально в реестре на DNS сервере, т.е. их надо создавать на каждом DNS сервере
https://special.habrahabr.ru/microsoft/hybridlaunch/article/748109/
Спасибо за статью!
но попробовал у себя развернь — но все как говорится пошло не по плану)
есть домен с интегрированным dns
есть зона company.com — сдела в этой зоне scope
добавил подсеть, добавил запись и вкл политику
клиент резовит эту запись корректно, но все запросы в этой зоне отваливаются. Где черная кошка прячется — помогите?)
Add-DnsServerClientSubnet -Name «vpnsub» -IPv4Subnet «172.21.27.0/24»
Add-DnsServerZoneScope -ZoneName «company.local» -Name «vpn»
Add-DnsServerResourceRecord -ZoneName «company.local» -A -Name «portal» -IPv4Address «10.0.0.12» -ZoneScope «vpn»
Add-DnsServerQueryResolutionPolicy -Name «vpnpolicedns» -Action ALLOW -ClientSubnet «eq,vpnsub» -ZoneName «company.local» -ZoneScope «vpn»
Фича работает только на том сервере, где вы ее включили (нужно включать на всех сервера если хотите чтобы работало со всех клиентов). Вы обращаетесь через nslookup к тому серверу, где настроили зону?
Все верно, не работают другие DNS записи в зоне company.com. По политике все корректно отрабатывает, но на DNS сервере в зоне company.com есть другие записи, они становятся не доступными как только включаем DnsServerQueryResolutionPolicy
Такая же ерунда у меня. Как-то победили ее?
Сам спросил — сам отвечу)) C коллегой занимались решением вопроса и он нашел решение проблемы — добавить еще одно условие в политику (см. последний параметр «-fqdn» у команд):
Add-DnsServerQueryResolutionPolicy -Name «MSKResolutionPolicy» -Action ALLOW -ClientSubnet «eq,MSK_DNS_Subnet» -ZoneScope «MSKZoneScope,1» -ZoneName «winitpro.ru» –PassThru -Fqdn «eq,proxy.winitpro.ru»
Add-DnsServerQueryResolutionPolicy -Name «EKBResolutionPolicy» -Action ALLOW -ClientSubnet «eq,EKB_DNS_Subnet» -ZoneScope «EKBZoneScope,1» -ZoneName «winitpro.ru» -PassThru -Fqdn «eq,proxy.winitpro.ru»
Add-DnsServerQueryResolutionPolicy -Name «SPBResolutionPolicy» -Action ALLOW -ClientSubnet «eq,SPB_DNS_Subnet» -ZoneScope «SPBZoneScope,1» -ZoneName «winitpro.ru» –PassThru -Fqdn «eq,proxy.winitpro.ru»
При такой конфигурации политики другие DNS-записи в зоне winitpro.ru продолжать резолвится как есть и только запись, для которой есть политика (в нашем случае proxy.winitpro.ru) будет резолвится по разному для клиентов из разных сетей согласно параметрам.
Если же этого параметра нет, то клиентам из сетей, на которые назначена политика для резолва в зоне winitpro.ru доступна только запись proxy.winitpro.ru и никакие другие больше
Возможно стоит отразить это в статье.
Здравствуйте!
Подскажите пожалуйста в чем может быть проблема: есть два DNS сервера обслуживающих разные зоны, между ними настроена пересылка. Сервера находятся в разных сетях, объединенных VPN-тоннелями, причем тоннелей два, основной и резервный (регулируется настройкой distance в маршрутах на mikrotik).
При падении основного туннеля трафик отправляется в резервный тоннель, но при этом перестает работать пересылка DNS запросов. Лечится очисткой кеш на DNS серверах или проходит само, через какое-то время.
Можно это как-то исправить?
Мне кажется, что проблема не с DNS, а с сетью. Посмотрите есть ли на DNS сервере маршрут и пинг до второго сервера после падения первого тунеля. И не совсем понятно в вашей конфигурации переключение тунелей происходит прозрачно? Для клиентов ничего не меняется (маршрут по умолчанию, шлюз)?
Это получается Split DNS от Microsoft… спс!