-
Notifications
You must be signed in to change notification settings - Fork 184
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
建议可在上游地址前加上 udp:// 来强制使用 UDP DNS #153
Comments
强制使用 udp 上游在技术上没问题,而且最开始我确实准备支持 先说一些背景知识:
为什么强制 udp 上游会有逻辑上的问题,假设一个客户端(resolver)查询 qq.com:
|
原因很简单,就是要让 (这个其实也是 dnsmasq 的默认行为,以前我不太能理解为什么这么做,现在理解了) 只有在这个前提下,才不会出现 tcp fallback 时的逻辑问题。
补充一点,一个 upstream group 可以有多种不同的协议的 dns 服务器,假设其中有 udp:// 上游、tcp:// 上游;此时从 tcp 收到一个查询,转发给了这组 upstream,因为同一 upstream group 内的响应采用的是抢答机制(使用最先响应的结果),通常 udp 响应是最快的(因为没有其他协议的那些开销),如果恰好该消息因为 size 问题被 truncated 了,那么也会让 resolver 感到困惑(从 tcp 查询中得到了 TC 结果)。 |
另外,我个人不建议关闭 |
公共 DNS 应该都支持 TCP 查询了,毕竟这是 RFC 的强制要求,就连 ISP 的 DNS 服务器也支持。 你说本地 DoH 服务器不支持,那我就没得办法了,应该有相关监听参数的,开一下 TCP 监听就好了。 |
默认要监听 TCP 和 UDP 是 RFC 的要求,个人不建议关闭 TCP 监听。 |
感谢 @zfl9 详细的说明!现在明白这样设计的考量了。 |
今天使用有这么一个问题,chinadns-ng的trust upstream为dns2tcp
当客户端使用以下命令查询时
客户端的dig报以下错误
同样地。国内网站使用tcp查询时因为运营商dns不支持tcp而导至查询失败连接超时
虽然看似upstream有udpin和tcpin,但是客户端只要指定了tcp查询,chinadns-ng就只forward tcp,并不会使用udp, |
见 2024.04.13 版本。 |
原因:如 chinadns-ng 同时监听 TCP 和 UDP 端口,但如果上游 DNS 服务器仅支持 UDP 查询(有些公共服务器如此,或者像我的上游 DNS 服务器为仅监听 UDP 的本地 DoH 服务器),则通过 TCP 查询(有些智能设备似乎默认如此)会报错:
另外,
根据查询方的传入协议来选择与上游的通信协议
这一设定与bind-addr
如不指定监听协议则默认监听 TCP + UDP 这两点结合起来可能会导致上述错误,所以是否考虑更改默认选项以避免新用户遇到上述问题?The text was updated successfully, but these errors were encountered: