chazikai24
chazikai24
> 目前我也是在chinadns上面套娃smartdns,个人感觉chinadns小巧、配置简单,更适合作为科学插件的套件,其作者也开发有其他科学上网常用的套件如dns2tcp、ipt2socks等,所以chinadns目标比较明确,基本就是为科学上网而生;而功能更强大的smartdns则更适合做上一层的dns服务器。 目前用iptable完全正常,难怪之前用22.03的时候没感知到问题,最近升级了24.10开始,才发现重启完服务第一次打开网页异常卡顿的问题。用chinadns套娃,就是smartdns-ui的客户端全显示成127.0.0.1了。如果用smartdns接管dnsmasq,就能正常显示客户端。我靠这个发现tplink的nvr,几秒钟就请求一次baidu.com或者qq.com,一晚上刷了几万条记录,我都服了
passwall,采用nftable,dns分流改用chinadns-ng,套娃smartdns,模式为大陆白名单模式,dns解析速度正常。 同时nft add到passwall_chn正常无报错。 ``` root@iStoreOS:~# nft add element inet passwall passwall_chn { 23.185.0.4 } root@iStoreOS:~# time nft add element inet passwall passwall_chn { 23.185.0.5 } real 0m 0.03s user 0m...
> 我这里测试是没有问题的。设置下面的参数,打开调试看看吧。 nftset-debug yes 默认情况下smartdns设置nftset也是不判断返回值的,是直接设置的,不会等待是否成功的情况。 > > 不清楚你的场景是smartdns用nftset一直都慢,还是运行一段时间后慢。 从smartdns代码层面,没看到明显阻塞的地方。 > > 只有设置了nftset超时的情况下,因为要刷新超时时间,会删除已经存在的记录,然后再添加。 > > 最好你能加一下log看看哪个函数慢了。 我目前的环境是istoreos24.10最新版,安装passwall与smartdns,smartdns端口53接管dnsmasq,passwall模式大陆白名单模式。   下午我把dnsmasq从2.90-r4升级到了2.92-r4,发现nft add不会报错了,打开网页也正常了,dns延时也正常了。 但是晚上查看ui的时候,发现平均时间涨了很多,如下图,测试nft add命令又开始报错无法插入了。 我不太懂C语言,如果大佬你愿意改代码,我可以进行测试。 
> nftset-debug yes ``` [2025-06-14 08:30:24,357][DEBUG][ ipset_nftset.c:47 ] NFTSET-MATCH: domain: www.jd.com, nftset: inet passwall passwall_chn, IP: 36.150.39.3 [2025-06-14 08:30:24,401][ERROR][ nftset.c:587 ] nftset add failed, family:inet, table:passwall, set:passwall_chn, error:File exists [2025-06-14...
> 目前看是开启了nftset的interval,linux内核对这个操作比较耗时。 你可以把interval去掉看看。 > > smartdns这边因为每个IP会单独设置一次,导致等待时间可能翻倍。 后面看看优化下,改成批量设置IP看看有没有改善。 interval不是把多个ip组合成一个ip段吗?我马上进行测试看看,请等待我的测试结果。 顺便报告一下,dnsmasq 2.92-test6修复了一个ipset/nftset的一个问题,但是我测试了最新的2.92-test13,对这个问题并没有改善。
> chinadns-ng的文档专门提到对ip add进行了性能优化避免操作延时,zig代码我也看不懂,看得懂的同学是否可以参考一下。 大佬,请教下,我修改了nftables.sh与rule_update.lua中的代码,其他的set都没问题,就set passwall_chn与set passwall_chn6的flags还是带interval,哪里还需要修改吗? ``` set passwall_chn { type ipv4_addr flags interval,timeout auto-merge timeout 2d gc-interval 2d ``` **更新** 搞定了,直接读取了chnroute.nft,里面写死了set的flags。
> 目前看是开启了nftset的interval,linux内核对这个操作比较耗时。 你可以把interval去掉看看。 > > smartdns这边因为每个IP会单独设置一次,导致等待时间可能翻倍。 后面看看优化下,改成批量设置IP看看有没有改善。 因passwall的chnroute采用的是IP段形式而非单个IP,故去掉flags的interval之后,chnroute无法加载,nftable passwall_chn的element为空。当解析国内DNS之后,ip会add到nftable中。目前因element记录较少,dns解析延迟正常。 ``` root@iStoreOS:~# nft list set inet passwall passwall_chn table inet passwall { set passwall_chn { type ipv4_addr timeout 2d gc-interval 2d...
> chinadns-ng的文档专门提到对ip add进行了性能优化避免操作延时,zig代码我也看不懂,看得懂的同学是否可以参考一下。 我也不太懂,他的核心优化代码应该是下面这块。他定义了IP_N=10,代码逻辑应该是把ip写入缓冲区,当计数达到10或者超过10的时候,进行一次批量写入nftable。 目前没有办法了,每个IP都去nft add一次,并检查更新timeout,太消耗时间了。等作者优化smartdns吧,之后我再测。 @pymumu @lwb1978 ``` void ipset_add_ip(struct ipset_addctx *noalias ctx, const void *noalias ip, bool v4) { struct nlmsghdr *msg = a_msg(ctx, v4); if (!msg) return;...
@pymumu @lwb1978 我通过ai修改了nftset的代码,element小于10时缓存,大于等于10时批量写入nftable,测试了几天,感觉良好 https://github.com/chazikai24/smartdns/releases/tag/1.2025.v46.1.55_with_ui 附上一些日志 ``` 行 592: [2025-06-23 21:40:49,575][ INFO][ nftset.c:672 ] nftset add cache, family:inet, table:passwall, set:passwall_white, IP: 17.253.84.125 行 604: [2025-06-23 21:40:49,589][ INFO][ nftset.c:674 ] nftset add...