前面文章主要讲解了DNS服务,下面我们来了解下主流的DNS服务器。
1. BIND,其历史悠久,起源于1980年的加州大学伯克利分校,后来由ISC(Internet System Consortium)维护,BIND一直以来都是DNS的工业标准,是目前世界上使用最为广泛的DNS服务器了。BIND即可以做权威服务器又可以做递归服务器。目前,已集成到Linux操作系统中。
BIND有如下功能:
1)DNSSEC(DNS安全扩展)验证,保证DNS数据可信。
2)RPZ(Response Policy Zone):定制响应zone的策略,提升安全性。
3)rate-limit:限流,减少DDOS攻击中放大攻击的可能性
4)DLZ(Dynamically-Loadable Zones):支持从外部数据库获取Zone数据,如MySQL和PostgreSQL
5)Dyndb,提供了操作接口,支持在内存中动态加载外部数据库,性能要优于DLZ
6)rndc命令支持,不重启DNS服务器,动态加载配置文件、对缓存操作等内容
BIND的应用如下图所示:
BIND DNS应用
BIND可以提供企业,大学,运营商等DNS服务,加入CDN,提供高性能、安全可靠的DNS服务。
图片来源: https://www.isc.org/bind/
2.PowerDNS
PowerDNS是以C 开发的,支持区域数据文件和关系数据库后端作为DNS缓存的数据中心。即可以做递归服务器,又可以做权威服务器。支持DNSSEC及多线程运行等特性。其中,dnsdist是一个高性能的负载均衡器 ,通过Lua语法配置,可动态更新配置文件。
官网:https://www.powerdns.com/
3.Knot DNS
KNOT DNS
KNOT DNS是一款权威DNS服务器,由CZ.NIC开发,采用RCU(Read Copy Update)锁和基数树(Radix Tree)来实现多线程技术,充分发挥其DNS服务器性能。官方对KNOT DNS进行benchmark,如下所示。
测试条件如下:
- Zones: 1
- DNSSEC: no
- RR count: 1M
- Content: delegations (2 NS) glue records (A, AAAA)
- Queries: random QNAME
- Replies: 100% NOERROR
可以看出,在对100万顶级域名进行测试时,吞吐可以达到180万/秒。
数据来源:https://www.knot-dns.cz/benchmark/
4.Knot Resolver
同属于Knot生态家庭的Knot Resolver是一款轻量级的高性能缓存DNS服务器,采用C语言和
LuaJIT实现,提供了Lua接口来操作内部DNS协议,包括对缓存的操作。命令行工具kresd简化了knot resolver的操作。
启动Knot Resolver,在查询域名baidu.com时 ,控制台会返回如下信息:
[44353.03][iter] <= rcode: NOERROR
[44353.03][cach] => stashed baidu.com. A, rank 020, 26 B total, incl. 0 RRSIGs
[44353.03][cach] => not overwriting NS baidu.com.
[44353.03][resl] <= server: '202.108.22.220' rtt: 197 ms
[44353.03][resl] AD: request NOT classified as SECURE
[44353.03][resl] finished: 4, queries: 1, mempool: 32800 B
rcode: NOERROR表示域名查询成功,结果为A类型,IP为202.108.22.220。
,