Xray-core
                                
                                
                                
                                    Xray-core copied to clipboard
                            
                            
                            
                        [Bug] 极低概率内置dns无法正常解析
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分钟内自动恢复,重启客户端马上恢复),且无法稳定复现,故优先级较低,请开发者有时间时再尝试处理此问题。由于大部分时间可以正常工作,并且重启之后马上恢复,故认为此问题与特定客户端和服务器配置无关,不贴出具体配置。
同样经常碰到此问题, 发生后只能重启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 `
如上所示:
- xray监听本地53端口.
 - 查询一个不存在A记录的域名A记录, 返回了空的结果, 然后内置DNS把这个结果缓存了, 再次查询时直接从缓存中(0 msec )返回了这个结果. 这是正常情况下的工作流程.
 - 如果正常域名的第一次DNS查询时由于各种原因(网络抖动/GFW/远端服务暂时不可用)导致查询失败, 则这个失败的DNS结果同样会放入缓存, 后续所有针对此域名的DNS查询永远都不会有机会得到正常DNS结果. 这是目前非正常情况下的工作流程.
 
现在缺少一个“是否仅缓存有效DNS查询结果"的参数和功能.