[发布]Java实现的DNS服务器BlackHoleJ

2013-06-14 20:17:15 +08:00
 code4craft
写BlackHoleJ是因为公司内网需要,一般DNS服务器配置太复杂。

BlackHoleJ是一个Java实现的轻型DNS(代理)服务器。特点是比一般DNS服务器配置更简单,可使用hosts格式进行域名配置,并支持缓存,也可以多DNS代理。

BlackHoleJ还可以通过特征判断的方式,防止DNS污染。

BlackHoleJ缓存模式下可达到50000qps,跟BIND相当。

地址:https://github.com/code4craft/blackhole

BlackHoleJ还有一个Web管理套件hostd,用户可以使用这个Web页面管理自己独立的域名配置(作用与绑hosts文件是类似的,可以支持绑hosts不方便的设备)。

hostd地址:http://code4craft.github.io/hostd
4434 次点击
所在节点    分享创造
6 条回复
tititake
2013-06-14 20:51:16 +08:00
如果和pdnsd比较的话,有什么优势?
niko
2013-06-14 20:54:10 +08:00
貌似V2EX上JAVA的不多?支持一下
code4craft
2013-06-14 23:08:06 +08:00
@tititake 呃,其实写BlackHoleJ之前不知道pdnsd...

看了一下,pdnsd功能很强大,还有uptest这些,毕竟10年了嘛,占用资源也少(我测试下来只有几百K),但是配置稍微繁琐一点,一个DNS cache还要google一番是比较费劲的。

BlackHoleJ设计就是给懒人用的,比如你想自建一个防DNS污染的东东,又在公司内网,有些地址需要拦截,使用BlackHoleJ只需要把公司内网DNS配到第一个就可以了,就一行配置。

BlackHoleJ防污染用的是UDP+持久化污染地址黑名单,理论上比TCP快。

性能上我比较了下,两个响应都在0ms以下,pdnsd好像直接用的文件缓存,BlackHoleJ用了内存缓存,关闭时才持久化。qps分别是18000和50000,不过好像也没什么意义,都够用了。

其实最重要的,本来也是学习的态度做的这个,跟一个维护了10年的项目也没啥可比性。至于重复造轮子,见仁见智了,毕竟也没人用Java写过这个嘛。
tititake
2013-06-15 09:44:08 +08:00
@code4craft 了解了,以前用dnsmasq,前一阵想试试tcp的dns防污染就换了pdnsd。多个选择确实也不错,不过java的基础网络服务确实少见,算是填补空白了吧,呵呵。
code4craft
2013-06-15 10:15:57 +08:00
@tititake 嗯,Java没法接触底层的东西,不过DNS在应用层,还算是可以处理的范围。

其实写的时候是把它当成一个Web服务器的架构来写的,参考了一些Jetty的设计。以后会更偏重处理逻辑吧,比如所有配置文件都是修改即生效,还有能够根据客户端IP来进行不同的DNS解析,这算是一个不同么?呵呵。
romotc
2014-03-06 17:14:12 +08:00
想问下,这个能实现只能dns解析吗?

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

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

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

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

© 2021 V2EX