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是多值的,每个值是一个可以达到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有两种方法可以用来表示TXTlogging(从https://cr.yp.to/djbdns/tinydns-data.html ):
1)
'fqdn:s:ttl:timestamp:loTXT(“文本”)loggingfqdn。 tinydns-data为包含strings的fqdn创build一个TXTlogging。 您可以使用八进制\ nnn代码在s中包含任意字节; 例如,\ 072是一个冒号。
2)
:fqdn:n:rdata:ttl:timestamp:lofqdn的通用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(单字节整数,如文档中所述,这将需要以八进制转义)。
不是因为它专门处理TXTlogging。
然而,自2001年以来,它的官方forms并没有任何更新(版本1.05)。
有补丁和叉子可以解决各种缺陷(DNS协议以及我们的要求和期望在这15年中不断发展),但是我认为切换到更好的维护和最新的DNS服务器实施会更有意义。