Module: Landrush::DnsServer
- Included in:
- Server
- Defined in:
- lib/landrush/dns_server.rb
Constant Summary collapse
- Name =
Resolv::DNS::Name
- IN =
Resolv::DNS::Resource::IN
Class Method Summary collapse
- .check_a_record(host, transaction) ⇒ Object
- .interfaces ⇒ Object
- .run_dns_server(options = {}, &block) ⇒ Object
- .start_dns_server(logger) ⇒ Object
- .upstream ⇒ Object
- .upstream_servers ⇒ Object
Class Method Details
.check_a_record(host, transaction) ⇒ Object
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# 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 ⇒ Object
10 11 12 |
# 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) ⇒ Object
51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/landrush/dns_server.rb', line 51 def self.run_dns_server( = {}, &block) server = RubyDNS::RuleBasedServer.new(, &block) EventMachine.run do trap('INT') do EventMachine.stop end server.run() end server.fire(:stop) end |
.start_dns_server(logger) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# 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 ⇒ Object
19 20 21 |
# File 'lib/landrush/dns_server.rb', line 19 def self.upstream @upstream ||= RubyDNS::Resolver.new(upstream_servers, logger: @logger) end |