開源內網DNS伺服器軟體介紹

天府雲創發表於2018-11-28

 

一般內網dns解析個人推薦使用:

1、skydns(特別是k8s+docker等雲叢集服務)

SkyDNS是kubernetes用於服務發現的預設的開源DNS服務,其開源在github。使用etcd作為資料儲存。由於其在配置DNS資訊時,幾乎可以實時生效,所以SkyDNS比較適用於服務的動態註冊。

基於Kubernetes叢集部署skyDNS服務 -  https://www.cnblogs.com/zhenyuyaodidiao/p/6500992.html

2、dnsmasq

希望通過自定義的域名進行訪問,這樣比較方便,但每個人每臺機器都維護一個hosts的話會非常麻煩,於是想搭建一個內部的DNS伺服器,對自定義的域名進行解析,同時快取公網的域名。

首先,嚮導的DNS伺服器肯定是bind9,但所謂殺雞焉用牛刀,並且bind9的配置和後期維護都是比較麻煩的,而內網這種測試環境又經常需要更新配置。於是,我們採用了dnsmasq,它的簡單讓系統運維開發維護起來比較便捷。

dnsmasq預設使用了/etc/hosts和/etc/resolv.conf,這樣DNS本機也可以共享這些配置,但如果想要分開專門進行維護的話,可以在/etc/dnsmasq.conf中指定。dnsmasq預設還整合了DHCP與TFTP伺服器,預設如果不配置的話服務不會啟動。
      dnsmasq的優點在於快捷方便並易於維護,如果想實現比如多IP輪詢,根據IP源做智慧解析等高階功能,毫無疑問,安心上bind9吧。

3、直接修改代理伺服器的/etc/host檔案或者ip轉發也可以實現

DNS是網際網路的基礎裝置,開源的DNS也有不少,下面列出主要的幾種供參考:

Bind9

ISC(Internet System Consortium)的Bind一直以來基本上都是DNS的工業標準,Bind應該是目前世界上使用最為廣泛的DNS伺服器了。Bind起源於1980年的Berkeley大學,比起我的年齡還大,Bind的名稱也是源自 Berkeley Internet Name Domain 。不過Bind也是一直漏洞不斷,Bind9是ISC開發人員對Bind重寫,目前常見的Linux發行版本中,會自帶Bind9的安裝包。

Bind9可以作為權威與遞迴DNS。主要特性如下:

作為權威DNS時:

  • Response Rate Limiting (RRL):對DNS增強,以減少放大攻擊
  • Dynamically-Loadable Zones (DLZ):支援從外部資料庫獲取Zone資料,但不建議使用在高性的權威DNS。
  • Minimum Re-load Time:支援配置檔案動態載入。
  • HSM Support:支援通過原生的 PKCS#11介面或OpenSSL PKCS#11的介面的HSM( Hardware Security Modules)。
  • DNSSEC with In-line Signing:支援NSEC與NSEC3的安全協議的簽名。
  • Catalog Zones:支援多Zone的目錄管理。
  • Scalable Master/Slave Hierarchy:支援Master+多Slave組網,Slave從Master同步Zone配置。

作為遞迴DNS時:

  • NXDOMAIN Redirect:當查詢一個不存在域名時,轉向一個Web頁面,它依賴於DLZ特徵。
  • Flexible Cache Controls:對於不正確或過期的域名記錄,靈活的快取控制。
  • Split DNS:通過配置不同的View,來保護部分私有資訊。
  • Optimum Cache Hit Rate:通過 DNS pre-fetch 技術來優化快取命中率。
  • Resolver rate-limiting:在受攻擊下,對權威DNS查詢限速,減輕對路徑解析器的DDoS攻擊影響。
  • DNSSEC Validation:支援對DNSSEC的檢驗。
  • GeoIP:支援基於來源不同的遞迴DNS的請求給出不同的響應。
  • Response Policy Zone(RPZ):通過響應策略的Zone來減少對被認為是濫用或非法目的Zone的訪問。

雙License:ISC 與Mozilla Public 2.0。

開發語言:C。

官方網站: https://www.isc.org/    產品網站:https://www.isc.org/downloads/bind/

PowerDNS

PownerDNS發起於1999年,也是一個老牌的開源DNS了。它可以作為權威(最新版本3.4.11)與遞迴DNS(最新版本3.7.4)。2011年07月23日,PowerDNS 3.0 正式版釋出,主要特性如下:

  • 完全支援 DNSSEC ,包括自動簽名、rollovers 和金鑰維護
  • TSIG,相容 MyDNS 的後端
  • 基於 IPv6 的主從結構,並行從節點引擎,MongoDB 支援和 Lua 的區域編輯

歐洲30%+的域名採用PownerDNS,以及全世界75%+的DNSSEC應用。

作為權威DNS時:

  • Standards compliant serving of DNS information from all relevant databases
    • Text files, dynamic scripts in various languages
    • Native support for legacy BIND zonefiles
  • Leading DNSSEC implementation
    • worldwide, hosting >75% of all DNSSEC domains
  • Powerful dynamic abilities
    • Geographical load balancing
    • Content redirection, ‘best answer’ generation
  • Supported on generic hardware running generic operating systems

作為遞迴DNS時:

  • Standards compliant resolution of domain names
    • Strive for maximum resolution percentage
    • or conversely, least customer complaints
  • Powerful dynamic abilities
    • Content redirection
    • ‘best answer’ generation
    • query & answer modification
    • Filtering
  • Supported on generic hardware running generic operating systems

提供相關的工具:

  • dnsscope: query/answer latency time statistics
  • dnsreplay: replay existing traffic against reference nameservers
  • dnsgram: per-time period sampling of traffic to determine overloads
  • dnswash: anonimize PCAP traces, hiding IP addresses, for third party analysis

支援API,承載在(Local socket,”raw” TCP/IP,RESTful API direct,)

  • Statistics
  • Provisioning
  • Zone editing
  • Master/slave operations
  • Log-file investigations
  • Configuration (updates)
  • Stop/Start/Upgrade/Restart

License:GPL 2.0。

開發語言:C++,擴充套件:Lua。

官方網站: https://www.powerdns.com/

CoreDNS

CoreDNS去年8月份發起新的開源專案,目前已納入開源基金會CNCF(Cloud Native Computing Foundation,雲端原生計算基金會),它歸屬於Linux基金會。

CoreDNS的前身是SkyDNS,它的主要目的是構建一個快速靈活的DNS伺服器,讓使用者可以通過不同方式訪問和使用DNS內的資料。它被設計為Caddy網路服務的一個伺服器外掛。CoreDNS的每個特性都可以被實現為可插拔的中介軟體,如,日誌、基於檔案的DNS以及多種後端技術,進而可以拼接多個外掛來建立定製化的管道。CoreDNS已經得到擴充套件,可以直接被Kubernetes訪問服務資料,並以KubeDNS的形式提供給使用者使用。

CoreDNS同樣可以權威與遞迴DNS,目前官方的中介軟體已有31個:

  • bind: Serve zone data from a file; both DNSSEC (NSEC only) and DNS are supported (file).
  • dnssec: Sign zone data on-the-fly
  • cache: Caching
  • etcd: Use etcd as a backend, i.e., a 101.5% replacement for SkyDNS
  • kubernetes: Use k8s (kubernetes) as a backend
  • proxy: Serve as a proxy to forward queries to some other (recursive) nameserver
  • loadbalance:Load balancing of responses
  • rewrite: Rewrite queries (qtype, qclass and qname)

License: Apache-2.0。

開發語言:GO。

官方網站: https://coredns.io/

其它

DNSPod-SR

dnspod-sr是中國最大域名解析服務商DNSPod官方於2012年6月1日開源的一款遞迴DNS伺服器軟體。

主要特性:

  • CNAME解析加速
  • A記錄組包快取
  • 請求轉發功能
  • 快取重新整理功能
  • HASH表快取

License:BSD。

開發語言:C。

官方網站: https://github.com/DNSPod/dnspod-sr

Dnsmasq

DNSmasq是一個小巧且方便地用於配置DNS和DHCP的工具,適用於小型網路,它提供了DNS功能和可選擇的DHCP功能。

作為域名解析伺服器(DNS),dnsmasq可以通過快取 DNS 請求來提高對訪問過的網址的連線速度。

