探索高效DNS服务:RubyDNS

探索高效DNS服务:RubyDNS

RubyDNS 是一个强大且灵活的DNS服务器,它可以轻松地融入其他项目或独立作为守护进程运行。其默认采用基于规则的模式匹配,允许你硬编码、计算、从远程DNS服务器获取或从本地缓存中提取结果。

Build Status Code Climate Coverage Status Gitter

RubyDNS Introduction

安装

在你的应用Gemfile中加入以下代码:

gem 'rubydns'

然后执行:

$ bundle

或者直接安装:

$ gem install rubydns

使用

examples/ 目录里有大量示例供参考。下面是一个简单的DNS服务器示例(来自 examples/basic-dns.rb):

#!/usr/bin/env ruby
require 'rubydns'

INTERFACES = [
	[:udp, "0.0.0.0", 5300],
	[:tcp, "0.0.0.0", 5300],
]

IN = Resolv::DNS::Resource::IN

# 使用上游DNS进行名称解析。
UPSTREAM = RubyDNS::Resolver.new([[:udp, "8.8.8.8", 53], [:tcp, "8.8.8.8", 53]])

# 启动RubyDNS服务器
RubyDNS::run_server(INTERFACES) do
	match(%r{test.local}, IN::A) do |transaction|
		transaction.respond!("10.0.0.80")
	end

	# 默认DNS处理
	otherwise do |transaction|
		transaction.passthrough!(UPSTREAM)
	end
end

启动服务器并测试:

$ RUBYOPT=-w ./examples/basic-dns.rb
$ dig @localhost -p 5300 test.local
$ dig @localhost -p 5300 google.com

文件描述符限制

在某些平台(如Mac OS X),文件描述符的数量默认较低,运行前应通过ulimit -n 10000来提高。

自定义服务器

你可以创建和集成自己的自定义服务器,现在此功能已移动到 Async::DNS::Server

class MyServer < Async::DNS::Server
	def process(name, resource_class, transaction)
		transaction.fail!(:NXDomain)
	end
end

Async::Reactor.run do
	task = MyServer.new.run
	
	# ... 其他操作,比如运行测试
	
	# 如需手动关闭服务器,则可以调用,否则服务器将持续运行。
	# task.stop
end

这是与其他项目集成的最佳方式。

性能

尽管代码基础有所变化,导致了少量性能上的小幅度退步,但RubyDNS与bind9的性能在同一量级上。一个基础的并发解析1000个名字的基准测试重复5次,给出了以下结果:

                           user     system      total        real
RubyDNS::Server        4.280000   0.450000   4.730000 (  4.854862)
Bind9                  4.970000   0.520000   5.490000 (  5.541213)

这些基准测试也包含在单元测试中。为了测试bind9性能,需要先安装,并确保which named返回可执行文件。

DNSSEC支持

目前不支持DNSSEC,而且由于一些原因,未来也不太可能支持

贡献

  1. fork它
  2. 创建你的特性分支 (git checkout -b my-new-feature)
  3. 提交你的改动 (git commit -am 'Add some feature')
  4. 推送到你的分支 (git push origin my-new-feature)
  5. 创建新的Pull Request

需要的功能

  • 支持更多DNS功能,例如区域传输
  • 更易于处理反向记录
  • 类似系统级别的集成,比如将DNS服务器注册到当前的系统解析器

参考

大部分Gem由async-dns实现。

许可证

遵循MIT许可。

版权所有,2017年,Samuel G. D. Williams。

根据以下条件,授权免费获得本软件及关联文档文件("软件")的副本:

保留此处的所有版权通知和其他版权声明;

不受任何限制,包括但不限于,复制、修改、合并、发布、分发、再许可、或销售本软件的副本,以及允许提供给您的人做同样的事情。

本软件“按原样”提供,不作任何明示或暗示的保证,包括但不限于对适销性、特定用途适用性的默示保证。在任何情况下,作者或版权持有者均不对因本软件或其使用而产生的任何损害承担责任。

了解更多

查看官方仓库以了解详细信息,参与讨论,提交问题或贡献代码。

  • 24
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

姚婕妹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值