简介
dnspod-sr 是一个运行在 Linux 平台上的高性能的递归 DNS 服务器软件,具备高性能、高负载、易扩展的优势,非 BIND 等软件可以比拟。
特性
- 高性能,比所有流行的开源 DNS 软件性能高出2倍以上
- 安全,能抵御一般攻击
- 稳定,有效降低解析失败率
- 主动刷新缓存,响应速度更快
- 易于扩展,非常容易部署
- 防污染,能够正确解析被污染域名
问题
- 不支持PTR反解析;
- 增加配置参数文件,解决现在需要通过修改代码修改配置的问题,如- fetcher和quizzer线程数等,并可以通过动态加载部分参数实现不停机修改部分配置;
- 在最近更新中因存在问题而去掉的A记录提前组包功能;
- 红黑树如果自动刷新所有记录尚存在问题;
- 代码整理、包括风格、函数调用和无用代码清理等;
- 增加在程序崩溃时将缓存记录转储到磁盘的功能;
- 较老版本内核和32位系统的兼容性测试等。
性能
dnspod-sr 依托于 DNSPod 多年运营和优化 DNS 服务的经验,针对国内复杂的网络情况,对递归 DNS 进行了一系列的优化,比较其他开源软件,性能得到大幅提升。
测试环境
千兆网卡,4核 CPU,4G 内存,Linux 64位系统。
性能测试
dnspod-sr: 15万 qps
BIND 9.9: 7万 qps
unbound 4.7: 8万 qps
Benchmark
解决方案
架设 dnspod-sr 集群,替换各大运营商目前基于 BIND 的陈旧方案,减少运营成本
公司、学校、政府等组织内部 DNS,解析外部不可见的私有域名,提高上网速度
快速开始
下载源码:
git clone https://github.com/DNSPod/dnspod-sr.git
cd dnspod-sr
或者下载压缩包:
https://github.com/DNSPod/dnspod-sr/zipball/master
编译源码:
cd src
make
运行
./dnspod-sr
后台启动运行 nohup ./dnspod-sr >/dev/null 2>&1 &
启动报如下错误:
# ./dnspod-sr
set affinity fetcher failed, may be the cpu cores num less than (FETCHER_NUM + QUIZZER_NUM + 1)
set affinity quizzer failed, may be the cpu cores num less than (FETCHER_NUM + QUIZZER_NUM + 1)
set affinity quizzer failed, may be the cpu cores num less than (FETCHER_NUM + QUIZZER_NUM + 1)
[DBG:] dnspod-sr is successful running now!!
[DBG:] max_ele_size is 1000000 - 1808
[DBG:] server may contain 332730 useful records
[DBG:] hash_table_size is 65536
[DBG:] we have 10 hash tables
[DBG:] we have 2 fetchers,2 quizzers
dnspod-sr: author.c:438: release_qoutinfo: Assertion `val == (void *)mbuf' failed.
CPU配置太低,换一台机器就可以了。
注意:root.z的最后一行一定要一个空行,否则最后一条记录解析不到。
若指定NS服务器,需要修改配置文件:sr.conf默认配置文件为当前目录下的 sr.conf,也可以在命令行参数中指定
./dnspod-sr /path/of/sr.conf
如果需要为特定域名指定DNS服务器,以 xfer 开头:
xfer:
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
akamaiedge.net.:202.106.0.20
edgekey.net.:202.106.0.20
youtube.com.:8.8.8.8
s-static.ak.facebook.com.edgekey.net.:8.8.8.8
:
最后一行以:
结束。以上的几个域名解析请求都会中转到8.8.8.8上。
配置日志文件目录(可选)
log_path:
../log/