IPnuts4.1b9 Server
準備
ディスクの準備
/varと/tmpに十分な容量が必要です。検証ではディスクにマウントしましたが、 /tmpに200MB、/varに500MB 程度必要と思われます。/etc/vserver以下は設定ファイルとして保存されますが、仮想環境のある/var/lib/vserver以下は保存されないので、ディスク上に/varをマウントしてから環境を作ることをおすすめします。
パッケージの追加
次のパッケージを読み込みます。debootstrapは環境を構築するときだけ必要です。
- util-vserver,debootstrap,perl
#lrp_load -ba util-vserver #lrp_load -b perl #lrp_load -b debootstrap
== 環境の作成 ===
vserver vserverの名前 build --hostname 作成するホスト名 -m debootstrap --interface デバイス:追加するアドレス/マスク -- -d etch -- --arch i386
#vserver hoge build --hostname hoge -m debootstrap --interface eth0:192.168.0.101/24 --interface lo:127.0.0.2/8 -- -d etch -- --arch i386
#ループバックデバイスは、ホストや他のゲストと通信したいときや、ゲスト内のサービスでに必要なときにだけ作成するほうが良いでしょう。
コンテキストをマニュアルで指定できるようにします。値は、各ゲストOSに固有の値です。
echo 101 > /etc/vservers/hoge/context
- startで開始
- enterでゲスト環境にログイン
- stopで停止
します。
# vserver hoge start Starting system log daemon: syslogd. Starting kernel log daemon: klogd. Not starting internet superserver: no services enabled. Starting periodic command scheduler: crond.
ホスト側とゲスト側の両方でsshを使うようになると思うので、IPnuts(ホスト)の/etc/ssh/sshd_configで ListenAddressを指定してください。
例:
ListenAddress 192.168.0.1 ListenAddress xxx.xxx.xxx.xxx
その他必要な設定は http://rayearth.homelinux.net/pukiwiki/?Debian%2FVServer などを参考にしておこなってください。
stop時にいろいろエラーが出ますが、この場合、ゲスト環境のrc6.d内の不要なリンクを消します。
- K25hwclock.sh K89klogd , それと S20sendsigs以外のSで始まるリンク。
rc2.d内の S11klogdも不要でしょう。
設定ができ、起動の確認ができたら、必要な場合は、起動時にゲストが起動するようにします。
# echo default > /etc/vservers/<vserver>/apps/init/mark
最後に設定を保存します。
# save_conf
ゲストでapacheを動かしてみる
ゲストでapacheをポート10080動作させて、IPnuts側の80番ポートで表示するようにします。 あらかじめ、webadminのポート番号は変えておきます。#必要ありませんが、安全のため
ゲストに入ります。
# vserver hoge enter
apacheをインストール
hoge:/# apt-get install apache2
/etc/hostsにゲストのホストネームとのアドレスを設定していることを確認 apacheをポート10080で動作させるので /etc/apache2/port.confのListenを設定 /etc/apache2/port.conf:
Listen 10080
apacheを起動します。
# /etc/init.d/apache2 start (またはrestart)
DNATの設定
次に、IPnuts(ホスト側)で、DNATによって、公開アドレス(aaa.aaa.aaa.aaa)でゲストで動作している。 apacheにアクセスできるようにします。
新規NAT Target
- IP Address:ゲストのプライベートアドレス
Port Number:10080
Source
- Any OUT
Destination Address
- 公開アドレス(aaa.aaa.aaa.aaa または空白)
Service
- www
これを追加の欄に設定して、Save後,Start/Restartします。
パケット制御の受信フィルタで、変換後のアドレス(プライベートアドレス)で受信できるように 設定してください。 受信許可するポート番号は、上記の場合10080番になります。
これで、ゲスト環境のapacheが公開できます。
ゲスト間、ゲストーホスト間の通信の制限
ゲストOSにループバックデバイスを設定した場合、パケットのフィルタリングはsysconfig.pyの中でやっており、送受信は全て許可されているため、ゲスト間、ゲストーホスト間の通信の制限はwebadminではできません。
/etc/rc.localに記述するなどして、INPUTテーブルにルールを挿入する必要があります。
RCLOCAL=on にして、INPUT にlo向けに新しいチェインを挿入して、ルールを追加してみました。
以下の例だと、ゲストは一切ホスト側に通信できなくなります。 アドレスは適当に読み直してください。
# local.lrp startup script
#
# this script is saved by save_conf to config.lrp.
RCDLINKS="2,S99 2,K00"
###########################
#
# main
#
###########################
# if you want to run this script ,set RCLOCAL=on.
RCLOCAL=on
[ "$RCLOCAL" = on ] || exit
IPT=/sbin/iptables
iptables_lo(){
case $1 in
start)
$IPT -N INPUT_LO
$IPT -I INPUT -j INPUT_LO -i lo
# $IPT -A INPUT_LO -p icmp -j ACCEPT
for me in localhost 192.168.0.1 グローバルIP
do
$IPT -A INPUT_LO -d $me -s ! $me -j DROP
done
;;
stop)
$IPT -D INPUT -j INPUT_LO -i lo
$IPT -F INPUT_LO
$IPT -X INPUT_LO
;;
esac
}
case $1 in
start )
echo "Starting $0:"
# write startup script.
iptables_lo start
echo .
;;
stop )
echo "Stopping $0:"
# write stop script.
iptables_lo stop
echo .
;;
restart )
$0 stop
sleep 1
$0 start
;;
* )
echo "Usage: $0 {start|stop|restart}"
exit 1
;;
esac
