djbdns / tinydns是否支持长TXTlogging

djbdns / tinydns是否支持较大的TXTlogging,例如在服务长DKIM密钥时?

我知道RFC 4408第3.1.3节和RFC 1035第3.3.14节:

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

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

这两个build议可以将TXTlogging拆分为多个string,以允许提供长(> 255个字符)的logging。

在我的研究中,我也遇到了这个问题:

如何在DNS中input强大(长)的DKIM密钥?

我已经尝试了在接受的答案中提到的两种方法,有和没有围绕括号。

但djbdns拒绝正确提供这些logging。 例如,当使用nslookup查询我的domainkeylogging时,我得到:

 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 

这是一个DKIM TXTlogging,如下所示:

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

原始的djbdns数据logging如下所示:

 :mail03._domainkey.zygonia.net:16:\642"v=DKIM1;\040k=rsa;\040p="\040"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA7UNgSlnndT9JY0soSjxLhFFnvAeVN8b6Y3oKctAunNltMjvXfTD37doER8a9xwEOIXkGPgxJ5UPb\057KndvHiIo+j8AScoIZCW1glFWp4AUoKlQkKP7o7vwFnWypU+DmcJAtyuhZ9X5yzag37cVRGYD4icd02yAETLbIpv1mnMUFkTnkdmtSa5gL2cLUueUOValoENwkWTcZR"\040"+kraTEU\057VDPIrRgNBu6OJmQdk0sv4qdkwVVvxvquT4C\057SimQDoDaQwlFCp2sBryXyaNSRCaAhRxPaKUpKsPmubW0SJF2nQZ3DprJQcaRQLd9Qgxz+V+XaseaXXWPy+6rtB6BlPFk5FwIDAQAB":600 

TXTlogging很长时,djbdns是一个失败的原因吗?

关于TXTlogging的一些背景知识以及如何将这些logging用于DKIM

TXTlogging是多值的,每​​个值是一个可以达到255个字节的string。

在你的例子中,你开始使用具有三个值的标准主文件格式指定的build议TXTlogging。
有三个值用引号表示,请注意,这些实际上并不是logging数据的一部分,它们只是指定每个值开始和结束的位置。

您的TXT值:

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

手段:

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

对于DKIM来说,具有多个值并没有实际意义,但是由于TXTlogging的每个值都具有有限的长度,并且DKIM规范认识到这一点,并且为了DKIM的目的, 多个值应该简单地连接成一个长string,这允许长键。

也就是说,一个DKIM客户端将上面的值连接到string中

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

这也意味着上面的string可以在不改变DKIM中的含义的情况下在不同的位置被分割。

Tinydns和TXT

Tinydns有两种方法可以用来表示TXTlogging(从https://cr.yp.to/djbdns/tinydns-data.html ):

1)

 'fqdn:s:ttl:timestamp:lo 

TXT(“文本”)loggingfqdn。 tinydns-data为包含strings的fqdn创build一个TXTlogging。 您可以使用八进制\ nnn代码在s中包含任意字节; 例如,\ 072是一个冒号。

2)

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

fqdn的通用logging。 tinydns-data为显示rdata的fqdn创buildtypesn的logging。 n必须是1到65535之间的整数; 它不能是2(NS),5(CNAME),6(SOA),12(PTR),15(MX)或252(AXFR)。 rdata的正确格式取决于n。 您可以使用八进制\ nnn代码在rdata中包含任意字节。

看起来内置的TXT支持(上面1)允许显式指定多个值,但是,虽然手册没有说明这一点,但我发现它会自行分割一个长string。

即,像这样的东西应该工作(假设关于自动分割的信息实际上是正确的):

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

另一种select,通用logging支持(上面2),只要你给它适当的rdata ,肯定会工作。

问题是,引用的rdata是一个非常低级的表示,你绝对不能只是放下一些纯文本,并期望它的工作。
也就是说,如果沿着在tinydns中input通用logging数据的路线走下去,那么logging的主文件格式表示(通常使用的友好的纯文本logging数据,例如build议的logging数据但是你不得不查看数据如何转换成DNS线路格式(在DNS协议中使用的实际二进制格式),并将其写入rdata字段(根据需要写入有问题的字节)。

也就是说,对于一个TXTlogging来说,你将会得到以它们的长度为前缀的值string(单字节整数,如文档中所述,这将需要以八进制转义)。

djbdns / tinydns是失败的原因吗?

不是因为它专门处理TXTlogging。

然而,自2001年以来,它的官方forms并没有任何更新(版本1.05)。
有补丁和叉子可以解决各种缺陷(DNS协议以及我们的要求和期望在这15年中不断发展),但是我认为切换到更好的维护和最新的DNS服务器实施会更有意义。