Closed kwokpia closed 8 months ago
@kwokpia
你好,Clash内部使用了In memory cache来缓存DNS解析结果,具体的缓存功能相关代码在
https://github.com/MerlinKodo/clash-rev/blob/dev/common/cache/lrucache.go https://github.com/MerlinKodo/clash-rev/blob/dev/dns/resolver.go
更具体的来说,resolver.go
文件的ExchangeContext
函数中实现了相关Cache查询功能
此外通过添加额外的debug日志可以看到如下记录:
time="2023-11-18T01:31:36.2150395-08:00" level=debug msg="[Rule] use default rules"
Time: 2023-11-18 01:31:36 Debug Query: ;twitter.com. IN A
Time: 2023-11-18 01:31:36 Not hit cache for: ;twitter.com. IN A
Time: 2023-11-18 01:31:36 Debug Query: ;twitter.com. IN AAAA
Time: 2023-11-18 01:31:36 Not hit cache for: ;twitter.com. IN AAAA
time="2023-11-18T01:31:36.2155446-08:00" level=debug msg="[DNS] resolve twitter.com from udp://x.x.x.x:53"
time="2023-11-18T01:31:36.2160711-08:00" level=debug msg="[DNS] resolve twitter.com from udp://x.x.x.x:53"
time="2023-11-18T01:31:36.2196092-08:00" level=debug msg="[DNS] twitter.com --> [x.x.x.x] A from udp://x.x.x.x:53"
time="2023-11-18T01:31:36.2229242-08:00" level=debug msg="[DNS] twitter.com --> [] AAAA from udp://x.x.x.x:53"
time="2023-11-18T01:31:36.2229242-08:00" level=debug msg="[DNS] twitter.com --> x.x.x.x"
time="2023-11-18T01:31:37.2951361-08:00" level=info msg="[TCP] --> twitter.com:443 match Match using PROXY"
time="2023-11-18T01:32:27.4310225-08:00" level=debug msg="[Rule] use default rules"
Time: 2023-11-18 01:32:27 Debug Query: ;www.twitter.com. IN A
Time: 2023-11-18 01:32:27 Hit cache for: ;www.twitter.com. IN A
Time: 2023-11-18 01:32:27 Debug Query: ;www.twitter.com. IN AAAA
Time: 2023-11-18 01:32:27 Hit cache for: ;www.twitter.com. IN AAAA
time="2023-11-18T01:32:27.4315287-08:00" level=debug msg="[DNS] www.twitter.com --> x.x.x.x"
time="2023-11-18T01:32:28.4678944-08:00" level=info msg="[TCP] --> www.twitter.com:443 match Match using PROXY"
可见第二次请求中使用了缓存结果,而没有发起新的DNS请求
@kwokpia
你好,Clash内部使用了In memory cache来缓存DNS解析结果,具体的缓存功能相关代码在
dev
/common/cache/lrucache.godev
/dns/resolver.go更具体的来说,
resolver.go
文件的ExchangeContext
函数中实现了相关Cache查询功能此外通过添加额外的debug日志可以看到如下记录:
time="2023-11-18T01:31:36.2150395-08:00" level=debug msg="[Rule] use default rules" Time: 2023-11-18 01:31:36 Debug Query: ;twitter.com. IN A Time: 2023-11-18 01:31:36 Not hit cache for: ;twitter.com. IN A Time: 2023-11-18 01:31:36 Debug Query: ;twitter.com. IN AAAA Time: 2023-11-18 01:31:36 Not hit cache for: ;twitter.com. IN AAAA time="2023-11-18T01:31:36.2155446-08:00" level=debug msg="[DNS] resolve twitter.com from udp://x.x.x.x:53" time="2023-11-18T01:31:36.2160711-08:00" level=debug msg="[DNS] resolve twitter.com from udp://x.x.x.x:53" time="2023-11-18T01:31:36.2196092-08:00" level=debug msg="[DNS] twitter.com --> [x.x.x.x] A from udp://x.x.x.x:53" time="2023-11-18T01:31:36.2229242-08:00" level=debug msg="[DNS] twitter.com --> [] AAAA from udp://x.x.x.x:53" time="2023-11-18T01:31:36.2229242-08:00" level=debug msg="[DNS] twitter.com --> x.x.x.x" time="2023-11-18T01:31:37.2951361-08:00" level=info msg="[TCP] --> twitter.com:443 match Match using PROXY" time="2023-11-18T01:32:27.4310225-08:00" level=debug msg="[Rule] use default rules" Time: 2023-11-18 01:32:27 Debug Query: ;www.twitter.com. IN A Time: 2023-11-18 01:32:27 Hit cache for: ;www.twitter.com. IN A Time: 2023-11-18 01:32:27 Debug Query: ;www.twitter.com. IN AAAA Time: 2023-11-18 01:32:27 Hit cache for: ;www.twitter.com. IN AAAA time="2023-11-18T01:32:27.4315287-08:00" level=debug msg="[DNS] www.twitter.com --> x.x.x.x" time="2023-11-18T01:32:28.4678944-08:00" level=info msg="[TCP] --> www.twitter.com:443 match Match using PROXY"
可见第二次请求中使用了缓存结果,而没有发起新的DNS请求
感谢回复
先决条件
版本
clash.rev-linux-amd64-cgo-v1.0.2
适用的作业系统
Linux
适用的硬件架构
amd64
配置文件
日志输出
问题描述
每建立一个连接都会重新解析代理的域名,即使代理的域名的TTl还没到期. 如日志所示,连续的两次建立连接都去解析了example.com的DNS.
复现步骤
No response