VPS是Virtual Private Server的英文缩写(也有叫VDS的),中文意思是虚拟专有服务器,就是在一台服务器同时运行几个独立的OS(这里是指FreeBSD),有什么用处这里不详细描述了,设想一下几个用户分享一台服务器,互相之间完全独立,每个人都有root权限......。在FreeBSD下VPS通常是由Jail来实现的(据说有专门的商业软件但这里不讨论),下面就简单说一下具体步骤。
在FreeBSD下用Jail实现VPS的步骤是很繁琐的,这里我用的是一个抄来的Shell脚本(稍微改了一下)可以很方便的完成全部过程,这里先假定你的宿主系统地址是192.168.0.1,VPS的地址是192.168.0.2(alias),生成的VPS放在/home/jail下。需要注意的是:这里要实现的是VPS,要生成和宿主系统一样的整个FreeBSD目录树。如果你只是要实现一个运行某个服务的Jail不要用这个script。
另外,再提醒一下,在VPS下对于一些缺省情况下侦听所有地址的服务可能需要重新设定在某个具体的地址上。
#!/bin/sh
################################################
#
#
# makejail
# - Originally written in 2001 by Yann Sommer
# - Slightly modified by MaxBSD
#
# Creation of a new jail environment
# for FreeBSD.
#
# Achtung: Tested under FreeBSD4.X only.
#
################################################
echo "First off, pls create an ip alias and hostname
echo "for the new jail system in /etc/rc.conf."
echo "eg: ifconfig_fxp0_alias0=\"inet 192.168.0.2 netmask 0xffffff\""
sleep 3
if test -z $@; then
echo "Enter destination directory for new jail:"
echo "eg: /home/jail "
read JAIL
else
JAIL=$@
fi
test ! -d $JAIL || { echo "$JAIL already exists!!"; exit 1; }
echo "Creating jail directory..."
mkdir $JAIL
echo "Making World...."
cd /usr/src
make world DESTDIR=$JAIL -DNOCLEAN
cd etc
make distribution DESTDIR=$JAIL NO_MAKEDEV=yes
echo "Making devices..."
cd $JAIL/dev
sh MAKEDEV jail
cd $JAIL
ln -sf dev/null kernel
echo "Preparing initial configuration..."
touch $JAIL/etc/fstab
grep nameserver /etc/resolv.conf $JAIL/etc/resolv.conf
echo "jail.set_hostname_allowed=0" /etc/sysctl.conf
echo "jail.sysvipc_allowed=1" /etc/sysctl.conf
echo "inetd_flags="-wW -a 192.168.0.1" /etc/rc.conf
echo "network_interfaces=\"\"" /etc/rc.conf
echo "sendmail_enable=\"NONE\"" $JAIL/etc/rc.conf
echo "portmap_enable=\"NO\"" $JAIL/etc/rc.conf
echo "======================================================"
echo "*Mission accomplished!*"
echo
echo "To start the jail you've just created, do this command:"
echo "Substitute the IP address and hostname with your own."
echo
echo "jail /home/jail hostname 192.168.0.2 /bin/sh /etc/rc"
echo "======================================================"
FreeBSD的Jail功能目前还不算很强的,尤其是管理方面。不过幸好有一些3rd party的程序增强了这方面的功能,这里就不再讨论下去了。有兴趣的可以自己去搜索一下。