XDNS: 递归 DNS 解析器执行的额外 A 查询会改变 TXT 客户端的方法,并破坏传输
- 廉正要求
- 我阅读了问题模板中的所有评论,并确保这一问题符合要求。
- [x]我确认我读过文件,理解我写的所有配置项目的含义,没有堆积看起来有用的选项或默认值.
- 我提供了完整的配置和日志, 而不是仅仅根据我自己的判断提供短片。
- 我搜索了问题 没有发现任何类似的问题。
- 这个问题可以在最新版本中成功复制
说明
XDNS客户端被明确配置为使用TXT: 贾森 "解脱者": [ "t.ext+udp:txt:127.0.0.1:15354" (中文(简体) ). [ . ]
一些递归的 DNS 服务器在处理一个 TXT 查询时,会独立地将相同的 QNAME 的额外 A 查询发送给权威服务器. 例如,AdGuard发送TXT,再发送A,再发送TXT. XDNS将所有三个查询都视为真正的XDNS查询,并且由于MTU的高位,显然无法回复A查询.
当XDNS无法返回对A查询的回复(这是我的假设)时,它们开始在内存中积累,而Xray-core的内存用量会由千兆字节增长. 就我而言,总共收到大约5 000个查询,记录和档案管理的使用也因此大大增加。
目前服务器侧工作轮廓为:
贾森
"域志":["t.
这拒绝A查询,之后至少内存出漏会停止.
- 复制方法
我准备了一个Python剧本 假装是DNS解析器
- 下载最新的Xray-core预发版(在编写本报告时,为26.7.28)。
- 将 ' Client.json ' 和 ' server.json ' 下载到同一台机器,并启动两个Xray-core实例。
- 开始`解决.py': [Python]
#!/usr/bin/env 蟒蛇3 输入。 未来 导入套接字 导入结构 导入线索 导入时间
听 = ("127.0.0.1",15354) (中文(简体) ). XRAY = ("127.0.0.1",15353) (中文(简体) ). 工人=256人
def 类型 offset( packet) : 页:1 数据包中 : 页:1 页:1
def q类型( 包) : 偏移 = 类型 相抵(套件) 返回 struct.unpack ("!H"), 数据包 [抵消: + 2] [0]
有 type(包,值)的 def : 偏移 = 类型 相抵(套件) 返回包 [: offset] + struct.pack ("!H",值) + 包 [offset + 2:]
def 重放( query, 客户端) : 上层 = socket(socket.AF INET, socket.SOCK DGRAM) 上层 : 上游. 设置超时(2) 尝试 : 上游. sendto (query, XRAY) # 原始TXT. 时间. sleep( 0. 120) 上. sendto(有 type(query, 1),XRAY)#辅音A. 时间. sleep( 0.078) 上游. sendto (query, XRAY) #重复的TXT.
范围为: 答复, =上游.recvfrom(65535) 如果q类型(答复) == 16: 收听者. sendto( 响应, 客户端) 换行 除超时错误 : 打印 (“ 上游超时” , 冲出= True) . . . . . . .
内容来源: XTLS/Xray-core