Я почти уверен, что обнаружил ошибку, но я пытаюсь разобраться в ней и, возможно, проверить работоспособность.
Политика, в которой если запрос ищет конкретную запись 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
EQ
для клиентской подсетиMyQRP
со следующей конфигурацией: And
TesterScope
EQ,testme.example.com.
EQ,MySubnet
Это даст ожидаемые результаты, а именно:
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
как и ожидалось.NE
для клиентской подсетиMyQRP
со следующей конфигурацией: And
TesterScope
EQ,testme.example.com.
NE,MySubnet
<- изменить здесьЭто приведет к неожиданным результатам:
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
(не требует внутреннего разрешения), тогда все работает по плану (это возможное, но, на мой взгляд, нежелательное решение).(Я провел свои собственные тесты, но не напрямую с этим кодом, дайте мне знать, если он сломан)
$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. (политики / подсети не реплицируются).
Я веду дело с Microsoft по этой проблеме. Они заявляют, что не могут его воспроизвести.
Кто-нибудь готов попробовать это?
Microsoft может воспроизвести проблему после неоднократных демонстраций. Я жду более глубокого ответа от внутренней команды.
Ожидаемое поведение: Для CNAME / DNAME / ДОПОЛНИТЕЛЬНЫХ СЕКЦИЙ • Для каждой части связанного ответа политики должны применяться снова и снова. Критерии этой политики будут сопоставлены со значениями в исходном запросе (например, TimeOfDay, клиентская подсеть и т. Д.), За исключением QTYPE и FQDN. • Если какая-либо из политик, используемых в цепочке, приводит к DENY / IGNORE, DNS-сервер должен отправить частичный ответ клиенту, если он доступен. Запретить / игнорировать будет применяться только для этого FQDN или зоны.
Думаю, результаты ожидаются.
Кумар Ашутош [Я разработал политики DNS-сервера]
Итак, вот как прошел мой случай с Microsoft.
В конце концов, он попал к разработчику (который отправил ответ на этот вопрос), и поэтому официальный ответ - «вот как он был разработан».
Я лично не удовлетворен этим ответом, поскольку такое поведение не задокументировано и не имеет интуитивного смысла, но оно есть.
Мне сказали, что для того, чтобы решить эту проблему дальше, нам придется открыть заявку на поддержку Premier (у нас нет основной поддержки). Учитывая, что это заняло много месяцев, и моя компания больше не нуждается в этой функции, этого не произойдет.