目录
godnsproxy v1.0.1 发布,一个高效快速的dns缓存服务器
Godnsproxy
注:本项目基于AdGuardTeam的 Dnsproxy 项目fork过来,并精心调优,删减瘦身,得到一个更快,更轻便的暴力美学dns缓存服务器
修改变动如下:
- 移除了非必要的lock机制,无锁,所以更快
- 优化了并发dns查询机制,更快的返回查询结果,并进一步降低CPU,内存占用
- 去除了不合理的并发量限制,基于前两项的优化,让系统有能力拿掉限制,只要你机器资源不差,来多少,接多少,处理多少请求
- 引入goroutine 缓存池机制,避免瞬时高并发,go 协调不过来,预先预热goroutine worker, 让业务运行效率更高,因为不需要分配新的goroutine,会充分利用已有的pool
- 引入 dial keepalive,基于tcp相关的upstream,都可以从中获益,建立连接所需时间更短
- 设置更长的deadline,理论上,可以保持更长的连接,查询就更少概率建立全新的连接,在已有的连接上查询,不是更快么
- 屏蔽掉ipv6, 大强国自有那国情在此,ipv4 估计还能玩10年
- 删减了部分逻辑,不需要的逻辑拿掉,进一步降低内存占用
- 支持golang 1.19,因为go 1.19 的内存机制更新了,所以为什么不用最新的go版本呢?上游AdGuardTeam截至到目前,还没支持go 1.19,而我已经支持了
再次感谢AdGuardTeam 团队。我估计我这个暴力修改,他们是不会认可的。 但是不管怎么说,我自己用的快乐就行了。
安装使用
下载 预编译的二进制文件,是最快的。
然后下载配置文件实例
https://github.com/godnsproxy/godnsproxy/blob/master/config.yml
到你本地,比如我的启动命令是
/Users/nomore/tmp/godnsproxy --config-path=/users/nomore/tmp/config.yml
默认godnsproxy启动会监听:53端口,你用dns查询工具,比如dig, 可以验证godnsproxy是否正常工作
$ dig www.baidu.com
; <<>> DiG 9.10.6 <<>> www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 43792
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.baidu.com. IN A
;; ANSWER SECTION:
www.baidu.com. 60 IN CNAME www.a.shifen.com.
www.a.shifen.com. 60 IN A 112.80.248.75
www.a.shifen.com. 60 IN A 112.80.248.76
;; Query time: 31 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Wed Jul 13 17:02:41 CST 2022
;; MSG SIZE rcvd: 101