国内开源DNS之dnspod-sr测试例子

早之前在DNSPOD的官方博客里就看其开源了一款号称秒杀BIND的DNS软件---dnspod-sr 。做为国内最大的DNS解析商,自然其在DNS块有一定的造诣,不过这么久时间过去了,关于dnspod-sr 也只是零零散散的在一些网站上看到过互相转载抄袭的文章。也去过DNSPOD-sr在git 上的项目页,里需的wiki 并不太多内容,而目前由于在了解rhel7下的unbound,所以这里顺便在测试机上玩下dnspod-sr,做一下对比。

以下先引用下其在github上介绍,dnspod-sr 是一个运行在 Linux 平台上的高性能的递归 DNS 服务器软件,具备高性能、高负载、易扩展的优势,非 BIND 等软件可以比拟。其具有以下特性:

高性能,比所有流行的开源 DNS 软件性能高出2倍以上
安全,能抵御一般攻击
稳定,有效降低解析失败率
主动刷新缓存,响应速度更快
易于扩展,非常容易部署
防污染,能够正确解析被污染域名
先不看这个,我们先看下如何使用起来。

一、安装运行

git clone https://github.com/DNSPod/dnspod-sr.git
cd dnspod-sr
cd src
make
./dnspod-sr
从其安装运行上来看,有点简陋

二、配置文件

在解开的根目录会有三个配置文件:records.z、root.z、sr.conf ,这个具体也可以查看源码:

# more src/config.h
#ifndef __CONFIG_H__
#define __CONFIG_H__
#define SR_CONFIG_FILE "../sr.conf"
#define SR_ROOT_FILE "../root.z"
#define SR_RECORDS_FILE "../records.z"
#endif
1、sr.conf配置文件

sr.conf 默认为主配置文件,启动时自动会读取该配置文件的内容。其中主要分为xfer部分和log_path部分。xfer部分为特定域名指定DNS服务器,最后一行以`:`结束。如下为一些外国网站指定了DNS为8.8.8.8(google DNS):

googleusercontent.com.:8.8.8.8
google.com.:8.8.8.8
itil.com.:10.6.18.41
facebook.com.:8.8.8.8
twitter.com.:8.8.8.8
flickr.com.:8.8.8.8
log_path部分用于指定日志文件的位置,按照默认配置没有日志生成。

2、records.z配置文件

该配置文件的做用暂未确认。

3、root.z 配置文件

该配置文件用于配置相关记录,如这里增加几台A记录,如下:

abc.com.                86400   IN      A       192.168.0.102
www.abc.com.       86400    IN     A         192.168.0.110
将别一台主机的DNS服务指定为运行dnspod-sr的主机IP后,ping上面两个域名 ,结果如下:

[root@361way.com ~]# ping abc.com
PING abc.com (192.168.0.102) 56(84) bytes of data.
64 bytes from 192.168.0.102: icmp_seq=1 ttl=64 time=0.062 ms
64 bytes from 192.168.0.102: icmp_seq=2 ttl=64 time=0.068 ms
[root@361way.com ~]# ping www.abc.com
PING www.abc.com (192.168.0.110) 56(84) bytes of data.
64 bytes from 192.168.0.110: icmp_seq=1 ttl=64 time=0.200 ms
64 bytes from 192.168.0.110: icmp_seq=2 ttl=64 time=0.309 ms
该配置文件中默认已有N条记录,这些记录可以删除,但不删除估计会增加解析速度。

4、forward转发

默认dnspod-sr 可以请求转发,当配置记录在内存hash表和root.z中都找不到时,会通过默认配置的上级DNS服务器查找 。默认上级DNS的配置见如下init.c 文件中,源代码如下:

read_config(config, (char *)s->logpath, s->forward, g_nameservers);
    // add default dns server 8.8.8.8, 114.114.114.114
    if (g_nameservers[0] == NULL) {
        assert(g_nameservers[1] == NULL);
        g_nameservers[0] = strdup("8.8.8.8");
        g_nameservers[1] = strdup("8.8.4.4");
    }
    if (g_nameservers[1] == NULL) {
        if (strcmp(g_nameservers[0], "8.8.8.8") == 0) {
            g_nameservers[1] = strdup("8.8.4.4");
        } else {
            g_nameservers[1] = strdup("8.8.8.8");
        }
    }
三、其他

其解析一个域名的原理思维图如下:

从DNSPOD官方博客来看其引入本地内存hash表缓存,可以加快本地解析速度 。其中几个支撑模块的做用分别如下:

net:网络的各种操作接口,完成socket的相关操作和数据收发。
storage:内存存储模块,为解析记录缓存和quizzer列表提供增、删、改、查功能支持。
memory:内存池的相关操作接口,用于内存池的创建、分配和释放。
io:物理读写模块,包括加载配置文件和记录日志等功能。
datas:红黑树的相关实现接口,用于自动刷新即将过期的记录。
utils:一些杂项操作接口都丢在这里了,如获取随机数据、大小写转换等操作
由于官方和wiki里找到的文档相当少,而本身对于C语言不是很了解。建议懂C语言的人可以看下源代码,代码并不多。但对于官方所宣称的性能较BIND、unbound牛X多少倍云云 。这个我们没必要去深究。从github上源代码更新的速度来看,将近一年左右没有什么代码更迭,感觉上应该又是一个阳痿的产品。

