プログラマブルな DNS サーバが欲しくなったので、スクリプト系言語で DNS が実装できるかどうか調べてみた。 Perl であれば、CPAN に Net::DNS::Server というモジュールがあるので、これを使えば簡単に DNS サーバが実装できるようだ。 また、既存の実装では DNS Balance が「Ruby で実装された DNS サーバ」だということが分かったが、コードを見たところあまり流用したくなるような内容ではなかった。 そこで、RFC 1034, RFC 1035 を読みつつ*1、Ruby で自作してみることにした。 で、初版として作ったのが以下のプログラム。 require 'rubygems' require 'Net/DNS' require 'socket' sock = UDPSocket.new sock.bind('localhost', 10053)