A Ruby EventMachine protocol for PowerDNS custom pipe backend
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
lib
tasks
.gitignore
Gemfile
LICENSE
README.rdoc
Rakefile
VERSION
em-powerdns.gemspec

README.rdoc

em-powerdns

You can use this plus the unix program PowerDNS to make a custom DNS server with the lookup done by a ruby script you write.

Even though the actual PowerDNS pipe backend is synchronous, using this will allow a script to start up other side tasks, logging or stats for example, without interrupting the scripts ability to serve more requests.

Include EM::P::PowerDNS in a module or class to use it as a PowerDNS backend.

Example

module RedisBackend
  include EM::P::PowerDNS

  def receive_query(query)
    # make some logic here to resolve the DNS
    ip = redis[query.qname]
    data query.qname, query.qclass, :A, 3600, 1, ip
    super
  end

  def redis
    @redis ||= Redis.new
  end
end

EM.run { EM.open_keyboard(RedisBackend) }

PowerDNS uses stdin to send all it's queries so EM.open_keyboard does exactly what we need.

Copyright

Copyright © 2010 Martin Emde. See LICENSE for details.