发一个改进版 dnsmasq,含预编译适用于 ar71xx 的 OpenWrt 包

2015-02-21 09:49:22 +08:00
 infinet

新年好!

大家有没有发现dnsmasq配置文件里的ipset,address,server条目一多,路由器CPU使用率就上去了。往路由器/etc/dnsmasq.d/目录下放一个含几百上千条server的配置文件,试试就知道了。

这里介绍的是针对这个问题的改进版。原版dnsmasq处理这几个配置项的方法是遍历链表,一个dns查询可能要多次遍历一个几千上万项的链表,自然需要匹配的域名越多越慢。这个部分现在改成查询hash表,效果很明显:
在一个32M内存/500MHzCPU路由器上用dnsblast作压力测试,原版dnsmasq每秒接受90-100个dns请求时CPU使用率就飙升到近100%, 而改进版这时CPU使用率在20%上下。我估计如果配置文件再大些,可能每秒几十个甚至十几个dns查询就能让原版dnsmasq爆表。

下载在https://github.com/infinet/dnsmasq ,有适用于OpenWrt 12.09和14.07的预编译包。下载后复制到路由器/tmp目录,先opkg remove dnsmasq删除原来的dnsmasq,然后opkg install /tmp/xxxx.ipk,安装前最好备份一下/etc/dnsmasq.conf和/etc/config/dhcp。

24840 次点击
所在节点    分享创造
58 条回复
Jasonkarl
2017-02-28 16:13:48 +08:00
Jasonkarl
2017-02-28 16:15:33 +08:00
另外 2.72 版本貌似正常
infinet
2017-03-01 09:20:30 +08:00
Jasonkarl
2017-03-01 13:37:44 +08:00
@infinet 我不太懂, 2.77test4 还是恩山的一位朋友帮我才编译进 lede 的,他自己也用了,出现了同样的问题,你修改的 2.72 版本没有这些问题。
Jasonkarl
2017-03-01 21:45:14 +08:00
@infinet 恩山的朋友给我说了下,我突然大彻大悟了……知道怎么回事了,已经在弄新固件了,看看这个怎么样。
Jasonkarl
2017-03-02 17:16:04 +08:00
@infinet 62f9c0d47099f46cac941ce0ea103921999d244f 正常使用中……
infinet
2017-03-04 10:24:48 +08:00
@Jasonkarl 我用类似的配置跑了几天,没能重现你的问题。你是用 github 上最新的 commit 吗?
Jasonkarl
2017-03-04 15:24:21 +08:00
@infinet 我现在用的是 62f9c0d47099f46cac941ce0ea103921999d244f
没有出现问题,以前出问题的是 43b63992572a0ebd114534c8e6abe89c58658b54
f5cdd6ed76e2426f41dc0f43b6d922a0aaa03a92 还没有用过……
Jasonkarl
2017-03-05 12:13:52 +08:00
f5cdd6ed76e2426f41dc0f43b6d922a0aaa03a92 未出现问题。 不过偶尔卡顿不知道是不是我网络的问题。
hzqim
2017-03-22 21:40:55 +08:00
谢谢楼主,能否加一个功能?
加入正则表达式支持,谢谢。
mattx
2018-08-28 14:34:41 +08:00
有个疑问, 现在一般用 ip chnroute 来做 ipset 规则, 然后 iptables 来转发, dnsmasq 这里拦截的规则挺少的, 问下楼主那么多规则一般是什么地方使用.
NG6
2018-09-19 21:21:15 +08:00
@mattx 路由器的 SS 插件,跑大陆白名单的时候路由器压力很大
mattx
2018-09-19 22:01:39 +08:00
@NG6 哦 大陆白名单应该是按照 ip 来分类吧, dns 方面用 chinadns 来解决 cdn 问题, 你意思是 dns 用 dnsmasq 来分类?
brMu
2018-12-14 16:07:14 +08:00
armbian,已经编译安装成功,正常运行,特地来反馈,并表示感谢!
brMu
2019-02-27 13:53:38 +08:00
老哥,all-servers 参数无效,我已经在 github 上反馈了,你能看到吗?
infinet
2019-02-27 21:17:17 +08:00
写这个只是为了解决超大配置文件的效率问题。all-servers 没时间去研究,抱歉啊。
reguser12005
2020-02-26 12:24:13 +08:00
@infinet 您好, 最新版的 dnsmasq 还需要打您的补丁吗?
infinet
2020-02-27 02:48:51 +08:00
补丁不能用到最新版。大部分要重写。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/172010

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX