UbuntuでKVM


目次

はじめに
KVMのインストール
CPUの確認
パッケージのインストール
ネットワーク設定
仮想マシンのイメージ作成
仮想ディスク設定ファイルの作成
イメージ作成
仮想マシンの設定
仮想マシンの起動とログイン
仮想マシンの最小限の設定
仮想マシンの停止
仮想マシンの起動と停止
virshによる起動と停止
virt-managerによる起動と停止
NFSによるファイル共有
ホスト側の設定
ゲスト側の設定
SSHFSによるファイル共有
管理
設定ファイルのバックアップ
仮想マシンの削除
仮想マシンのclone作成
qcow2のシュリンク
qcow2の差分イメージ作成
差分イメージのバックアップ
acpiの設定
多数の仮想マシンを作る
仮想マシン名を決める
DHCPの設定
テンプレートとなる仮想イメージ作成
テンプレートとなる仮想マシンの設定
テンプレートとなる仮想ディスクの差分イメージの作成
仮想マシンのコピー
仮想マシンのコピーを行うスクリプト作成
仮想マシンのWebサーバに外部から接続
ホスト名の設定
ゲスト側の設定
ホスト側の設定

はじめに

Ubuntu 8.04 LTS (Hardy Heron)に仮想化環境KVM (Kernel-based Virtual Machine)をインストールし, 利用する方法について説明します. Ubuntu 8.10以降は, ubuntu-vm-builderがvmbuilderとなるなど変更されているので注意してください.

KVMは2006年頃から開始された仮想化技術で, 特徴はLinuxカーネル自体に仮想化の機能が組み込まれていることです. Xenなどのハイパーバイザ型の仮想化技術とは若干異なり, ホストマシンで使用しているLinuxカーネルがハイパーバイザを兼ねています. I/O処理はQEMUによりエミュレートされます.

参考

KVMのインストール

CPUの確認

KVMを実用的に利用するには,CPUがハードウェア仮想化をサポートしている必要があります (AMDならSVM,IntelならVT). また,BIOSでハードウェア仮想化の機能を有効にしている必要があります.

ハードウェア仮想化が利用可能かどうかは, ターミナルで以下のように入力して確認できます. 何も表示されなければ,ハードウェア仮想化は利用できません.

$ egrep '(vmx|svm)' /proc/cpuinfo

パッケージのインストール

以下のようにして必要なパッケージをインストールします.

$ sudo apt-get install kvm libvirt-bin
$ sudo adduser `id -un` libvirtd
$ sudo apt-get install ubuntu-vm-builder
$ sudo apt-get install virt-manager

adduser `id -un` libvirtd は, 自分をlibvirtdグループに追加しています. groups コマンドを実行してlibvirtdが表示されなければ, 一旦ログアウトして,再ログインします.

仮想マシンにはsshでログインするので,以下のようにしてインストールしておきます.

$ sudo apt-get install openssh-client

また,ホストOS側にapt-proxyを導入しておくと, 仮想OSのアップデートが非常に楽になるので,以下のようにしてインストールしておきます.

$ sudo apt-get install apt-proxy

/etc/apt-proxy/apt-proxy-v2.conf のubuntuセクションを以下のように変更します.

[ubuntu]
;; Ubuntu archive
backends = http://jp.archive.ubuntu.com/ubuntu
min_refresh_delay = 15m

ネットワーク設定

ここでは,NATでネットワークを構成することにします. すなわち,ホストマシンと仮想マシン(複数可)の間で プライベートネットワークを構成し, 仮想マシンから外部への通信については ホストマシンがNAT(アドレス変換)を行い外部へルーティングします.

そのため /etc/sysctl.conf に以下の行を追加します.

net.ipv4.ip_forward = 1

ネットワークを再起動します.

$ sudo /etc/init.d/networking restart

KVMで利用されるプライベートネットワークは192.168.122.0/24で, ホストマシン側のIPは192.168.122.1となります.

iptables等で通信を制限している場合には, 以下のように通信を許可しておきます.

$ sudo iptables -A INPUT -p all -s 192.168.122.0/24 -d 192.168.122.1 -j ACCEPT

仮想マシンはプライベートネットワークに接続されているので, 外部から接続することは基本的にはできません. 仮想マシンでWebサーバを立ち上げ外部からアクセスしたい場合は, ホストOSにApacheのmod_proxyモジュール等を導入して リバースプロキシの設定を行えば可能となります.

また,後述のように仮想マシン名をkvm101, kvm102のように設定するので, /etc/hosts ファイルに以下を追加しておきます.

192.168.122.101 kvm101
192.168.122.102 kvm102
192.168.122.103 kvm103

仮想マシンのイメージ作成

仮想ディスク設定ファイルの作成

仮想マシンのディスク設定ファイル vmbuilder.partition を作成します.

root 8000
swap 4000
---
/var 20000

サイズはメガバイト単位で,'---'の後ろは別の仮想ディスクです(4つまで).

イメージ作成

以下のコマンドを実行すると, 仮想マシンのイメージが指定したディレクトリ中に作成されます.

$ sudo ubuntu-vm-builder kvm hardy --suite hardy --arch i386 \
  --mem 2047 \
  --dest ディレクトリ名 \
  --libvirt qemu:///system \
  --mirror http://192.168.122.1:9999/ubuntu \
  --part vmbuilder.partition \
  --host ホスト名 \
  --ip IPアドレス \
  --user ユーザID \
  --name 'ユーザ名' \
  --pass 'パスワード' \
  --addpkg unattended-upgrades \
  --addpkg acpid \
  --addpkg language-pack-ja \
  --addpkg ntp \
  --addpkg openssh-client \
  --addpkg openssh-server \
  --addpkg linux-image-virtual \
  --addpkg language-pack-ja-base

主なオプションの意味は以下の通りです.

オプション 意味
mem メモリサイズ (MB単位で2047が最大)
dest イメージを作成するディレクトリ名
mirror aptソースのミラー
part ディスクパーティションの指定ファイル名
host 仮想マシンのホスト名
ip 仮想マシンのIPアドレス
user 仮想マシンに作成するユーザID
name 上記ユーザIDのユーザ名
pass 上記ユーザIDのパスワード
addpkg 追加インストールするパッケージ名 (複数可)

以下は,仮想マシン名kvm101のイメージをディレクトリ ~/vm/kvm101 中に作成する例です. ユーザID,ユーザ名,パスワードは適宜変更してください.

$ mkdir ~/vm
$ cd ~/vm
$ sudo ubuntu-vm-builder kvm hardy --suite hardy --arch i386 \
  --mem 2047 \
  --dest kvm101 \
  --libvirt qemu:///system \
  --mirror http://192.168.122.1:9999/ubuntu \
  --part vmbuilder.partition \
  --host kvm101 \
  --ip 192.168.122.101 \
  --user tamura \
  --name 'Naoyuki Tamura' \
  --pass 'password' \
  --addpkg unattended-upgrades \
  --addpkg acpid \
  --addpkg language-pack-ja \
  --addpkg ntp \
  --addpkg openssh-client \
  --addpkg openssh-server \
  --addpkg linux-image-virtual \
  --addpkg language-pack-ja-base

複数のイメージを作成する場合には, 上記を行うシェルスクリプト等を作成しておくと便利です.

なお,ネットワーク状況にもよりますが, 一回目のイメージ作成には20分程度が必要です. 続けてイメージ作成を行った場合は, apt-proxyによりパッケージファイルがキャッシュされているため, 2分程度 で作成できます. ただ,apt-proxyが時々固まるのが難点です. 固まったら以下のようにしてapt-proxyを再起動してみてください.

$ sudo /etc/init.d/apt-proxy restart

作成された仮想ディスクのフォーマットはqcow2です. 初期サイズはだいたい以下の通り.

-rw-r--r--  1 tamura root   186769408 2009-05-07 04:58 root.qcow2
-rw-r--r--  1 tamura root    40869888 2009-05-07 04:58 var.qcow2

なお,仮想マシンの設定ファイルは /etc/libvirt/qemu/kvm101.xml に保存されています.

仮想マシンの設定

仮想マシンの起動とログイン

後述のvirt-managerで仮想マシンを起動することも可能ですが, ここではコマンドラインからvirshを用いて起動します.

$ virsh start kvm101
Connecting to uri: qemu:///system
ドメイン kvm101 が起動されました

仮想マシンが立ち上がるまで1分程度待ってからsshでログインします. 仮想マシンに作成したユーザIDが, ホスト側と異なる場合は ssh ユーザID@kvm101 とします.

$ ssh kvm101
.....
Are you sure you want to continue connecting (yes/no)? yes
.....
xxx@kvm101's password: パスワードを入力

xxx@kvm101:~$

これで仮想マシンにログインできるはずです.

仮想マシンの最小限の設定

まずはパスワードを変更しておきます.

xxx@kvm101:~$ passwd

タイムゾーンを設定します.

xxx@kvm101:~$ sudo dpkg-reconfigure tzdata

aptのソースラインをホストのapt-proxyを利用するように変更し, ソフトウェアアップデートを実行します.

xxx@kvm101:~$ cat >sources.list
deb http://192.168.122.1:9999/ubuntu hardy main restricted universe multiverse
deb-src http://192.168.122.1:9999/ubuntu hardy main restricted universe multiverse
deb http://192.168.122.1:9999/ubuntu-security hardy-security main restricted universe multiverse
deb-src http://192.168.122.1:9999/ubuntu-security hardy-security main restricted universe multiverse
Ctrl-Dを入力
xxx@kvm101:~$ sudo cp sources.list /etc/apt/
xxx@kvm101:~$ sudo apt-get update
xxx@kvm101:~$ sudo apt-get upgrade

その他,必要に応じてインストールします.

xxx@kvm101:~$ sudo apt-get install nano

LAMPサーバーとして設定したい場合は,以下の記事などを参考にすると良いでしょう.

仮想マシンの停止

仮想マシンのOSをシャットダウンします.

xxx@kvm101:~$ sudo shutdown -h now

ホストマシン側のvirshで仮想マシンを停止します.

$ virsh shutdown kvm101
Connecting to uri: qemu:///system
ドメイン kvm101 をシャットダウンしています

仮想マシンの起動と停止

virshによる起動と停止

以下のようにして,起動と停止が行えます.

$ virsh
virsh # start kvm101
ドメイン kvm101 が起動されました

virsh # list --all
 Id 名前               状態
----------------------------------
 10 kvm101               実行中

virsh # shutdown kvm101
ドメイン kvm101 をシャットダウンしています

virshで仮想マシンをシャットダウンする前に, 仮想マシンにログインして仮想マシンのOSをシャットダウンするのを忘れないこと. 後述の acpiの設定をしておけば, 仮想マシンのOSをシャットダウンはvirsh shutdownで自動的に行れます.

また,suspendとresumeで一時停止および再開を行えます.

virt-managerによる起動と停止

virt-managerを利用すると, 仮想マシンの起動,停止,仮想コンソール(VNC利用)からのログイン等をGUIで行えます.

$ virt-manager

virt-managerが起動したら, 「localhost (System)」の行をダブルクリックします.

kvm101の行を選択して, 「開く」ボタンを押すと仮想コンソールが表示され, 「Details」ボタンを押すと仮想マシンの状況が表示されます.

NFSによるファイル共有

ここでは,ホストマシンのディスクを仮想マシンからNFSによりマウントする方法を説明します. NFSによるファイル共有では, 利用するユーザのUID (できればGIDも)がホストマシンと仮想マシンの両側で 一致している必要があります.

ホスト側
$ grep tamura /etc/passwd
tamura:x:1000:1000:Naoyuki Tamura,,,:/home/tamura:/bin/bash

ゲスト側
xxx@kvm101:~$ grep tamura /etc/passwd
tamura:x:1000:1000:Naoyuki Tamura,,,:/home/tamura:/bin/bash

ホスト側の設定

まず,NFSパッケージをインストールします.

$ sudo apt-get install nfs-kernel-server

/etc/exportfs ファイルを編集してexportするポイントを追加します.

/home 192.168.122.0/24(rw,no_root_squash,async,no_subtree_check)

/etc/hosts.allow ファイルを編集して以下を追加します.

mountd: 192.168.122. : ALLOW
portmap: 192.168.122. : ALLOW

NFSを再起動します.

$ sudo /etc/init.d/nfs-kernel-server restart
$ sudo exportfs -a

ゲスト側の設定

NFSパッケージをインストールします.

xxx@kvm101:~$ sudo apt-get install nfs-common

マウントポイントを作成し,マウントします.

xxx@kvm101:~$ sudo mkdir /mnt/home
xxx@kvm101:~$ sudo mount 192.168.122.1:/home /mnt/home

/etc/fstab に以下の行を追加すれば,起動時に自動的にマウントします.

192.168.122.1:/home /mnt/home nfs defaults 0 0

SSHFSによるファイル共有

sshfsパッケージをインストールし, 自分のユーザID (xxx)をfuseグループに追加,一旦ログアウトして再ログインします.

$ sudo apt-get install sshfs
$ sudo adduser xxx fuse

次に,仮想マシンを起動しておきます.

$ virsh start kvm101

マウントポイントを作成します.

$ sudo mkdir /mnt/kvm101
$ sudo chown xxx /mnt/kvm101

以下のコマンドとパスワードを入力し, 仮想マシンの自分のホームを /mnt/kvm101 にマウントします.

$ sshfs -o follow_symlinks 'xxx@kvm101:' /mnt/kvm101

ユーザxxxがownerのディレクトリしかマウントできないので注意してください.

以下のコマンドでアンマウントします.

$ fusermount -u /mnt/kvm101

参考

管理

設定ファイルのバックアップ

仮想マシンの設定ファイルのバックアップは, /etc/libvirt/qemu/kvm101.xml をコピーしておけばOKです.

/etc/libvirt/qemu/kvm101.xml は,以下のようにしても保存できますが, <target dev='vnet1'/> 等の行が追加されており, 起動中の場合,vncのポートも現在割り当てられているポート番号となっているので注意します.

$ virsh dumpxml kvm101 >kvm101.xml

加えて,仮想ディスクのファイル root.qcow2 , var.qcow2 をコピーしておけば, 仮想マシンの環境がバックアップできます.

仮想マシンの削除

仮想マシンの設定ファイル /etc/libvirt/qemu/kvm101.xml は, 以下のようにすれば削除されます.

$ virsh undefine kvm101

あとは仮想ディスクのファイル root.qcow2 , var.qcow2 を 削除すればOKです.

仮想マシンのclone作成

仮想マシンを停止した上で, 以下のようにすればcloneを作成できます (「libvir: QEMU エラー : 」が2行表示されますが,問題ないようです...). 新しい仮想ディスクファイル名はフルパスで-fオプションで指定します.

$ mkdir kvm101clone
$ virt-clone --connect=qemu:///system \
  -o kvm101 -n kvm101clone \
  -f ~/vm/kvm101clone/root.qcow2 -f ~/vm/kvm101clone/var.qcow2

以下のように起動します.

$ virsh start kvm101clone
Connecting to uri: qemu:///system
ドメイン kvm101clone が起動されました
$ virsh list
Connecting to uri: qemu:///system
 Id 名前               状態
----------------------------------
 27 kvm101clone          実行中

仮想マシン名はkvm101cloneですが,IPアドレスもホスト名も kvm101と同じになっている点に注意してください.

また,Mac addressが変更になって,ネットワークカードが認識されなくなったら, virt-managerからログインして, /etc/udev/rules.d/70-persistent-net.rules を削除し,再起動します.

qcow2のシュリンク

仮想ディスクが使っているうちに肥大化したら, 仮想マシンを停止した上で,シュリンクします.

$ mv root.qcow2 root.qcow2.old
$ qemu-img convert -O qcow2 root.qcow2.old root.qcow2
$ mv var.qcow2 var.qcow2.old
$ qemu-img convert -O qcow2 var.qcow2.old var.qcow2
$ rm root.qcow2.old var.qcow2.old

qcow2の差分イメージ作成

仮想マシンを停止した上で,仮想ディスクを元のイメージと差分のイメージに分割します. 仮想ディスクへの新しい書き込みは,差分イメージに反映され, 元イメージは変更されません.

$ mv root.qcow2 root_base.qcow2
$ qemu-img create -b root_base.qcow2 -f qcow2 root.qcow2
$ mv var.qcow2 var_base.qcow2
$ qemu-img create -b var_base.qcow2 -f qcow2 var.qcow2

差分イメージでの更新結果は,以下のコマンドで元イメージに反映されます.

$ qemu-img commit -f qcow2 root.qcow2
$ qemu-img commit -f qcow2 var.qcow2

差分イメージを持つ仮想マシンのcloneを上記の方法で作成した場合, 元イメージを別途コピーする必要があります(シンボリックリンクでも可).

差分イメージのバックアップ

差分イメージを作成している場合,バックアップは 仮想マシンを停止した上で,以下のようにすれば良いでしょう.

$ TS=`date '+%Y%m%d-%T'`
$ cp root.qcow2 root.qcow2.$TS
$ cp var.qcow2 var.qcow2.$TS

acpiの設定

デフォルトの設定 /usr/share/ubuntu-vm-builder/templates/libvirt.tmpl では acpiが有効になっていません.

以下のようにして,仮想マシン設定をダウンロードします.

$ sudo cat /etc/libvirt/qemu/kvm101.xml >kvm101.xml

<devices> の直前に以下を挿入します.

  <features>
    <acpi/>
  </features>

以下のようにして,変更した設定を反映させます.

$ virsh define kvm101.xml

仮想マシンを再起動します.

これで,virsh shutdownで仮想マシンのOSも自動的にシャットダウンされるようになります.

多数の仮想マシンを作る

ほぼ同一設定の仮想マシンを多数作ってみます.

仮想マシン名を決める

仮想マシン名,ホスト名,IPアドレス,MACアドレスは,以下のように設定することとします. MACアドレスの 52:54:00:*:*:* はQEMUで用いるMacアドレスの範囲で, 最終桁のc8は200の16進表記です.

仮想マシン名 ホスト名 IPアドレス MACアドレス
kvm200 kvm200 192.168.122.200 52:54:00:00:00:c8
kvm201 kvm201 192.168.122.201 52:54:00:00:00:c9
kvm202 kvm202 192.168.122.202 52:54:00:00:00:ca
kvm203 kvm203 192.168.122.203 52:54:00:00:00:cb
...... ...... ............... .................

また,それぞれの仮想マシンのディスクイメージは ~/vm/kvm200/ 等のディレクトリ中に 作成することにします.

DHCPの設定

仮想マシンのIPアドレスは,DHCPで割り当てることにするので, ホスト側にdhcp3-serverをインストールします.

$ sudo apt-get install dhcp3-server

/etc/dhcp3/dhcpd.conf を編集して,以下を追加します.

