33 lines
640 B
Ruby
Executable file
33 lines
640 B
Ruby
Executable file
#!/usr/bin/env ruby
|
|
|
|
require 'rubydns'
|
|
require 'psych'
|
|
|
|
db_file = ARGV[0]
|
|
port = ARGV[1] || 5300
|
|
|
|
db = if File.file? db_file
|
|
$stderr.puts 'Found dns db'
|
|
Psych.load_file(db_file)
|
|
else
|
|
$stderr.puts 'Found no dns db. Use default db.'
|
|
|
|
{
|
|
/www\.example\.org/ => '1.1.1.1'
|
|
}
|
|
end
|
|
|
|
interfaces = [
|
|
[:udp, "127.0.0.1", port],
|
|
[:tcp, "127.0.0.1", port]
|
|
]
|
|
|
|
|
|
# Start the RubyDNS server
|
|
RubyDNS::run_server(:listen => interfaces) do
|
|
db.each do |matcher, result|
|
|
match(matcher, Resolv::DNS::Resource::IN::A) do |transaction|
|
|
transaction.respond!(result)
|
|
end
|
|
end
|
|
end
|