我相当肯定我发现了一个错误,但是我正在试着理解它,也许会得到一个理智的检查。
一个策略, 如果请求正在查找特定的loggingAND并且客户端IP不在特定的子网中,则策略匹配并生成一个CNAMElogging,其目标不在策略中,并且不在策略中 。
example.com example.comlogging默认范围:
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的客户端子网QRP MyQRP :
And TesterScope EQ,testme.example.com. EQ,MySubnet 这会产生预期的结果,即:
testme.example.com中的IP的MySubnet ( 应该匹配 ),即使必须在默认范围内parsingCNAME ,它也会正确地返回(并parsing) CNAMElogging(QRP专门只应该当FQDN是testme.example.com不匹配testOther.example.com )。 所以结果是10.11.11.11 ,这是正确的 。 testme.example.com之外的IP的MySubnet ( 不应该匹配 ), 它将按照预期parsing为10.1.2.3 。 NE MyQRP :
And TesterScope EQ,testme.example.com. NE,MySubnet < – 在这里改变 这将产生意想不到的结果:
testme.example.com以外的IP( 应匹配 )请求testme.example.com ,它将正确返回CNAMElogging,但无法parsing它。 进一步的testing表明, 如果CNAME的目标也存在于区域范围内,它将会解决 ,但不应该这样做,因为没有与该目标的请求匹配的QRP使查询使用范围。 testme.example.com内的IP的MySubnet ( 不应该匹配 ), 则按照预期parsing为10.1.2.3 。 ClientSubnet标准可以同时包含EQ和NE操作符(如EQ,ThisSubnet;NE,ThatSubnet )。 networking运营商随时都会发生这种情况。 CNAME解决scheme是在DNS服务器上内部完成的; 客户端没有收到CNAME ,然后在不同的请求中parsing它。 EQ行为是正确的,因为如前所述, CNAME的目标没有应该导致区域范围被使用的QRP。 此外,如果客户端直接请求CNAME的目标,它不会使用规则,所以我觉得结果应该是内部和外部CNAMEparsing之间的一致。 CNAMEparsing的结果仍然与自身不一致( EQ与NE结果不同)。 Alogging而不是CNAME (不需要内部parsing),那么一切都按计划运行(这是可能的,但在我看来是不理想的解决方法)。 (我做了我自己的testing,但不是直接使用这个代码,让我知道它是否坏了)
$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
这应该在您的环境中创build一个可重复的scheme(根据需要更改variables)。 从那里你可以使用nslookup或根据需要dig检查结果。 注意,如果您在AD环境中 (策略/子网不会被复制) ,则只能针对应用于此的单个DC进行检查 。
对于这个问题,我有一个与微软合作的案例。 他们声称他们不能复制它。
有谁愿意试试这个吗?
经过反复演示,微软能够重现这个问题。 我正在等待内部团队的更深刻的回应。
预期的行为是:对于CNAME / DNAME /附加部分•对于链接响应的每个部分,必须重新应用策略。 这些策略的标准将与原始查询(例如TimeOfDay,客户端子网等)中的值匹配,但QTYPE和FQDN除外。 •如果链中使用的任何策略导致DENY / IGNORE,则DNS服务器必须将部分响应发送到客户端(如果可用)。 拒绝/忽略将只适用于该FQDN或区域。
我认为结果是预期的。
库马尔Ashutosh [我devise的DNS服务器策略]
所以,这是我的情况如何与微软。
最终,它在内部向开发者(对这个问题发表了一个答案)进行了解释,所以官方的回应是“这是如何devise的”。
我个人对这个答案本身并不满意,因为这种行为没有logging,并且没有直观的意义,但是它就是这样。
有人告诉我说,要进一步处理这个问题,我们将不得不打开总理支持案(我们没有总理支持)。 鉴于这花了好几个月,我的公司不再需要这个function,这不会发生。