zfl9 / chinadns-ng

chinadns 重构增强版,支持域名分流、ipset/nftset、UDP/TCP/DoT
GNU Affero General Public License v3.0
1.14k stars 188 forks source link

verdict缓存、dns缓存 持久化 #183

Closed zfl9 closed 4 months ago

zfl9 commented 4 months ago

新增两个参数

未指定 *cache-db 选项时,如果执行手动 dump(SIGUSR1信号),则使用以下路径:

InspoOnU commented 4 months ago

配置文件里加了verdict-cache-db /tmp/cdng.db这行就无法启动。显示[opt.zig:205 opt_config] '/etc/FreedomNet/chinadns-ng.conf': unknown option: verdict-cache-db /tmp/cdng.db

这样写可以启动:verdict-cache 65535,/tmp/cdng.db。启动时显示[verdict_cache.zig:76 load] open(/tmp/cdng.db): (2) No such file or directory。但是退出时不会dump缓存文件。

不知道哪里出错了

zfl9 commented 4 months ago

不着急,之前的两个提交要修改,之前的设计不太好。*-db选项是刚刚想的,还没提交。

InspoOnU commented 4 months ago

好的

zfl9 commented 4 months ago

试试最新的 dev 分支,--verdict-cache-db <path> 已支持,行为如上所述。--cache-db 等过两天有空了再添加,先发个版本,支持 verdict cache 持久化。 @InspoOnU

InspoOnU commented 4 months ago

试试最新的 dev 分支,--verdict-cache-db <path> 已支持,行为如上所述。--cache-db 等过两天有空了再添加,先发个版本,支持 verdict cache 持久化。 @InspoOnU

配置文件里加上了。 bind-addr 127.0.0.1 bind-port 50001 china-dns tcp://127.0.0.1#53 trust-dns tcp://127.0.0.1#50002 chnlist-file /etc/FreedomNet/CN.list gfwlist-file /etc/FreedomNet/Abroad.list add-tagchn-ip ipset-name4 china_ip_route ipset-name6 china_ip6_route filter-qtype 64,65 verdict-cache 65535 verdict-cache-db /etc/FreedomNet/chinadns.db noip-as-chnip

直接chinadns-ng -C /etc/FreedomNet/chinadns-ng.conf -v运行,ctrl+c结束,但是没看到dump的文件。 2024-07-19 15:10:01 I [main.zig:146 main] local listen addr: 127.0.0.1#50001 2024-07-19 15:10:01 I [groups.zig:123 on_start] tag:chn upstream: tcp://127.0.0.1 2024-07-19 15:10:01 I [groups.zig:123 on_start] tag:chn add ip to: china_ip_route,china_ip6_route 2024-07-19 15:10:01 I [groups.zig:123 on_start] tag:gfw upstream: tcp://127.0.0.1#50002 2024-07-19 15:10:01 I [dnl.c:503 dnl_init] tag:gfw loaded:24988 added:24985 cost:557.854k 2024-07-19 15:10:01 I [dnl.c:503 dnl_init] tag:chn loaded:82728 added:82515 cost:1650.247k 2024-07-19 15:10:01 I [dnl.c:510 dnl_init] L1 items:106506 lists:73275 buckets:131072 cost:512.000k 2024-07-19 15:10:01 I [dnl.c:514 dnl_init] L2 items:994 lists:805 buckets:2048 cost:8.000k 2024-07-19 15:10:01 I [dnl.c:516 dnl_init] total memory cost (page-aligned): 2732.000k 2024-07-19 15:10:01 I [main.zig:146 main] ip test db: china_ip_route,china_ip6_route 2024-07-19 15:10:01 I [main.zig:146 main] default domain name tag: none 2024-07-19 15:10:01 I [main.zig:146 main] enable verdict cache, capacity: 65535 2024-07-19 15:10:01 I [main.zig:146 main] response timeout of upstream: 5 2024-07-19 15:10:01 I [main.zig:146 main] accept no-ip reply from chinadns 2024-07-19 15:10:01 I [main.zig:146 main] printing the verbose runtime log 2024-07-19 15:10:08 I [server.zig:206 service_tcp] new connection:7 from 127.0.0.1#47272

再次运行判定结果也没缓存

zfl9 commented 4 months ago

我处理下吧,让 CTRL+C 和 kill 都触发正常的“退出”流程,注意,kill 其他信号不行(特别是 kill -9)

