Xray-core icon indicating copy to clipboard operation
Xray-core copied to clipboard

[Bug] 极低概率内置dns无法正常解析

Open xsm1997 opened this issue 3 years ago • 1 comments

1.5.9版本xray-core在使用内置dns进行查询时,极低概率发生无法查询的问题。

具体表现为某个特定的网站(每次不相同)一段时间内dns解析失败,过一段时间(往往是几分钟)之后恢复。重启客户端可以马上恢复。

假设出问题的域名是example.com,出现问题时nslookup example.com结果为SERVFAIL,使用dig @127.0.0.1 -p 15353 example.com查询无返回IP地址(127.0.0.1:15353为xray-core DNS入站监听地址),但是用dig @8.8.8.8 example.com时可正常解析(xray-core dns上游配置的也是8.8.8.8,开了udp透明代理)。尝试在dig后面加上+tcp使用tcp查询127.0.0.1:15353,也是同样无法解析。

客户端和服务端均无法抓取到有价值的日志。

由于此问题发生概率极低(2-3天一次,一次仅针对一个域名,且能在1-3分钟内自动恢复,重启客户端马上恢复),且无法稳定复现,故优先级较低,请开发者有时间时再尝试处理此问题。由于大部分时间可以正常工作,并且重启之后马上恢复,故认为此问题与特定客户端和服务器配置无关,不贴出具体配置。

xsm1997 avatar Aug 16 '22 18:08 xsm1997

同样经常碰到此问题, 发生后只能重启xray, 看起来像是内置DNS缓存了无效的DNS查询结果, 如果能加个“是否仅缓存有效DNS结果"选项就好了,

` ➜ ~ dig abcdefg123999888.com

; <<>> DiG 9.10.6 <<>> abcdefg123999888.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 64282 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION: ;abcdefg123999888.com. IN A

;; Query time: 398 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Tue Sep 13 09:58:43 CST 2022 ;; MSG SIZE rcvd: 38

➜ ~ dig abcdefg123999888.com

; <<>> DiG 9.10.6 <<>> abcdefg123999888.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 57121 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION: ;abcdefg123999888.com. IN A

;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Tue Sep 13 09:58:45 CST 2022 ;; MSG SIZE rcvd: 38 `

如上所示:

  1. xray监听本地53端口.
  2. 查询一个不存在A记录的域名A记录, 返回了空的结果, 然后内置DNS把这个结果缓存了, 再次查询时直接从缓存中(0 msec )返回了这个结果. 这是正常情况下的工作流程.
  3. 如果正常域名的第一次DNS查询时由于各种原因(网络抖动/GFW/远端服务暂时不可用)导致查询失败, 则这个失败的DNS结果同样会放入缓存, 后续所有针对此域名的DNS查询永远都不会有机会得到正常DNS结果. 这是目前非正常情况下的工作流程.

现在缺少一个“是否仅缓存有效DNS查询结果"的参数和功能.

gubiao avatar Sep 13 '22 02:09 gubiao