As políticas de DNS não estão a resolver adequadamente os CNAMEs nos Escopos da Zona, se a Política de Resolução de Consultas incluir o operador NE para Sub-redes do Cliente.

5

Tenho quase certeza de que descobri um bug, mas estou tentando entender e talvez receber um teste de sanidade.

Cenário

Uma política em que se a solicitação estiver procurando por um registro específico AND o IP do cliente não estiver em uma sub-rede específica, a política corresponderá e resultará em um registro CNAME , cuja meta não é coberta pela política e não existe em um escopo .

Exemplo:

  • Zona = example.com
  • Registros no escopo padrão example.com :
    • testme IN A 10.1.2.3
    • testOther IN A 10.11.11.11
  • Escopo da zona = TesterScope
  • Grave em TesterScope :
    • testme IN CNAME testOther.example.com.
  • A sub-rede do cliente MySubnet contém 10.8.8.0/24

QRP com EQ para a sub-rede do cliente

  • Política de resolução de consultas MyQRP com a seguinte configuração:
    • Condição = And
    • Conteúdo = TesterScope
    • Critérios:
      • FQDN = EQ,testme.example.com.
      • ClientSubnet = EQ,MySubnet

Isso produzirá os resultados esperados, isto é:

  • Se uma solicitação chegar por testme.example.com de um IP em MySubnet ( deve corresponder ), ela retornará (e resolverá) corretamente o registro CNAME , mesmo que o CNAME deve ser resolvido no escopo padrão (o QRP especificamente deve corresponder apenas quando FQDN é testme.example.com não para testOther.example.com ). Portanto, o resultado é 10.11.11.11 , o que é correto .
  • Se uma solicitação chegar por testme.example.com de um IP fora de MySubnet ( não deve corresponder a ), será resolvida como 10.1.2.3 conforme o esperado .

QRP com NE para a sub-rede do cliente

  • Política de resolução de consultas MyQRP com a seguinte configuração:
    • Condição = And
    • Conteúdo = TesterScope
    • Critérios:
      • FQDN = EQ,testme.example.com.
      • ClientSubnet = NE,MySubnet < - alterar aqui

Isso produzirá resultados inesperados:

  • Se uma solicitação chegar por testme.example.com de um IP fora de MySubnet ( deve corresponder ), ela retornará corretamente o registro CNAME , mas não poderá resolvê-lo. Testes adicionais revelaram que se o destino do CNAME também existir dentro do escopo da zona, ele resolverá , mas ele não deveria estar fazendo isso porque não há QRP que corresponde aos pedidos desse destino para que as consultas usem o escopo.
  • Se uma solicitação chegar por testme.example.com de um IP dentro de MySubnet ( não deve corresponder a ), será resolvida como 10.1.2.3 conforme o esperado .

Notas adicionais

  • Os critérios ClientSubnet podem conter os operadores EQ e NE em um (como EQ,ThisSubnet;NE,ThatSubnet ). O comportamento acontece sempre que o operador NE é incluído.
  • Estou ciente de que essas resoluções CNAME estão sendo feitas internamente no servidor DNS; o cliente não está recebendo o CNAME e, em seguida, resolvendo-o em uma solicitação diferente.
  • Eu afirmo que o comportamento EQ -only está correto, porque, como mencionado anteriormente, o destino do CNAME não possui o QRP que deve fazer com que o escopo da zona seja usado. Além disso, se um cliente solicitar diretamente o destino de CNAME , ele não usará a regra, portanto, considero que os resultados devem ser consistentes entre a resolução CNAME interna e externa.
  • Mesmo se minhas contenções acima estiverem incorretas, o resultado da resolução CNAME interna ainda será inconsistente com ele mesmo (resultados diferentes com EQ vs NE ).
  • Se o registro no escopo da zona for um A em vez de um CNAME (não requer resolução interna), tudo funcionará como planejado (isso é uma solução possível, mas, na minha opinião, indesejável).

PowerShell para demonstrar

(Eu fiz meus próprios testes, mas não diretamente com este código, deixe-me saber se ele está quebrado)

$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

Isso deve criar um cenário reproduzível em seu ambiente (altere as variáveis conforme necessário). De lá, você pode usar nslookup ou dig conforme necessário para verificar os resultados. Observe que você deve verificar apenas o DC único ao qual isso é aplicado se você estiver em um ambiente do AD (as políticas / sub-redes não são replicadas).

Atualização - qua 24 de maio

Eu tenho um caso aberto com a Microsoft para esse problema. Eles afirmam que não podem reproduzi-lo.

Alguém aí disposto a experimentar?

Atualização - qua 26 jul

A Microsoft consegue reproduzir o problema depois de repetidas demonstrações. Estou aguardando uma resposta mais profunda da equipe interna.

    
por briantist 09.05.2017 / 21:02

2 respostas

0

Então, eis como foi o meu caso com a Microsoft.

Eventualmente, ele chegou internamente ao desenvolvedor (que postou uma resposta sobre essa questão), e a resposta oficial é "foi assim que foi criado".

Pessoalmente, não estou nada satisfeito com essa resposta, pois esse comportamento não está documentado e não faz sentido intuitivo, mas aí está.

Foi-me dito que para ir mais longe com a questão, teríamos que abrir um caso de suporte Premier (não temos suporte de primeira linha). Como isso demorou muitos meses e minha empresa não precisa mais desse recurso, isso não acontecerá.

    
por 18.10.2017 / 20:08
1

O comportamento esperado é: Para CNAME / DNAME / SEÇÕES ADICIONAIS • Para cada parte de uma resposta encadeada, as políticas devem ser aplicadas novamente. Os critérios dessas políticas serão comparados com os valores da consulta original (por exemplo, TimeOfDay, sub-rede do cliente, etc.), exceto QTYPE e FQDN. • Se qualquer uma das políticas usadas na cadeia resultar em um DENY / IGNORE, o servidor DNS deverá enviar a resposta parcial ao cliente, se disponível. O Deny / Ignore será aplicado apenas para esse FQDN ou zona.

Acho que os resultados são esperados.

Kumar Ashutosh [Eu projetei diretivas de servidor DNS]

    
por 25.05.2017 / 10:41