LAN内でBINDを使ってみる

Back

 ローカルでDNSキャッシュ、知識取込みを兼ねてBINDをいれてみた。従来なら外向け用(今回はなし)、内向け用、などと2本立て しなければいけなかったのが、9からは一本でいけるようになっているらしい。

 とりあえず以下な感じ。

*BIND 9.2.2-P3使用
*ケーブルネットワークのダイナミックIP環境でフリーのDDNS使用
*ローカルネットワークは192.168.0.0/24
*内向け公開オンリー
*namedユーザーでchroot起動
** 外向けに変な設定のDNSを公開すると世間にえらく大迷惑をかけるので、そのつもりがないときは外から参照できないように気をつける


 ソースを展開。chrootで動かすにはライブラリをスタティックリンクでコンパイルしなければいけないらしいので--with-libtoolオ プションを付加。

% ./configure --with-libtool=libtool
% make
# make install


 で、インストール完了。 スタティックリンクされているかは、
% otool -L /usr/local/sbin/named

 でわかるそうなのだが --with-libtoolをつけてもつけなくても結果が変わらない。
% otool -l /usr/local/sbin/named > aaa
% otool -l /usr/sbin/named > bbb
% diff aaa bbb


 で、あり、なしの結果の差分をとってみたところ、たしかにLoad commandの数は減っている。 ま、いっか。


 chrootさせるnamedユーザーを作る。Netinfoマネージャでユーザーnamed「home=/chroot/named、シェル無し」グ ループnamedを適当に作成。済んだら以下のように/chroot/named(場所は任意)にホームを作成。

/chroot/named/etc/
..............dev/random
..............var/named/
..................run
/

# mkdir -p /chroot/named
# cd /chroot/named
# mkdir etc var dev
# mkdir var/named
# mkdir var/run
# mkdir -p usr/lib
# cp /etc/localtime etc
# cp /usr/lib/libSystem.B.dylib usr/lib
# cp /dev/random dev/random
# chmod 666 dev/*

# chown -R named:named /chroot/named

 セキュリティのため、というよりはログのエラー対策にrndc.keyを作成。
# sudo -u named /usr/local/sbin/rndc-confgen -a -c/chroot/named/etc/rndc.key
※ darwin(6.8)の/dev/randomのバグ?で entropy.c:280: fcntl(3, F_SETFL, 4): Operation not supported by device というエラーが出るが、とりあえずキーはできるのでよしとする。

 設定ファイルなどの用意。今回の計画では以下の通り。(2004 2/20 ちょっと設定変更)
※ 設定目標は、グローバルでは正引きできないDDNSからもらったホスト名をローカルにおいてだけは正引きできるようにすること
※ 設定内のAAA.BBB.ORGというのはDDNSでもらえるホスト名

※ ゾーンファイルを変更した場合はシリアルも変更すること
※ これはあくまでうちの環境での設定であります
etc/named.conf  (named設定ファイル)
var/named/named.root (ルートサーバーの設定ファイル。新しいのをそこら辺から適当に拾ってくる)
var/named/outer.zone  (疑似外向け用正引きゾーンファイル)
var/named/outer.rev  (疑似外向け用逆引きゾーンファイル)
var/named/net.zone  (ローカル用正引きゾーンファイル)
var/named/net.rev  (ローカル用逆引きゾーンファイル)
var/named/local.zone  (ループバック用正引きゾーンファイル。いじる必要なし)
var/named/local.rev  (ループバック用逆引きゾーンファイル。いじる必要なし)


 起動は純正のBINDのスクリプトをいじってすげかえる。/System/Library/StartupItems/BIND/BIND 内の named となっているところを

#named
/usr/local/sbin/named -u named -t /chroot/named


 に変更。
 このままだとDirectoryService、Netinfoの前に立ち上がろうとしてchrootできないみたいなので、
/System/Library/StartupItems/BIND/StartupParameters.plist 内の Requires の項目を

#Requires = ("Network");
Requires = ("Network","DirectoryServices","NIS");


 というふうに編集。
 最後にresolv.confの書き換えで名前解決に使うサーバーの順番を指定、、、ではなくOS-Xでは「システム環境設定」の「ネットワーク」パネ ルの設定がそのままresolv.confに入るようなので、そちらでDNS サーバーの欄に127.0.0.1、プロバイダーのDNSのIP、の順で書き込んで適用する。



 動作検証はdigコマンドで。
1回目
% dig sexyporno.com

; <<>> DiG 9.2.2-P3 <<>> sexyporno.com
(略)

;; Query time: 3663 msec
;; SERVER: XXX.XXX.XXX.XXX#53(XXX.XXX.XXX.XXX) ←プロバイダーのDNSサーバーのIP
;; WHEN: Wed Oct 1 21:30:34 2003
;; MSG SIZE rcvd: 135


2回目
% dig sexyporno.com

; <<>> DiG 9.2.2-P3 <<>> sexyporno.com
(略)
;; Query time: 3 msec
;; SERVER: 127.0.0.1#53(127.0.0.1) ←自サーバー
;; WHEN: Wed Oct 1 21:30:48 2003
;; MSG SIZE rcvd: 90




補足
 DNSキャッシュについては、実のところOSの機能でしっかりキャッシュするはずなのであまり意味はないかもしれない。
 ちなみにDNSメモリキャッシュはBINDが終了するたびに廃棄される模様。



2003 2/17 updated / C's gallery OS X Tips