O djbdns / tinydns suporta longos registros TXT?

2

O djbdns / tinydns suporta grandes TXT registros, por exemplo, ao servir chaves DKIM longas?

Estou ciente da seção 3.1.3 da RFC 4408 e da seção 3.3.14 da RFC 1035:

https://tools.ietf.org/html/rfc4408#section-3.1.3

https://tools.ietf.org/html/rfc1035#section-3.3.14

Ambos sugerem que um registro de TXT pode ser dividido em várias sequências de caracteres para permitir que registros longos (> 255 caracteres) sejam exibidos.

Eu também esbarrei nessa questão durante minha pesquisa:

How do I enter a strong (long) DKIM key into DNS?

Eu tentei as duas abordagens mencionadas na resposta aceita, com e sem parênteses ao redor.

Mas o djbdns se recusa a servir esses registros corretamente. Por exemplo, ao consultar meu registro de domain domain usando nslookup , obtenho:

mail03._domainkey.zygonia.net   text =

    ""v=DKIM1; k=rsa; p=" "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA7UNgSlnndT9JY0soSjxLhFFnvAeVN8b6Y3oKctAunNltMjvXfTD37doER8a9xwEOIXkGPgxJ5UPb/KndvHiIo+j8AScoIZCW"
    "glFWp4AUoKlQkKP7o7vwFnWypU+DmcJAtyuhZ9X5yzag37cVR"
    "YD4icd02yAETLbIpv1mnMUFkTnkdmtSa5gL2cLUueUOValoENwkWTcZR" "+kraTEU/VDPI"
    "RgNBu6OJmQdk0sv4qdkwVVvxvquT4C/SimQDoDaQwlFCp2sBryXyaNSRCaAhRxPaKUpKsPmubW0SJF2nQZ3DprJQcaRQLd9Qgxz+V+XaseaXXWPy+6"
    "tB6BlPFk5FwIDAQAB""

*** Error: record size incorrect (515 != 419)

*** ns0.example.net can't find mail03._domainkey.zygonia.net: Unspecified error

Isso é com um registro DKIM TXT semelhante a:

"v=DKIM1; k=rsa; p=" "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA7UNgSlnndT9JY0soSjxLhFFnvAeVN8b6Y3oKctAunNltMjvXfTD37doER8a9xwEOIXkGPgxJ5UPb/KndvHiIo+j8AScoIZCW1glFWp4AUoKlQkKP7o7vwFnWypU+DmcJAtyuhZ9X5yzag37cVRGYD4icd02yAETLbIpv1mnMUFkTnkdmtSa5gL2cLUueUOValoENwkWTcZR" "+kraTEU/VDPIrRgNBu6OJmQdk0sv4qdkwVVvxvquT4C/SimQDoDaQwlFCp2sBryXyaNSRCaAhRxPaKUpKsPmubW0SJF2nQZ3DprJQcaRQLd9Qgxz+V+XaseaXXWPy+6rtB6BlPFk5FwIDAQAB"

O registro de dados djbdns bruto se parece com:

:mail03._domainkey.zygonia.net:16:2"v=DKIM1;0k=rsa;0p="0"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA7UNgSlnndT9JY0soSjxLhFFnvAeVN8b6Y3oKctAunNltMjvXfTD37doER8a9xwEOIXkGPgxJ5UPb7KndvHiIo+j8AScoIZCW1glFWp4AUoKlQkKP7o7vwFnWypU+DmcJAtyuhZ9X5yzag37cVRGYD4icd02yAETLbIpv1mnMUFkTnkdmtSa5gL2cLUueUOValoENwkWTcZR"0"+kraTEU7VDPIrRgNBu6OJmQdk0sv4qdkwVVvxvquT4C7SimQDoDaQwlFCp2sBryXyaNSRCaAhRxPaKUpKsPmubW0SJF2nQZ3DprJQcaRQLd9Qgxz+V+XaseaXXWPy+6rtB6BlPFk5FwIDAQAB":600

O djbdns é uma causa perdida quando se trata de registros TXT longos?

    
por Kev 01.12.2016 / 15:08

1 resposta

3

Um pouco sobre os registros TXT e como eles são usados para o DKIM

TXT registros têm vários valores, cada valor é uma cadeia de até 255 bytes.

Em seu exemplo, você começou com um registro sugerido TXT especificado no formato de arquivo mestre padrão que tinha três valores.
Existindo três valores é indicado pelas aspas, observe que estes não são realmente parte dos dados do registro, eles apenas especificam onde cada valor começa e termina.

Seu valor TXT :

"v=DKIM1; k=rsa; p=" "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA7UNgSlnndT9JY0soSjxLhFFnvAeVN8b6Y3oKctAunNltMjvXfTD37doER8a9xwEOIXkGPgxJ5UPb/KndvHiIo+j8AScoIZCW1glFWp4AUoKlQkKP7o7vwFnWypU+DmcJAtyuhZ9X5yzag37cVRGYD4icd02yAETLbIpv1mnMUFkTnkdmtSa5gL2cLUueUOValoENwkWTcZR" "+kraTEU/VDPIrRgNBu6OJmQdk0sv4qdkwVVvxvquT4C/SimQDoDaQwlFCp2sBryXyaNSRCaAhRxPaKUpKsPmubW0SJF2nQZ3DprJQcaRQLd9Qgxz+V+XaseaXXWPy+6rtB6BlPFk5FwIDAQAB"

