СЕРГЕЙ ЯРЕМЧУК
Функция DNS Policies
в Windows Server 2016 Technical Preview
Одним из интересных нововведений в DNS-сервере, входящем в состав Windows Server 2016 Technical Preview 2, стало появление политик DNS (DNS Policies), позволяющих контролировать обработку запросов в зависимости от параметров клиента – IP-адреса клиента или подсети, IP-адреса интерфейса, принявшего DNS-запрос, домена, протокола (TCP или UDP), типа запроса (A, SRV, TXT...) и времени суток
Политики можно создавать на уровне сервера или зоны, все критерии можно комбинировать. В итоге мы получаем возможность очень просто реализовать ряд популярных сценариев – распределения трафика в зависимости от времени суток или региона посетителя, балансировки нагрузки, Split-brain DNS (различные сайты для внешних и внутренних пользователей), игнорирования запросов от определенных клиентов.
DNS Manager не предлагает (во всяком случае, пока) настроек, связанных с DNS Policies. Для создания и управления политиками следует использовать новые командлеты модуля DNSServer v.2:
- *-DnsServerQueryResolutionPolicy (собственно управление политиками),
- *-DnsServerZoneTransferPolicy (политика передачи зоны на уровне сервера или на уровне зоны),
- Enable|Disable-DnsServerPolicy (включение или отключение политики полностью или для какой-то зоны).
Например, компания имеет отдельную версию сайта для локальных пользователей, остальные посетители должны получать IP-адрес общего сайта. Реализуем такую политику.
Указываем клиентскую подсеть. В дальнейшем ее пользователи будут получать «свой» IP:
PS> Add-DnsServerClientSubnet -Name "LocalSubnet" -IPv4Subnet 192.168.0.0/24
Добавляем область:
PS> Add-DnsServerZoneScope -ZoneName "example.com" -Name "LocalZoneScope"
И создаем две DNS-записи, один IP будем выдавать для локальной зоны, вторая общая.
PS> Add-DnsServerResourceRecord -ZoneName "example.com" -A -Name "www" -IPv4Address "192.168.0.1" -ZoneScope "LocalZoneScope"
PS> Add-DnsServerResourceRecord -ZoneName "example.com" -A -Name "www" -IPv4Address "172.1.1.1"
В политике возможно использование операторов EQ (совпадение) или NE (отсутствие совпадения), для сопоставления нескольких критериев используется параметр -Condition = OR/AND. Создадим простую политику, в которой все клиенты, пришедшие из LocalSubnet, будут получать IP из LocalZoneScope.
PS> Add-DnsServerQueryResolutionPolicy -Name "LocalPolicy" -Action ALLOW -ClientSubnet "eq,LocalSubnet" -ZoneScope "LocalZoneScope,1" -ZoneName "example.com"
Вот, собственно, и все. Теперь клиенты из LocalSubnet на запрос example.com будут получать IP- 192.168.0.1, все остальные – 172.1.1.1. Командлет по умолчанию ничего не выводит, чтобы сделать его разговорчивее можно добавить -PassThru. В параметре ZoneScope, кроме имени зон, указывается и вес. Проверяем:
PS> Get-DnsServerQueryResolutionPolicy -ZoneName "example.com"
Чтобы правило действовало в течение определенного (например, рабочего) времени, можно использовать параметр TimeOfDay "EQ,08:00-18:00".
Кроме ALLOW, в качестве значения для -Action можно использовать DENY или IGNORE, которые позволят отбросить или проигнорировать запрос, попадающий под правило. Например, разрешим серверу отвечать на запросы только с определенных сетей.
PS> Add-DnsServerClientSubnet -Name "AllowedSubnet" -IPv4Subnet 192.168.0.0/24
PS> Add-DnsServerZoneTransferPolicy -Name "AllowedSubnetPolicy" -Action IGNORE -ClientSubnet "ne,AllowedSubnet" -PassThru
Созданную политику можно отключить, использовав параметр Disable, или удалить с помощью командлета Remove-DnsServerZoneTransferPolicy.
PS> Remove-DnsServerZoneTransferPolicy -Name "AllowedSubnet" –PassThru