net:在go解析器中报告详细的DNS错误和扩展DNS错误,

stszievb  于 5个月前  发布在  Go
关注(0)|答案(7)|浏览(57)

当前,当查询失败时,我们返回一个 "server misbehaving" 错误。RFC 8914 允许解析器包含有关 DNS 查询失败的详细错误信息。在纯 Go 解析器中支持它是很好的。我们已经支持了 EDNS(0) ,所以添加它应该相当容易。
唯一让我不确定的是 EDE 选项中的可选 EXTRA-TEXT 字段,将其包含在错误中是很好的,但它可以是任意的 UTF-8 字符串。我们可能不应该在错误字符串中包含任意字符。不确定这一点。
CC @mjl- (#63116 (评论))

uajslkp6

uajslkp61#

要查看此操作的效果,请尝试 dig dnssec-failed.org @1.1.1.1dig dnssec-failed.org @8.8.8.8dig dnssec-failed.org @127.0.0.1 与启用了 ede 的本地安装的 unbound 进行对抗:

# cat /etc/unbound/unbound.conf.d/ede.conf
server:
    ede: yes
    val-log-level: 2

我对这个很感兴趣,因为这是需要一个支持 dnssec 的非验证存根解析器包的一部分。也许 #13279 也应该参与其中。
至于错误信息,它可以以 "error from remote: ..." 为前缀,如果认为是危险的,我们可以仅显示非控制字符和纯文本字符串。

vs91vp4v

vs91vp4v2#

也许可以使用自定义错误类型与errors.As一起使用,并将额外的文本作为不包含在默认Error()字符串中的字段?

ibps3vxo

ibps3vxo3#

我对这个很感兴趣,因为需要一个支持DNSSEC的非验证存根解析器包。也许#13279应该参与其中。
您能详细说明一下您的使用场景吗?对于导出的扩展DNS错误类型,您的使用场景是什么?为什么需要#13279?您对AD位访问感兴趣吗?

1tuwyuhd

1tuwyuhd4#

你能详细说明一下你在这个场景下的用例吗?对于导出的扩展DNS错误类型,你的用例是什么?为什么需要#13279,你对AD位访问感兴趣吗?

我正在为我的邮件服务器(mox)添加对(出站)DANE和TLS-RPT的支持。对于TLS报告,我需要能够解释为什么通过SMTP的投递尝试失败。其中一个原因就是:"dnssec-invalid":这表示递归解析器没有返回有效的记录。

参考:https://datatracker.ietf.org/doc/html/rfc8460#section-4.3.2.1 我认为这种情况是来自没有AD位的解析器的响应。同时,也适用于一些EDE代码(关于失败的dnssec)的servfail,但不是全部(错误代码的最后三分之一)。所以,我也需要"authentic data"位。我还需要一个LookupTLSA函数(其他人可能还需要更多的查找函数,例如sshfp、smimea等)。

我已经开始根据github.com/miekg/dns原型化一个解析器,该解析器在每个Lookup函数中添加一个"authentic data"布尔返回值。虽然我开始认为将其更改为结构体可能会更好,以便在未来添加额外的结果字段。在某个时候,我希望对解析器有更多的控制权(但这已经偏离了主题,所以请忽略):

  • 忽略/etc/hosts(对于一些刚刚设置的云虚拟机,它会导致fqdn解析为回环ip而不是实际的公共ip)。
  • 可能有一些函数能更接近DNS的行为(例如,如果cname记录不存在,现在LookupCNAME不会返回nxdomain错误,而是无错误,这让我感到惊讶)。
  • 我也希望有一个完整的dnssec验证缓存递归解析器作为Go包。"验证"意味着查找始终是安全的,我不必告诉用户安装本地的dnssec验证递归解析器(如unbound,或者让他们更改systemd-resolved配置以启用dnssec验证),尽管随着更多的时间,它可能会成为系统上的默认选项(我认为这就是互联网所期望的)。"缓存"(可以选择忽略缓存)使得我在进行dns设置检查时可以找到缓存记录与当前权威记录之间的不匹配之处,这在用户进行了dns更改之后非常有用。但是这样的解析器需要很多工作,目前更多是一种锦上添花而非必要之物。
pvabu6sv

pvabu6sv5#

我正在为我的邮件服务器(mox)添加对(出站)DANE和TLS-RPT的支持。对于TLS报告,我需要能够说明为什么通过SMTP的投递尝试失败。其中一个原因是:
"dnssec-invalid":这表示递归解析器没有返回有效的记录。
dnssec-invalid应该在DNSSEC上返回时?在LookupHost(A/AAAA)、LookupMX或TLSA记录查询失败时。
所以是的,我还需要"authentic data"位。我还需要一个LookupTLSA函数(其他人还会想要更多的查找功能,例如sshfp、smimea等)。我开始根据github.com/miekg/dns原型化一个解析器,该解析器为每个Lookup函数添加一个"authentic data"布尔返回值。尽管我开始认为将其更改为结构体可能更好,以便将来可以添加其他结果字段。.
我认为我们永远不会添加LookupTLSA(参见#35061)。

  • 忽略/etc/hosts(对于一些新设置的云虚拟机,它会导致fqdn解析为回环ip而不是实际的公共ip)。

这可以通过适当的DNS解析器和查询A/AAAA资源来解决。LookupHost需要支持主机文件,因为我们模拟getaddrinfo。

  • 可能有一些函数能更接近DNS的行为(例如,现在LookupCNAME如果cname记录不存在而不会返回错误,而是nxdomain,这让我感到惊讶)。

另外请注意,现在#59943已经损坏了。
我也希望有一个完整的dnssec验证缓存递归解析器作为Go包。

13279(评论)

vfh0ocws

vfh0ocws6#

https://go.dev/cl/530876提到了这个问题:net: report detailed DNS errors with Extended DNS Errors

ruoxqz4g

ruoxqz4g7#

@ianlancetaylor@neild

相关问题