License: GPL-2.0。

開發語言:C。

官方網站: http://www.thekelleys.org.uk/dnsmasq/

Atomia DNS

Atomia DNS是一個多租戶DNS 管理系統 ,通過程式設計介面處理大量的DNS資料。Atomia DNS支援對PowerDNS和BIND-DLZ DNS伺服器的代理,PowerDNS是預設代理選項。

主要特性:

  • 支援DNSSEC
  • 完整,易於使用的API
  • 生產環境可用
    Atomia DNS已被用於大規模生產環境好幾年,並建有託管考慮大規模DNS。無論您舉辦數百個DNS區域或數百萬,Atomia DNS將做的工作。

Atomia DNS License:ISC。

開發語言:PHP。

Atomia DNS是DNS系統,可輕鬆管理DNS區域,通過的程式設計SOAP介面。

官方網站: http://atomiadns.com/

專案地址:https://github.com/atomia/atomiadns
幫助文件:http://atomia.github.io/atomiadns/

安裝指南:http://atomiadns.com/get-started/install-atomia-dns/

DNS 開源DNS之Atomia DNS介紹 -https://blog.csdn.net/zhu_tianwei/article/details/45224263

SmartDNS

小米開源的基於twisted實現的智慧dns系統:Smartdns

使用場景:   全域性負載均衡

smartdns是python語言編寫,基於twisted框架實現的dns server,能夠支援針對不同的dns請求根據配置返回不同的解析結果。smartdns獲取dns請求的源IP或者客戶端IP(支援edns協議的請求可以獲取客戶端IP),根據本地的靜態IP庫獲取請求IP的特性,包括所在的國家、省份、城市、ISP等,然後根據我們的排程配置返回解析結果。

smartdns的使用場景:

  1. 服務的多機房流量排程,比如電信流量排程到電信機房、聯通流量排程到聯通機房;
  2. 使用者訪問控制,將使用者排程到離使用者最近或者鏈路質量最好的節點上。

主要特性:

  • 支援A、SOA、NS記錄的查詢
  • 支援DNS forward功能

舉個簡單的例子,我們的一個站點test.test.com同時部署在電信和聯通兩個機房,該站點在電信機房的ip為1.1.1.1、在聯通機房的ip為2.2.2.2,就可以通過smartdns做到該站點域名解析時判斷源IP為電信的IP時返回1.1.1.1、判斷源IP為聯通的IP時返回2.2.2.2,從而達到不同運營商機房流量排程的目的。

License:未註名

開發語言:Python。

官方網站: https://github.com/xiaomi-sa/smartdns

MaraDNS

MaraDNS is a free open-source computer program written by Sam Trenholme. I wrote MaraDNS while I was a college student and a travelling English teacher during the first 2000s decade. Now that I’m working as a professional software developer, I am not adding features to it as quickly as I used to.

MaraDNS implements the Domain Name System (DNS), an essential internet service. MaraDNS is open source software: This means that anyone is free to download, use, and modify the program free of charge, as per its license.

People like MaraDNS because it’s small, lightweight, easy to set up, and remarkably secure. It’s also cross platform — the program runs both in Windows and in UNIX clones.

輕量級dns,its 開源協議授權。

官方網站:https://maradns.samiam.org/

總結

Bind9是最為成熟的DNS Server,代表了DNS的標準,它特性豐富,License友好,使用者眾多,是作為權威與遞迴DNS的首先,缺點是擴充套件性一般(相對於CoreDNS),安全漏洞相對比較多(也說明使用者多,被研究與攻擊多)。

CoreDNS是開源DNS Server的新星,它的架構優秀,擴充套件性非常好,是非常有前途的DNS;又在Linux基金會下,有Google帶頭大哥,主創人員為安全公司Infoblox,所謂是背影深厚。但由於專案時間太短,使用未經大規模考驗,待它成熟之後,不排除它可能代替Bind9,成為網際網路的基礎設施。

PowerDNS它有成熟的管理控制系統,相比於Bind9,它提供基於REST API以及基於Lua指令碼的擴充套件能力。但它的License商用不友好。在商用產品中整合或使用它要注意邊界,避免使整個產品開源。

相關文章