module Landrush::DnsServer
Constants
- IN
- Name
Public Class Methods
check_a_record(host, transaction)
click to toggle source
# File lib/landrush/dns_server.rb, line 65 def self.check_a_record(host, transaction) value = Store.hosts.get(host) return if value.nil? if begin IPAddr.new(value) rescue StandardError nil end name = transaction.name =~ /#{host}/ ? transaction.name : host transaction.respond!(value, ttl: 0, name: name) else transaction.respond!(Name.create(value), resource_class: IN::CNAME, ttl: 0) DnsServer.check_a_record(value, transaction) end end
interfaces()
click to toggle source
# File lib/landrush/dns_server.rb, line 10 def self.interfaces [[:udp, '0.0.0.0', Server.port], [:tcp, '0.0.0.0', Server.port]] end
run_dns_server(options = {}, &block)
click to toggle source
# File lib/landrush/dns_server.rb, line 51 def self.run_dns_server(options = {}, &block) server = RubyDNS::RuleBasedServer.new(options, &block) EventMachine.run do trap('INT') do EventMachine.stop end server.run(options) end server.fire(:stop) end
start_dns_server(logger)
click to toggle source
# File lib/landrush/dns_server.rb, line 23 def self.start_dns_server(logger) @logger = logger run_dns_server(listen: interfaces, logger: logger) do match(/.*/, IN::A) do |transaction| host = Store.hosts.find(transaction.name) if host DnsServer.check_a_record(host, transaction) else transaction.passthrough!(DnsServer.upstream) end end match(/.*/, IN::PTR) do |transaction| host = Store.hosts.find(transaction.name) if host transaction.respond!(Name.create(Store.hosts.get(host))) else transaction.passthrough!(DnsServer.upstream) end end # Default DNS handler otherwise do |transaction| transaction.passthrough!(DnsServer.upstream) end end end
upstream()
click to toggle source
# File lib/landrush/dns_server.rb, line 19 def self.upstream @upstream ||= RubyDNS::Resolver.new(upstream_servers, logger: @logger) end
upstream_servers()
click to toggle source
# File lib/landrush/dns_server.rb, line 14 def self.upstream_servers # Doing collect to cast protocol to symbol because JSON store doesn't know about symbols @upstream_servers ||= Store.config.get('upstream').collect { |i| [i[0].to_sym, i[1], i[2]] } end