感謝為您回答此問題。在了解DNS服務器之前,讓我們先談談什么DNS?DNS就是域名系統,屬于互聯網基礎服務,其實,DNS就是一分布式內存數據庫,實現域名到IP地址的映射,完成用戶日常的域名解析服務。
DNS服務器有很多種,目前開源的有BIND,PowerDNS,Knot DNS和Knot Resolver,Unbound等等。還有微軟的Azure DNS,但其不開源,可提供免費試用。不管采用什么DNS服務器,遞歸解析目前是由ICANN提供的13組根服務器完成的。
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服務器,動態加載配置文件、對緩存操作等內容
7)主從服務器間區域傳輸。
BIND架構圖如下所示:
BIND可應用在個人,企業,大學及政府機關,部署DNS服務器,現在大部分采用BGP Anycast,通過路由算法,實現最近的機器響應DNS解析,減少延遲。
2. PowerDNS
PowerDNS是以C++開發的,支持區域數據文件和關系數據庫后端作為DNS緩存的數據中心。即可以做遞歸服務器,又可以做權威服務器。支持DNSSEC及多線程運行等特性。其中,dnsdist是一個高性能的負載均衡器 ,通過lua語法配置,可以動態更新配置文件。
3. Knot DNS
KNOT DNS是一款權威DNS服務器,由CZ.NIC開發,采用RCU(Read Copy Update)鎖和基數樹(Radix Tree)來實現多線程技術,充分發揮其DNS服務器性能。
4. Knot Resolver
同屬于Knot生態家庭的Knot Resolver是一款輕量級的高性能緩存DNS服務器,采用C語言和LuaJIT實現,提供了Lua接口來操作內部DNS協議,包括對緩存的操作。命令行工具kresd簡化了knot resolver的操作。
5. Azure DNS
微軟的Azure DNS也是優秀的DNS服務器,同樣,采用Anycast部署,可實現域名資源記錄秒級更新,通過部署DNS防火墻可緩解釣魚和數據泄露及部分DDOS攻擊,進而實現DNS服務器安全。
6. Unbound
Unbound是一款緩存DNS服務器,由Nlnetlabs開發,為了保護隱私,支持通過DNS-over-TLS( DOT)來加密,此外,為了防止DNS劫持,還支持DNSSEC驗證。Unbound獲得了BSD許可,可以運行在Windows和常見發行版Linux系統中,支持異步DNS查詢,最新版本為1.9.4。
當然,如果對DNS不是很熟悉,可以參考下我的文章,“初識互聯網基礎服務:域名系統”,鏈接:https://www.toutiao.com/i6749787295169118727/, 歡迎批評指正。此外,關于互聯網技術交流,可在下方評論區留言,我們共同探討。