subnet 192.168.122.0 netmask 255.255.255.0 {
  deny unknown-clients;
  use-host-decl-names on;
  range 192.168.122.200 192.168.122.254;
  option subnet-mask 255.255.255.0;
  option broadcast-address 192.168.122.255;
  option routers 192.168.122.1;
  option domain-name-servers 192.168.122.1;
  host kvm200 { fixed-address 192.168.122.200; hardware ethernet 52:54:00:00:00:c8; }
  host kvm201 { fixed-address 192.168.122.201; hardware ethernet 52:54:00:00:00:c9; }
  host kvm202 { fixed-address 192.168.122.202; hardware ethernet 52:54:00:00:00:ca; }
  host kvm203 { fixed-address 192.168.122.203; hardware ethernet 52:54:00:00:00:cb; }
}

dhcpdを再起動します.

$ sudo apt-get install dhcp3-server

/etc/hosts ファイルに以下を追加しておきます.

192.168.122.200 kvm200
192.168.122.201 kvm201
192.168.122.202 kvm202
192.168.122.203 kvm203

テンプレートとなる仮想イメージ作成

仮想マシンのイメージ作成と同様にして, 以下のように,仮想マシン名kvm200のイメージをディレクトリ ~/vm/kvm200 中に作成します. IPアドレスを指定していないので,dhcpとなります. メモリサイズ,ユーザID,ユーザ名,パスワードは適宜変更してください.

$ cd ~/vm
$ sudo ubuntu-vm-builder kvm hardy --suite hardy --arch i386 \
  --mem 2047 \
  --dest kvm200 \
  --libvirt qemu:///system \
  --mirror http://192.168.122.1:9999/ubuntu \
  --part vmbuilder.partition \
  --host kvm200 \
  --user tamura \
  --name 'Naoyuki Tamura' \
  --pass 'password' \
  --addpkg unattended-upgrades \
  --addpkg acpid \
  --addpkg language-pack-ja \
  --addpkg ntp \
  --addpkg openssh-client \
  --addpkg openssh-server \
  --addpkg linux-image-virtual \
  --addpkg language-pack-ja-base

テンプレートとなる仮想マシンの設定

MACアドレスの変更

以下のように設定ファイル kvm200.xml を取り出します.

$ sudo cat /etc/libvirt/qemu/kvm101.xml >kvm200.xml

mac addressの部分を 52:54:00:00:00:c8 に修正し, 以下のように反映させます.

$ virsh define kvm200.xml

仮想マシンの起動・設定・停止

仮想マシンの設定と同様にテンプレートとなる仮想マシンを起動・設定し, さらに以下を行います.

/etc/hostname ファイルを削除

xxx@kvm200:~$ sudo rm /etc/hostname

/etc/hosts ファイル中,kvm200の行を削除し, 以下のような内容に編集します.

127.0.0.1 localhost
192.168.122.200 kvm200
192.168.122.201 kvm201
192.168.122.202 kvm202
192.168.122.203 kvm203

acpiの設定も忘れずに行います.

その他必要に応じて, 他仮想マシンのテンプレートとなるよう, その他のパッケージのインストールや設定を行います.

仮想マシンを停止します.

テンプレートとなる仮想ディスクの差分イメージの作成

qcow2の差分イメージ作成と同様に, 仮想マシンを停止した上で,仮想ディスクを元のイメージと差分のイメージに分割します. また,元イメージを書込み禁止にしておきます.

$ cd ~/vm/kvm200
$ mv root.qcow2 root_base.qcow2
$ qemu-img create -b root_base.qcow2 -f qcow2 root.qcow2
$ mv var.qcow2 var_base.qcow2
$ qemu-img create -b var_base.qcow2 -f qcow2 var.qcow2
$ chmod -w root_base.qcow2 var_base.qcow2
$ cd ..

仮想マシンのコピー

以下のように仮想マシンkvm200をコピーした仮想マシンkvm201を作成します. オプション -m でMACアドレスを指定しています.

