ノートPCにunbound導入
ノートPC(FreeBSD 7.1-STABLE)にunboundを導入した.
やりたいことは, http://www.imasy.org/~ume/published/mobile-dns/でtotdを使って行われていることである.
ノートPCでdhcpを使って接続しているとき, 接続先が変わったときに/etc/resolv.confが更新される. firefoxやらなんやらのソフトウェアは/etc/resolv.confを読み直したりしないので, 変更が反映されなくて困る. そこで, /etc/resolv.confには常にローカルで動いているDNSサーバを参照するようにして, DNSサーバの設定を変更するようにすればよい.
別に先のURLの通りにtotdを使ってやってもよくて, unboundをわざわざ採用したのはしいていえば新しかったから, というくらいの理由.
なお, unboundの設定はSoftware Design 2009/1の記事を参考にした(久しぶりに買った).
unboundをまずインストール.
# cd /usr/ports/dns/unbound # make install
/etc/rc.confの適当な場所に
unbound_enable="YES"
を記述する. 次に設定ファイルを書く. /usr/local/etc/unbound/unbound.confに置く.
同じディレクトリにunbound.conf.sampleがあるから参考にする. 中身は次のようにする.
server: include: "/usr/local/etc/unbound/forward-zone.conf"
server:は書いてあるけど, 何も書いてないので結局デフォルトのまま. そのうち何かあったら書こうかな, というわけで.... 動的に生成するファイル(forward-zone.conf)は別にしておいて, include:で取り込むようにする(後日記す: 相対パスで書くと, unboundを実行した所からの相対パスと認識されるようだ).
/usr/local/etc/unbound/forward-zone.confをtouchして, 空で作成しておく. これがないと, unboundが起動時に怒る.
次はdhclient-scriptの動作変更.
先に参照したURLでは, /sbin/dhclient-scriptにあるmake_resolv_conf()の動作を上書きするとのことだったが, make_resolv_conf()はなくなって, 代わりにadd_new_resolv_conf()ができていた. これを上書きするため, /etc/dhclient-enter-hooksを以下で作成.
add_new_resolv_conf() { local tmpres=/var/run/forward-zone.conf.${interface} rm -f $tmpres echo "forward-zone:" >>$tmpres echo " name: \".\"" >>$tmpres if [ -n "$new_domain_name_servers" ]; then for nameserver in $new_domain_name_servers; do echo " forward-addr: $nameserver" >>$tmpres done fi if [ -f $tmpres ]; then if cmp -s $tmpres /usr/local/etc/unbound/forward-zone.conf; then rm -f $tmpres return 0 fi 2>/dev/null cat $tmpres > /usr/local/etc/unbound/forward-zone.conf rm -f $tmpres chown -RL root:wheel /usr/local/etc/unbound/forward-zone.conf chmod -RL 644 /usr/local/etc/unbound/forward-zone.conf /usr/local/etc/rc.d/unbound reload return 0 fi return 1 }
forward-zone:は, nameに書かれたゾーンをforward-addrに尋ねる, という動作を記述するそうだ. nameに"."と書いておけば, ぜんぶforward-addrに書かれたIPアドレスに聞きにいくとのこと. forward-zone.confを作った後で, reloadすることで設定を読み直させている. kill -HUP `cat /usr/local/etc/unbound/unbound.pid`でもよい. forward-zone.confのパスがあちこちにうまってるのでグロテスクだけど, そこは見なかったことにする. あと, 変数名があれとか(tmpresのresはresolv.confのresなのだろうから...)というのも考えないことにする.
それから, /etc/resolv.confを
nameserver 0.0.0.0
としておく.
# /usr/local/etc/rc.d/unbound start # rm -f /etc/resolv.conf.save # (dhclientを再起動する)
などとして, テストしておしまい.
...だが, いまのところテストしていないのでちゃんと動いているかはわからない(笑)