34 lines
640 B
Ruby
34 lines
640 B
Ruby
|
#!/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
|