首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >djbdns / tinydns支持长TXT记录吗?

djbdns / tinydns支持长TXT记录吗?
EN

Server Fault用户
提问于 2016-12-01 14:08:19
回答 1查看 2.5K关注 0票数 3

djbdns/tinydns是否支持大型TXT记录,例如在提供长DKIM密钥时?

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

https://www.rfc-editor.org/rfc/rfc4408#section-3.1.3 https://www.rfc-editor.org/rfc/rfc1035#section-3.3.14

这两种方法都表明,可以将TXT记录拆分为多个字符串,以便为长(>255个字符)记录提供服务。

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

https://serverfault.com/questions/255580/how-do-i-enter-a-strong-long-dkim-key-into-dns

我尝试了在接受的答案中提到的两种方法,包括和不加括号。

但是djbdns拒绝正确地服务这些记录。例如,当使用nslookup查询我的domainkey记录时,我得到:

代码语言:javascript
复制
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 TXT记录,如下所示:

代码语言:javascript
复制
"v=DKIM1; k=rsa; p=" "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA7UNgSlnndT9JY0soSjxLhFFnvAeVN8b6Y3oKctAunNltMjvXfTD37doER8a9xwEOIXkGPgxJ5UPb/KndvHiIo+j8AScoIZCW1glFWp4AUoKlQkKP7o7vwFnWypU+DmcJAtyuhZ9X5yzag37cVRGYD4icd02yAETLbIpv1mnMUFkTnkdmtSa5gL2cLUueUOValoENwkWTcZR" "+kraTEU/VDPIrRgNBu6OJmQdk0sv4qdkwVVvxvquT4C/SimQDoDaQwlFCp2sBryXyaNSRCaAhRxPaKUpKsPmubW0SJF2nQZ3DprJQcaRQLd9Qgxz+V+XaseaXXWPy+6rtB6BlPFk5FwIDAQAB"

原始djbdns数据记录如下所示:

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

当涉及到长TXT记录时,djbdns是一个失败的原因吗?

EN

回答 1

Server Fault用户

发布于 2016-12-01 21:09:24

关于TXT记录的一些背景知识,以及这些记录是如何用于DKIM

TXT记录是多值的,每个值都是一个最多可达255个字节的字符串.

在您的示例中,首先使用标准主文件格式中指定的建议的TXT记录,该文件格式有三个值。

有三个值由引号表示,请注意这些值实际上不是记录数据的一部分,它们只指定每个值开始和结束的位置。

您的TXT值:

代码语言:javascript
复制
"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而言,拥有多个值实际上没有意义,但是由于TXT记录的每个值都有有限的长度,DKIM规范承认这一点,并表示对于DKIM而言,多个值应该简单地连接到一个长字符串中。允许长键。

Ie,DKIM客户端将将上述值连接到字符串中。

代码语言:javascript
复制
v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA7UNgSlnndT9JY0soSjxLhFFnvAeVN8b6Y3oKctAunNltMjvXfTD37doER8a9xwEOIXkGPgxJ5UPb/KndvHiIo+j8AScoIZCW1glFWp4AUoKlQkKP7o7vwFnWypU+DmcJAtyuhZ9X5yzag37cVRGYD4icd02yAETLbIpv1mnMUFkTnkdmtSa5gL2cLUueUOValoENwkWTcZR+kraTEU/VDPIrRgNBu6OJmQdk0sv4qdkwVVvxvquT4C/SimQDoDaQwlFCp2sBryXyaNSRCaAhRxPaKUpKsPmubW0SJF2nQZ3DprJQcaRQLd9Qgxz+V+XaseaXXWPy+6rtB6BlPFk5FwIDAQAB  

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

Tinydns与TXT

Tinydns有两种表示TXT记录的方法(来自https://cr.yp.to/djbdns/tinydns-data.html):

1)

‘fqdn :S:ttl:时间戳:lo(text’)记录fqdn。tinydns--数据为包含字符串s的fqdn创建一个TXT记录。您可以使用八进制\nnn代码在S中包含任意字节;例如,\072是冒号。

2)

::fqdn :n:rdata:ttl:时间戳:用于fqdn的lo通用记录。tinydns-数据为显示rdata的fqdn创建n类型的记录。N必须是介于1到65535之间的整数;它不能是2 (NS)、5 (CNAME)、6 (SOA)、12 (PTR)、15 (MX)或252 (AXFR)。rdata的正确格式取决于n。您可以使用八进制\nnn代码在rdata中包含任意字节。

上面内置的TXT支持(1 )似乎不允许显式地指定多个值,但是,虽然手册没有说明这一点,但我发现有迹象表明它将单独拆分一个长字符串。

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

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

另一个选项,泛型记录支持(上文2),只要您给它适当的rdata,就一定能工作。

问题是,引用的rdata有一个非常低级别的表示形式,您绝对不能简单地将一些纯文本放到其中并期望它能够工作。

例如,如果您沿着以tinydns输入一般记录数据的路线,记录的主文件格式表示(通常使用的友好的纯文本记录数据,例如向您建议的记录数据)并不能真正帮助您,但您更愿意查找数据如何转换为DNS线格式( DNS协议中使用的实际二进制格式),并将其写入rdata字段(必要时有问题转义字节)。

Ie,对于TXT记录,您将以值字符串的长度作为前缀(单字节整数,需要像文档中所指出的那样以八进制形式转义)。

是一个失败的原因吗?

Afaict并不是因为它专门处理TXT记录。

然而,这是一款官方形式的软件,自2001年(1.05版)以来一直未见过任何更新。

有些补丁和叉子可以解决各种缺点( DNS协议以及我们的需求和期望在这15年中一直在发展),但我认为更有意义的是改用更好的维护和最新的DNS服务器实现。

票数 5
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/818130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档