FreeBSD

jail による仮想環境の構築


DNS, Web, Mail をそれぞれの jail環境で動かそうということで、最初に、/etc/rc.conf で各jail環境用の IPアドレスを設定しました。
ifconfig_bge0_alias0="inet 192.168.0.129 netmask 255.255.255.255"
ifconfig_bge0_alias1="inet 192.168.0.130 netmask 255.255.255.255"
ifconfig_bge0_alias2="inet 192.168.0.131 netmask 255.255.255.255"
一度システムをリブートし、ifconfig -a などで IPアドレスが別に追加されて認識をしていることを確認しておきます。
/home/ns に jail環境を構築するとすると

# cd /usr/src
# make world DESTDIR=/home/ns
# cd /usr/src/etc && make distribution DESTDIR=/home/ns NO_MAKEDEV=yes
# cp -Rp /usr/share/zoneinfo/Asia/Tokyo /home/ns/etc/localtime
# mkdir /home/ns/stand && cp -p /stand/sysinstall /home/ns/

と実行します。実際には, /home/www, /home/mail の3つの jail環境を構築しました。
次に、/devの下を用意することになりますが、FreeBSD 5.xではMAKEDEVなどが不要になっています。次のコマンドで生成されてくるかを確認します。

# mount -t devfs devfs /home/ns/dev
# ls -la /home/ns/dev

ここまで問題なければ、jail環境を動作させるための最後の設定を行います。

# cd /home/ns && ln -sf dev/null kernel
# mount_procfs proc /home/ns/proc
# jail /home/ns ns.kncn.net 192.168.0.129 /bin/sh

これで jail環境が動作したと思います。

# pwd

としてみて、今までの /home/ns が / として動いているのを確認し、jail環境での設定をします。

# passwd root

jail環境の rootのパスワードを作成しておきます。その他 adduserなどで1つのアカウントを作成しておき、SSHクライアントでログインしてみます。その他、/etc/rc.conf のファイルの作成やtouchだけするものなどの処理も行っておきます。/home/ns/etc/rc.conf は以下のようにしました。インターフェイス名には何も入れないところがポイントだそうです。
network_interfaces=""
portmap_enable="NO"
inetd_enable="NO"
syslogd_flags="-ss"
sshd_enable="YES"
sendmail_enable="NO"
なぜか、/home/ns/home のシンボリックリンクが、/usr/homeのシンボリックリンクになっていたので

# cd /home/ns && ln -s usr/home home

のように直しておきます
毎回こういった作業をするのはどうかと思いますので、こちらのページにある jail.sh を利用させていただきました。これを /usr/local/etc/rc.d/jail.sh として設置しました。
このスクリプトは、rc.conf に書かれている内容を読み込んで jailコマンドを発行するので、/etc/rc.conf に、必要な記述を追加しました。
jail_hosts0="/home/ns ns.kncn.net 192.168.0.129 /bin/sh /etc/rc"
jail_hosts1="/home/www www.kncn.net 192.168.0.130 /bin/sh /etc/rc"
jail_hosts2="/home/mail mail.kncn.net 192.168.0.131 /bin/sh /etc/rc"
また、jail 環境の /etc 以下を mergemaster するためには、ネイティブ環境で

# mergemaster -t /home/ns/var/tmp/temproot -D /home/ns

などとするそうです。