FreeBSDで, なるべく小さい jail 環境で bind を動かすことを試みる. なお, 以下の記述においては, jail 環境の root を /jail/ns とし, BIND の各設定ファイルは /jail/ns/etc/namedb に置くものとする.
まずは, 必要最低限のファイルおよびディレクトリを作成. bind9のnamedを実行するには
が必要なので, これらを jail 環境の root に作成する.
# mkdir -p /jail/ns
# cd /jail/ns
# mkdir -p dev etc/namedb usr/lib usr/libexec usr/sbin var/run
# mknod dev/random c 2 3
# chmod 644 dev/random
# cp -p /usr/libexec/ld-elf.so.1 usr/libexec
# cp -p /usr/lib/libc.so.4 usr/lib
# ln -sf libc.so.4 usr/lib/libc.so
次に, namedのバイナリを作成し, jail内に作成.
% ./configure --prefix=/usr --sysconfdir=/etc/namedb --localstatedir=/var
% make
# install -cs bin/named/named /jail/ns/usr/sbin
この状態で
# ifconfig fxp0 inet 192.168.0.2/32 alias
# jail /jail/ns ns.example.org 192.168.0.2 /usr/sbin/named -d 3
と実行 *1 し, host や nslookup で名前解決できているかどうかを確認できる. もしできていない場合, 上記のように -d オプションをつけて実行すると /jail/ns/named.run というファイルができるので, これを見て問題解決していただきたい.
DNS のようなサービスは, ただ「動かせる」だけではあまりうれしくない. 「『起動と同時に』動かせる」ことが是非とも必要となる. 以下では, 自動起動のための設定を行う. 基本的には
が必要だが, rcスクリプトそのものを除き, これらは /etc/rc.conf に記述する. 具体的には, 以下の3行を /etc/rc.conf に追加する. *2
ifconfig_fxp0_alias0="inet 192.168.0.2 netmask 255.255.255.255" syslogd_flags="-l /jail/ns/dev/log" local_startup="/usr/local/etc/rc.d /usr/X11R6/etc/rc.d /jail/rc.d"
ここでは, それぞれ上記に列挙した順番に設定を記述したが, とくに順番に意味はない. local_startup には, rcスクリプトを置くディレクトリを列挙するが, 仮に jail 環境のスクリプトは /jail/rc.d に置くものとする. ここに, named 起動用に, /jail/rc.d/named.sh を作成する.
#!/bin/sh
JAILBIN=/usr/sbin/jail
JAILROOT=/jail/ns
NAMEDBIN=/usr/sbin/named
case $1 in
start)
if [ -x $JAILBIN -a -x ${JAILROOT}${NAMEDBIN} ]; then
echo -n ' jailed-named'
$JAILBIN $JAILROOT ns.angel.fan.gr.jp 192.168.0.2 $NAMEDBIN
fi
;;
stop)
killall named
;;
*)
echo "usage: $0 {start|stop}" 1>&2
;;
esac
あまり凝ったことをする必要もないので, 最低限 start および stop を受け付けられるようになっておれば問題ない.
ダイアルアップの頃から, Linuxでbindを動かしていたのだが, 従来環境に比べると, なぜかうまくひけないことが多く, しばしば host コマンドが失敗する. しばらく様子を見, どちらで正式運用するかを決めたいところ.
*Messages* の更新情報取得には、antenna.lirs もしくは index.rdfをご利用ください。 豪傑アンテナ の LIRSからも取得可能です。