自宅のLANにDNSキャッシュサーバであるUnboundを導入した。
なぜUnboundなのか?(bindじゃなくて)
bindめんどくさい。Unboundは設定ファイルが1つだけ。メインの機能はキャッシュサーバでコンテンツサーバの機能は簡易だけど個人のLANで使うならむしろ使いやすい。
ごく個人的には、とあるゾーンのとあるレコードに対するリクエストだけ本来の返答ではないものを返して欲しい場面が度々ある。具体的にはたとえばkawataso.netのあるサブドメインで運用しているサービスがあるとして、試験サーバを稼働させて本番と同じFQDN/ポートでアクセスして動作を確かめたいけど、外向きのサービスは止めたくないとき。そんなときに実験環境ではそのFQDNはテスト環境に向いていて欲しいけどそれ以外は全部本来のインターネット経由になってほしい。そんなとき。ちなみに仕事でもそんな場面がある。
で、bindを使おうと思うと僕の理解の範囲では、とりあえず対象のゾーン設定ファイルを用意して、特定のFQDNだけ試験環境であとは全部本番環境を向いているような記述をするのかな。。。(実際は特定のレコードだけ記述してあとは本家に問い合わせとかできる?まあ、とりあえずそんな方法を僕は知らないので。)
Unboundだと、基本がキャッシュサーバなので全部ちゃんと外に聞きに行ってくれる上でlocal-dataという設定をすることであるFQDNに対してだけはローカルの設定でリクエストの返答と上書きできる。ゾーンとかそういうの関係なくFQDN-IPアドレス(もしくはその逆)のセットで設定できるので上で描いたような状況のときに非常に便利。
で、実際のインストール。
aptな環境ならapt-get install unboundだし、yumなところならyum install unbound、FreeBSDだったらcd /usr/ports/dns/unbound && sudo make install clean たぶんこんなとこ。Macは知らないけどmacportsからでも入れればいいとおもう。
設定ファイルはデフォルトで一つだけ。/etc/unbound/unbound.confとかそのあたり。FreeBSDとかだと/usr/local/etcとかにある。
デフォルトの設定から使い始めるにあたって変更したのは3カ所くらい。
interface: 0.0.0.0
do-ip6: no
access-control: 192.168.xxx.0/24 allow
あとは各クライアントのDNSサーバの設定をここに向けてやればいい。Unboundが動いているマシンも127.0.0.1をリゾルバに指定しておく。UnboundはOSの解決機能つかっていないみたいなので大丈夫。
オレオレレコードを追加したい場合は
local-data: “hoge.kawataso.net A 192.168.xxx.100”
逆引きも同じように指定もできるけど
local-data-ptr: “192.168.xxx.100 hoge.kawataso.net”
と書いても良くてこのほうが楽。