$ mkdir ~/vm/kvm201
$ virt-clone --connect=qemu:///system \
  -o kvm200 -n kvm201 -m 52:54:00:00:00:c9 \
  -f ~/vm/kvm201/root.qcow2 -f ~/vm/kvm201/var.qcow2

元イメージのシンボリックリンクを作成します.

$ cd ~/vm/kvm201
$ ln -s ../kvm200/root_base.qcow2 .
$ ln -s ../kvm200/var_base.qcow2 .

以上と同様の操作を繰り返せば,仮想マシンのコピーを作成できます.

それぞれは,別のMACアドレスを持ち, DHCPにより自動的に別々のIPアドレスとホスト名が設定されます.

仮想マシンのコピーを行うスクリプト作成

これらの処理を自動的に行うために, 以下のようなPerlスクリプトを vmclone として作成します.

#!/usr/bin/perl
use strict;

my $vm_no = shift;
my $vm_home = "/home/tamura/vm";
my $vm_base = "kvm200";
my $vm_host = "kvm$vm_no";
my $vm_mac = sprintf("52:54:00:00:00:%02x", $vm_no);

if ($vm_no <= 200 || 254 < $vm_no || -e "$vm_home/$vm_host") {
    die;
}
mkdir "$vm_home/$vm_host";
my $cmd = "virt-clone --connect=qemu:///system";
$cmd .= " -o $vm_base -n $vm_host -m $vm_mac";
$cmd .= " -f $vm_home/$vm_host/root.qcow2 -f $vm_home/$vm_host/var.qcow2";
print "$cmd\n";
system($cmd);
foreach my $base ("root_base.qcow2", "var_base.qcow2") {
    symlink "$vm_home/$vm_base/$base", "$vm_home/$vm_host/$base";
}
exit 0;

以下のコマンドでkvm200を元にして,kvm202が作成されます.

$ ./vmclone 202

仮想マシンのWebサーバに外部から接続

ここでは,NATネットワーク構成のまま, ホストOS側にApacheとmod_proxyモジュールを導入してリバースプロキシの設定を行うことで, 外部から仮想マシンのWebサーバに接続可能にします.

すなわち,ApacheのVirtual host機能とリバースプロキシ機能を用い http://www1.example.jp にアクセスすればkvm101, http://www2.example.jp にアクセスすればkvm102のWebサーバに接続できるようにします (example.jpのドメイン名は一例です.実際に合うように変更してください).

ホスト名の設定

www1.example.jp および www2.example.jp のどちらも名前解決すれば ホストマシンのIPアドレスになるように設定しておきます.

ゲスト側の設定

kvm101にApache2をインストールします.

xxx@kvm101:~$ sudo apt-get install apache2

/var/www/ 中にWebコンテンツを置きます.

kvm102にも同様にApache2をインストールします.

ホスト側の設定

ホストOSにApache2をインストールし,mod_proxyを導入します.

$ sudo apt-get install apache2
$ sudo a2enmod proxy
$ sudo a2enmod proxy_http

/etc/apache2/sites-available/ 中に以下の内容で www1 ファイルを作成します (www1.example.jp用). なおAllow fromにはアクセスを許すIPアドレス等を記述します.

<VirtualHost *>
  ServerName www1.example.jp
  ProxyRequests Off

  <Proxy *>
    Order deny,allow
    Deny from all
    Allow from all
  </Proxy>

  ProxyPass / http://kvm101/
  ProxyPassReverse / http://kvm101/
</VirtualHost>

同様に www2 ファイルも作成します.

設定ファイルを有効にして,Apacheを再起動します.

$ sudo a2ensite www1
$ sudo a2ensite www2
$ sudo /etc/init.d/apache2 restart

これで http://www1.example.jp ならkvm101, http://www2.example.jp ならkvm102で立ち上がっているWebサーバに接続されるはずです.

参考

「Ubuntuでお勉強」に戻る


田村直之