Kazoo04 Advent Calendar 2014 - Qiitaの14日目の記事です。
kazoo04クラスタの皆さんならBIND等を使ってオレオレDNSを立てることも朝飯前だと思うのですが、僕のような不心得者にとってはBINDをインストールして設定ファイルを書く、といった作業はそこそこに面倒なものであったりします。
そういう僕でもDNSが簡単に立てられるお手軽ソリューションは無いかなと探していましたところ、こういうものを見つけました。
これは名前の通りGo言語で書かれたDNSなのですが、以下のような機能があります。
- resolv.confに記述されたDNSに問い合わせる機能
- 問い合わせ結果のメモリ上キャッシュ
- ローカルのhostsファイルのインポート機能
- Redisに記述されたhosts情報を参照する機能
これらの機能をTOML形式で記述されたコンフィグファイル一つ置けば使えるようになるという優れものです。(詳しくはリンク先をどうぞ)
特筆すべき機能としてはRedisに記述されたhosts情報を参照する機能です。Redisサーバーを一つ立ち上げておけば、DNSを立ち上げたまま新しくレコードを登録したり変更したり削除したりすることができます。ローカルネットワークのサーバ群を管理したりするにはとてもちょうど良い機能でしょう。
godns、Go言語で書かれていると言うこともあり非常に取り回しも楽ちんな素敵なアプリなのですが、一つだけ欠点があり、現状はドメイン名からの正引きでしかhostsの参照をしてくれません。ローカルネットワークのサーバのドメインを逆引きしたいということもあるので、このままではいささか不便です。
というわけでこちらにPTRレコードの問い合わせに対応したものをフォークして用意しました。
こちらの修正を入れたものを使えば、例えば 10.0.0.11 から kazoo04.localdomain を逆引きさせたい場合、Redisに 11.0.0.10.in-addr.arpa というキーで kazoo04.localdomain をHSETしておけば逆引きされるようになります。
少し機能を付け足したい場合に簡単に手を入れられるというのも小さなアプリのいいところですね。
他の機能を付け足したい場合もこちら miekg/dns(godnsはこちらのライブラリを利用して作られている) とかこちら skynetservices/skydns(同じDNSライブラリを利用したリッチなDNSサーバ、PTRレコードに対するレスポンスはこちらを参考にした)が大いに参考になるでしょう。
godnsをハックして皆さんも楽しいDNSライフを!