相较之前网上看到吹嘘多少还是有些失望,至少在生产环境上我不会选择dnspod-sr,考虑到官方文档的完备度、项目的发展持续性,个人的选择会是unbound ---  bind ---- powerdns/mydns ---- 最后才会考虑选择dnspod-sr 。

时间: 2024-07-29 12:09:25

国内开源DNS之dnspod-sr测试例子的相关文章

smarty简单测试例子

smarty简单测试例子      <?phprequire 'smarty/libs/Smarty.class.php';$smarty = new Smarty;$smarty->template_dir="smarty/templates/templates";$smarty->compile_dir="smarty/templates/templates_c";$smarty->config_dir="smarty/temp

致国内开源软件作者的一封信

很庆幸,我们居然没有在世界末日消失,希望开源软件作者能耐心的看完全文! 开源软件作者辛辛苦苦开发一个开源软件目的是什么呢?可能每个人目的都不太一样,但有一样是可以肯定的,希望越来越多的人使用,在使用的基础上帮忙改进,而使用的人数到了一定级别或许能产生某种商业价值. 关于开源软件和商业价值方面是个世界难题,尽管有成功的案例,但毕竟还是太少了,在这不予讨论. 那么我们就从开源软件作者的共同的.最基础的目标出发,也就是如何让越来越多的人使用这个开源软件的话题说起. 讨论之前先理清楚几个名词: 角色:

启动报错-使用dubbo写测试例子出现问题,无法启动,求弄过dubbo的高手帮忙看看

问题描述 使用dubbo写测试例子出现问题,无法启动,求弄过dubbo的高手帮忙看看 启动提供方没什么问题,启东消费方就是报错,如下 这是怎么回事啊,急急急 解决方案 参考Dubbo 入门实例 本地伪集群测试Demo 没有提供者,就是说程序没有把服务注册到zookeeper 解决方案二: 提供者配置的端口有没有暴露出来

PowerDNS v3.0 RC1发布 跨平台开源DNS服务组件

PowerDNS 是一个跨平台的开源DNS服务组件,PowerDNS同时有Win32和Linux/Unix的版本. PowerDNS在Win32下使用 Access的mdb文件记录DNS信息,而在Linux/Unix下则使用MySQL来记录DNS信息.无论是mdb亦或MySQL,备份是非常方便的 事情. PowerDNS 3.0 完全支持 DNSSEC,提供自动化签名.翻转(rollovers).和证书维护,其他方面还包括支持.TSIG.MyDNS-compact 后端.also-notify.

国内开源社区软件 PHPWind 团队已解散

2月11日消息 近日有消息称,国内开源社区软件phpwind团队已解散. 公开资料显示,phpwind简称PW,是一个基于PHP和MySQL的论坛程序.其前身是ofstar,发布于2004年.2008年5月phpwind加入阿里巴巴集团,2009年12月确认被阿里巴巴集团收购,截至2013年12月,phpwind项目品牌由阿里云计算有限公司拥有,软件全面开源免费. 近期,站长圈有消息称,phpwind团队已解散.业内人士卢松松表示,phpwind被阿里收购后,曾组建新团队重新开发了软件,后因用户

PHP中的reflection反射机制测试例子_php实例

Java类反射应用得非常广泛几乎是所有框架的最核心部分,PHP程序员似乎从不关心反射.尝试着用java的思想去理解php的反射,跟java基本上基本一致.参考了php手册:http://www.php.net/manual/zh/book.reflection.php. ReflectTest.php: <?php   class ReflectTest {       /**      * 用户ID      */     private $userId;       /**      * 用

除了贡献代码 Amaze UI首次探索国内开源商业模式

8月27日,由中国最大的HTML5社区--HTML5梦工场主办的2016HTML5峰会"iWeb峰会"在北京国际会议中心召开.Amaze UI 作为前端框架,受邀参与了本次盛会本届峰会,并分享了Amaze UI在前端开发效率上的实践经验及在开源发展模式探索. 与时俱进, 多版本产品组合满足开发者多业务需求  Amaze UI是HTML5企业移动化解决方案供应商云适配旗下三大产品之一.自2014年上线后,目前已经拥有了近50多万开发者用户,形成了一个国内较大的技术交流社区,在Github

PDNS-Admin v1.2发布 跨平台的开源DNS服务组件

PowerDNS 是一个跨平台的开源DNS服务组件.PowerDNS Administrator 或者 PDNS-Admin ,是一个基于 Web 的 PowerDNS 管理程序.新版本增加对新的数据库的支持,修复了一些bug,还有新功能,修复了安全方面的问题. The biggest update for this release is the inclusion of MySQLi, pgSQL, and SQLite3 support. All of these provide more

[20150224]ITL不足的测试例子.txt

[20150224]ITL不足的测试例子.txt --前几天看Apress.Oracle.Database.Transactions.and.Locking.Revealed.1484207610.pdf,发现P39页的测试例子,感觉不对,重复做 --一次. SCOTT@test> @ver1 PORT_STRING                    VERSION        BANNER ------------------------------ -------------- ---