Политики DNS не разрешают правильно имена CNAME в области действия зон, если в политику разрешения запросов включен оператор NE для клиентских подсетей
Я почти уверен, что обнаружил ошибку, но я пытаюсь разобраться в этом и, возможно, получить проверку работоспособности.
сценарий
Политика, где, если запрос ищет конкретную запись AND
IP-адрес клиента не находится в определенной подсети, политика соответствует и приводит к CNAME
запись, цель которой не охватывается политикой и не существует в области.
Пример:
- Зона =
example.com
- Записи в
example.com
область по умолчанию:testme IN A 10.1.2.3
testOther IN A 10.11.11.11
- Зона действия =
TesterScope
- Запись в
TesterScope
:testme IN CNAME testOther.example.com.
- Клиентская подсеть
MySubnet
содержит10.8.8.0/24
QRP с EQ
для клиентской подсети
- Политика разрешения запросов
MyQRP
со следующим конфигом:- Состояние =
And
- Содержание =
TesterScope
- Критерии:
- FQDN =
EQ,testme.example.com.
- ClientSubnet =
EQ,MySubnet
- FQDN =
- Состояние =
Это даст ожидаемые результаты, а именно:
- Если запрос приходит для
testme.example.com
с IP в пределахMySubnet
(должно совпадать), он будет правильно возвращать (и разрешать)CNAME
запись, хотяCNAME
должно быть разрешено в области по умолчанию (в частности, QRP должен совпадать только тогда, когдаFQDN
являетсяtestme.example.com
не дляtestOther.example.com
). Следовательно, результат10.11.11.11
, что правильно. - Если запрос приходит для
testme.example.com
с IP снаружиMySubnet
(не должно совпадать), он разрешает10.1.2.3
как и ожидалось.
QRP с NE
для клиентской подсети
- Политика разрешения запросов
MyQRP
со следующим конфигом:- Состояние =
And
- Содержание =
TesterScope
- Критерии:
- FQDN =
EQ,testme.example.com.
- ClientSubnet =
NE,MySubnet
<- изменить здесь
- FQDN =
- Состояние =
Это приведет к неожиданным результатам:
- Если запрос приходит для
testme.example.com
с IP снаружиMySubnet
(должен совпадать), он будет правильно возвращатьCNAME
запись, но это не может решить. Дальнейшее тестирование показало, что если цельCNAME
также существует в пределах зоны, он будет разрешен, но не должен этого делать, потому что не существует QRP, который соответствует запросам для этой цели, чтобы запросы использовали область. - Если запрос приходит для
testme.example.com
с IP внутриMySubnet
(не должно совпадать), он разрешает10.1.2.3
как и ожидалось.
Дополнительные примечания
-
ClientSubnet
критерии могут содержать какEQ
а такжеNE
операторы в одном (вродеEQ,ThisSubnet;NE,ThatSubnet
). Поведение происходит в любое времяNE
оператор включен. - Я знаю, что это
CNAME
решения делаются внутри на DNS-сервере; клиент не получаетCNAME
и затем решить его в другом запросе. - Я утверждаю, что
EQ
только поведение является правильным, потому что, как упоминалось ранее, цельCNAME
не имеет QRP, который должен вызывать использование зоны. Кроме того, если клиент должен был напрямую запросить цельCNAME
, это не будет использовать правило, поэтому я чувствую, что результаты должны быть согласованы между внутренним и внешнимCNAME
разрешающая способность. - Даже если мои утверждения выше неверны, результат внутреннего
CNAME
разрешение по-прежнему несовместимо с самим собой (разные результаты сEQ
противNE
). - Если запись в пределах зоны является
A
запись вместоCNAME
(не требует внутреннего разрешения), тогда все работает как запланировано (это возможно, но, на мой взгляд, нежелательный обходной путь).
PowerShell для демонстрации
(Я сделал свои собственные тесты, но не напрямую с этим кодом, дайте мне знать, если он не работает)
$myZone = 'example.com'
$myScope = 'MyScope'
$mySubnetName = 'MySubnet'
$mySubnetCIDR = '10.8.8.0/24'
$commonName = 'testme'
$commonValue = '10.1.2.3'
$otherName = 'testOther'
$otherValue = '10.11.11.11'
$myPolicy = 'MyQRP'
$myCommonFqdn = "${commonName}.${myZone}."
$myOtherFqdn = "${otherName}.${myZone}."
$myDC = 'My2016DC'
Import-Module DnsServer
$PSDefaultParameterValues = @{
'*-DnsServer*:ComputerName' = $myDC
}
Add-DnsServerClientSubnet -Name $mySubnetName -IPv4Subnet $mySubnetCIDR
Add-DnsServerZoneScope -ZoneName $myZone -Name $myScope
Add-DnsServerResourceRecord -ZoneName $myZone -Name $commonName -A -IPv4Address $commonValue
Add-DnsServerResourceRecord -ZoneName $myZone -Name $otherName -A -IPv4Address $otherValue
Add-DnsServerResourceRecord -ZoneName $myZone -ZoneScope $myScope -Name $commonName -CName -HostNameAlias $myOtherFqdn
# Add the policy with EQ that works correctly
Add-DnsServerQueryResolutionPolicy -ZoneName $myZone -ZoneScope $myScope -Name $myPolicy -Fqdn "EQ,$myCommonFqdn" -ClientSubnet "EQ,$mySubnetName"
# Uncomment these to change it around
# Use NE instead of EQ
# Set-DnsServerQueryResolutionPolicy -ZoneName $myZone -ZoneScope $myScope -Name $myPolicy -Fqdn "EQ,$myCommonFqdn" -ClientSubnet "NE,$mySubnetName" -Action REPLACE
# Set it back to using EQ
# Set-DnsServerQueryResolutionPolicy -ZoneName $myZone -ZoneScope $myScope -Name $myPolicy -Fqdn "EQ,$myCommonFqdn" -ClientSubnet "EQ,$mySubnetName" -Action REPLACE
Это должно создать воспроизводимый сценарий в вашей среде (при необходимости измените переменные). Оттуда вы можете использовать nslookup
или же dig
по мере необходимости, чтобы проверить результаты. Обратите внимание, что вы должны проверять только один DC, к которому это применяется, если вы находитесь в среде AD (политики / подсети не реплицируются).
Обновление - ср 24 мая
У меня есть дело с Microsoft по этому вопросу. Они утверждают, что не могут воспроизвести его.
Кто-нибудь хочет попробовать?
Обновление - ср. 26 июля
Microsoft может воспроизвести проблему после повторных демонстраций. Я ожидаю более глубокого ответа от внутренней команды.
2 ответа
Итак, вот как мой случай пошел с Microsoft.
В конце концов, он добрался до разработчика (который разместил ответ на этот вопрос), и поэтому официальный ответ таков: "Вот как это было задумано".
Я лично совсем не удовлетворен этим ответом, поскольку это поведение не задокументировано и не имеет никакого интуитивного смысла, но оно есть.
Мне сказали, что для решения этой проблемы нам придется открыть дело поддержки Premier (у нас нет поддержки Premier). Учитывая, что это заняло много месяцев, и моей компании больше не нужна эта функция, этого не произойдет.
Ожидаемое поведение: для CNAME/DNAME/ ДОПОЛНИТЕЛЬНЫХ СЕКЦИЙ • Для каждой части цепочечного ответа политики должны применяться снова и снова. Критерии этой политики будут сопоставлены со значениями в исходном запросе (например, TimeOfDay, клиентская подсеть и т. Д.), За исключением QTYPE и FQDN. • Если любая из политик, использованных в цепочке, приводит к DENY/IGNORE, DNS-сервер должен отправить частичный ответ клиенту, если он доступен. Запретить / игнорировать будет применяться только для этого полного доменного имени или зоны.
Я думаю, что результаты ожидаемы.
Кумар Ашутош [Я разработал политику DNS-сервера]