significa:

  • v=DKIM1; k=rsa; p=
  • MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA7UNgSlnndT9JY0soSjxLhFFnvAeVN8b6Y3oKctAunNltMjvXfTD37doER8a9xwEOIXkGPgxJ5UPb/KndvHiIo+j8AScoIZCW1glFWp4AUoKlQkKP7o7vwFnWypU+DmcJAtyuhZ9X5yzag37cVRGYD4icd02yAETLbIpv1mnMUFkTnkdmtSa5gL2cLUueUOValoENwkWTcZR
  • +kraTEU/VDPIrRgNBu6OJmQdk0sv4qdkwVVvxvquT4C/SimQDoDaQwlFCp2sBryXyaNSRCaAhRxPaKUpKsPmubW0SJF2nQZ3DprJQcaRQLd9Qgxz+V+XaseaXXWPy+6rtB6BlPFk5FwIDAQAB

Para o propósito de DKIM, não é realmente significativo ter vários valores, mas como cada valor de um registro TXT tem comprimento limitado e a especificação DKIM reconhece isso e diz que, para o propósito de DKIM, vários valores devem ser simplesmente concatenados em uma cadeia longa , o que permite chaves longas.

Ou seja, um cliente DKIM irá concatenar os valores acima na string

v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA7UNgSlnndT9JY0soSjxLhFFnvAeVN8b6Y3oKctAunNltMjvXfTD37doER8a9xwEOIXkGPgxJ5UPb/KndvHiIo+j8AScoIZCW1glFWp4AUoKlQkKP7o7vwFnWypU+DmcJAtyuhZ9X5yzag37cVRGYD4icd02yAETLbIpv1mnMUFkTnkdmtSa5gL2cLUueUOValoENwkWTcZR+kraTEU/VDPIrRgNBu6OJmQdk0sv4qdkwVVvxvquT4C/SimQDoDaQwlFCp2sBryXyaNSRCaAhRxPaKUpKsPmubW0SJF2nQZ3DprJQcaRQLd9Qgxz+V+XaseaXXWPy+6rtB6BlPFk5FwIDAQAB  

Isso também significa que a string acima poderia ter sido dividida em diferentes posições sem alterar o significado em DKIM.


Minúsculos e TXT

O Tinydns tem duas maneiras que você poderia usar para representar um registro TXT (de link ):

1)

'fqdn:s:ttl:timestamp:lo 

TXT (''text'') record for fqdn. tinydns-data creates a TXT record for fqdn containing the string s. You may use octal \nnn codes to include arbitrary bytes inside s; for example, 2 is a colon.

2)

:fqdn:n:rdata:ttl:timestamp:lo

Generic record for fqdn. tinydns-data creates a record of type n for fqdn showing rdata. n must be an integer between 1 and 65535; it must not be 2 (NS), 5 (CNAME), 6 (SOA), 12 (PTR), 15 (MX), or 252 (AXFR). The proper format of rdata depends on n. You may use octal \nnn codes to include arbitrary bytes inside rdata.


Não parece que o construído em TXT support (1 acima) permita especificar explicitamente vários valores, mas, enquanto o manual não declara isso, eu encontrei indicações de que ele irá dividir uma longa string por conta própria. / p>

Ou seja, algo assim deve funcionar (supondo que as informações na divisão automática estejam realmente corretas):

'mail03._domainkey.zygonia.net:v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA7UNgSlnndT9JY0soSjxLhFFnvAeVN8b6Y3oKctAunNltMjvXfTD37doER8a9xwEOIXkGPgxJ5UPb/KndvHiIo+j8AScoIZCW1glFWp4AUoKlQkKP7o7vwFnWypU+DmcJAtyuhZ9X5yzag37cVRGYD4icd02yAETLbIpv1mnMUFkTnkdmtSa5gL2cLUueUOValoENwkWTcZR+kraTEU/VDPIrRgNBu6OJmQdk0sv4qdkwVVvxvquT4C/SimQDoDaQwlFCp2sBryXyaNSRCaAhRxPaKUpKsPmubW0SJF2nQZ3DprJQcaRQLd9Qgxz+V+XaseaXXWPy+6rtB6BlPFk5FwIDAQAB:7200


A outra opção, o suporte a registro genérico (2 acima), certamente funcionará desde que você forneça o rdata apropriado.

A questão é que o rdata referenciado lá é uma representação de muito baixo nível, você absolutamente não pode simplesmente colocar um texto simples lá dentro e esperar que ele funcione.
Ou seja, se você percorrer a rota de inserir dados de registro genérico em tinydns, não será realmente ajudado pela representação de formato de arquivo mestre de registros (os dados de registros de texto simples com os quais você costuma trabalhar, como os dados de registro sugeridos) para você), mas você preferiria procurar como esses dados são convertidos no formato de fio DNS (o formato binário real usado no protocolo DNS) e gravar isso (escapando de bytes problemáticos conforme necessário) para o rdata campo.

Ou seja, para um registro de TXT você teria as cadeias de valor prefixadas por seus comprimentos (inteiro de byte único, que precisaria ser escapado em octal, como observado na documentação).


O djbdns / tinydns é uma causa perdida?

Aficie-se não por causa de seu processamento de TXT registros especificamente.

No entanto, é um software que, em sua forma oficial, não recebe atualizações desde 2001 (versão 1.05).
Existem patches e garfos que lidam com várias deficiências (o protocolo DNS, assim como nossas demandas e expectativas, evoluíram continuamente ao longo desses 15 anos), mas acredito que faria mais sentido mudar para uma implementação de servidor DNS melhor mantida e atualizada. / p>     

por 01.12.2016 / 22:09