InspoOnU commented 4 months ago

我处理下吧,让 CTRL+C 和 kill 都触发正常的“退出”流程,注意,kill 其他信号不行(特别是 kill -9)

懂了,只是测试的时候这样启动。openwrt的procd可以正常触发dump。

zfl9 commented 4 months ago

处理了 ctrl + C (SIGINT 信号),可以测试下,我测试正常。

InspoOnU commented 4 months ago

处理了 ctrl + C (SIGINT 信号),可以测试下,我测试正常。

功能一切正常。

Smallthing commented 4 months ago

刚刚好,这个功能能不能考虑更复杂一点,国内国外分开。。。 https://www.ithome.com/0/783/032.htm 国内越来越多公共 dns 的流控厉害了,自动刷 dns 很容易到达上限。。

zfl9 commented 4 months ago

国内外分开是指?

Smallthing commented 4 months ago

例如,国内 dns 不进行自动刷新,缓存时间变长,错峰,之类的,或用时间轮算法来查询之类的。总之,这些个 dns 的 qps 给的低,要省着用了。

Smallthing commented 4 months ago

当然,这个要求有点复杂了,也不是程序本身的问题。

zfl9 commented 4 months ago

你是说上面那个阿里dns限流问题?这个到时候再观察究竟什么情况吧,现在我觉得还早,也许我们理解错了?如果真这么限流,谁还用它的dns。。

另外,你说的这个问题与缓存持久化没关联。

zfl9 commented 4 months ago

见最新 2024.07.20 版本。

Leung808 commented 4 months ago

你是说上面那个阿里dns限流问题?这个到时候再观察究竟什么情况吧,现在我觉得还早,也许我们理解错了?如果真这么限流,谁还用它的dns。。

另外,你说的这个问题与缓存持久化没关联。

其实腾讯去年就开始限速了,20 QPS,只能选择付费版才会不限速。 我这里遇到过被限制的情况,导致某些国内网站用 chinadns-ng 解析的结果是海外 IP 而不是国内 IP。 目前用的阿里,阿里限速就打算用字节的了。

sao321 commented 3 months ago

你是说上面那个阿里dns限流问题?这个到时候再观察究竟什么情况吧,现在我觉得还早,也许我们理解错了?如果真这么限流,谁还用它的dns。。

另外,你说的这个问题与缓存持久化没关联。

其实腾讯去年就开始限速了,20 QPS,只能选择付费版才会不限速。 我这里遇到过被限制的情况,导致某些国内网站用 chinadns-ng 解析的结果是海外 IP 而不是国内 IP。 目前用的阿里,阿里限速就打算用字节的了。

我记得chinadns-ng的原理不是抢答吗?哪个解析的快用哪个。 这样实际可以国内DNS1用阿里(阿里节点多,有12个),国内DNS2用字节(字节只有北京),假设用户在成都,由于阿里在成都有接口响应是5ms以内,那么在QOS限速前阿里答得快实际使用阿里的结果。但是如果每秒超了20个请求被限速了,字节北京的响应快过了阿里,实际查询结果使用的是字节,除了多了几十ms外没有实际使用影响。

zfl9 commented 3 months ago

你是说上面那个阿里dns限流问题?这个到时候再观察究竟什么情况吧,现在我觉得还早,也许我们理解错了?如果真这么限流,谁还用它的dns。。

另外,你说的这个问题与缓存持久化没关联。

其实腾讯去年就开始限速了,20 QPS,只能选择付费版才会不限速。 我这里遇到过被限制的情况,导致某些国内网站用 chinadns-ng 解析的结果是海外 IP 而不是国内 IP。 目前用的阿里,阿里限速就打算用字节的了。

我记得chinadns-ng的原理不是抢答吗?哪个解析的快用哪个。 这样实际可以国内DNS1用阿里(阿里节点多,有12个),国内DNS2用字节(字节只有北京),假设用户在成都,由于阿里在成都有接口响应是5ms以内,那么在QOS限速前阿里答得快实际使用阿里的结果。但是如果每秒超了20个请求被限速了,字节北京的响应快过了阿里,实际查询结果使用的是字节,除了多了几十ms外没有实际使用影响。

是的,同一组内的 dns upstream 是抢答的。确实可以配置多个 upstream 来缓解限速问题。