ローカルでDNSキャッシュ、知識取込みを兼ねてのBIND構築。従来なら外向け用(今回はなし)、内向け用、などと2本立て
しなければいけなかったのが、9からは一本でいけるようになっている。
とりあえず以下な感じ。
*Panther 10.3.9 + Xcode
*ケーブルネットワークのダイナミックIP環境でフリーのDDNS使用
*ローカルネットワークは192.168.0.0/24
*内向け公開オンリー
*namedユーザーでchroot起動
** 外向けに変な設定のDNSを公開すると世間にえらく大迷惑をかけるので、そのつもりがないときは外から参照できないように気をつける
ソースを展開。chrootで動かすにはライブラリをスタティックリンクでコンパイルしなければいけないらしいので--with-libtool オ
プションを付加すればいいらしいのだがいまだ効能はわからず。
% ./configure --with-libtool=libtool
--with-openssl=/usr
% make
# make install
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
設定ファイルなどの用意。今回の計画では以下の通り。
※ 設定目標は、グローバルでは正引きできない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.3<<>> 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.3<<>> 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が終了するたびに廃棄される模様。
|