class Prdns::PurifiedServer
Constants
- LOG
Public Instance Methods
add_polluted(domain)
click to toggle source
# File lib/prdns.rb, line 25 def add_polluted(domain) @polluted_domains[domain] = true end
add_virgin(domain)
click to toggle source
# File lib/prdns.rb, line 28 def add_virgin(domain) @virgin_domains[domain] = Time.now end
polluted?(domain)
click to toggle source
# File lib/prdns.rb, line 19 def polluted?(domain) @polluted_domains.has_key?(domain) end
process(name, resource_class, transaction)
click to toggle source
# File lib/prdns.rb, line 32 def process(name, resource_class, transaction) split = name.chomp('.').split('.') # unless split[-1] == 'local' # LOG.debug 'name: %s' % name # LOG.debug 'resource class: %s' % resource_class # end return transaction.passthrough!(@polluted_ns) if resource_class != Resolv::DNS::Resource::IN::A or split.length < 2 top_domain = split[-2, 2].join('.').downcase return transaction.passthrough!(@authentic_ns) if polluted?(top_domain) return transaction.passthrough!(@polluted_ns) if virgin?(top_domain) polluted = false Async do message = @polluted_ns.query('ne-%d.%s' % [Time.now.to_i, top_domain], Resolv::DNS::Resource::IN::ANY) # LOG.debug message.inspect records = message&.answer if records and records.length == 1 and records.first[2].is_a?(Resolv::DNS::Resource::IN::A) LOG.warn 'Domain: %s is polluted, delegate to authentic server from now on!' % top_domain polluted = true add_polluted(top_domain) else add_virgin(top_domain) if records end end polluted ? transaction.passthrough!(@authentic_ns) : transaction.passthrough!(@polluted_ns) end
setup(polluted: nil, authentic: nil)
click to toggle source
LOG.debug!
# File lib/prdns.rb, line 12 def setup(polluted: nil, authentic: nil) @polluted_ns = Async::DNS::Resolver.new(polluted || [[:udp, '114.114.114.114', 53]]) @authentic_ns = Async::DNS::Resolver.new(authentic || [[:udp, '208.67.220.220', 5353]]) @polluted_domains = {} @virgin_domains = {} end
virgin?(domain)
click to toggle source
# File lib/prdns.rb, line 22 def virgin?(domain) @virgin_domains.has_key?(domain) end