2011/02/09 CentOS5.5





KVMで仮想環境を構築する

仮想化システムは検証の強い味方です。
複数の環境を一台のマシンで行えること。検証環境を素早く用意できること。
スナップショットによって変更時点まで即座に戻せること。
だから速く、楽に検証が行えます。

CentOSの仮想環境と言えばXenとKVMですが、検証目的としてはKVMのほうが手軽でしょう。
慣れるとKVMの構築もすぐです。

KVMをインストールする
ブリッジ接続を作成する
仮想マシンをブリッジに接続する
NATネットワークの停止


KVMをインストールする
コマンドから、CPUが仮想化機能に対応しているかを確認します。
Intel系CPUならvmxと、AMD系ならsvmと表示されます。

#cat /proc/cpuinfo | grep vmx



表示されなければ、KVMはあきらめましょう。

対応していればyumからKVMに必要なソフトウェアをインストールします。

必要なソフトウェアは主に以下のようになってます。実際はyumが依存関係で入れてくれます。
kvm qemu-img libvirt virt-manqger bridge-utils

というわけで、まずyumでKVM向けQEMUをインストールします。

#yum install kvm qemu-img


次に仮想システム管理の抽象システムであるlibvirtと管理コンソールをインストールします。
仮想システムがネットワーク接続できるためのブリッジ機能が必要ですが、依存関係で入れてくれます。

#yum install lilbvirt virt-manager


インストール後、KVMモジュールをロードします。ロードされたのを確認します。

#modprobe kvm
#modprobe kvm_intel
#lsmod | grep kvm

※AMD系CPUならロードするのはkvm_amdとなります。

libvirtデーモンを起動させ、自動起動に設定します。

#service libvirtd start
#chkconfig libvirtd on



ここまで来たら仮想化マネージャが起動します。
メニューの中に、仮想化マネージャが増えています。



起動したら、localhostへ仮想マシンを追加して操作します。



NAT接続でいいのなら、ここまででKVM仮想化ホストを動作させられます。
デフォルトでKVMは、virbr0という仮想ネットワークアダプタを介し、ホストのIPをNATして外部と通信します。
NATも悪いことではありません。IPマスカレードを使用すれば、DMZのサーバのように検証できるのですから。

しかしサーバとして検証をするならやはりNATは不便です。
iptableでポートフォワーディングしたり、IPマスカレードしてやる必要があります。

というわけでLAN内のセグメントから通信できるよう、ブリッジ接続を使用します。


ブリッジ接続を作成する
LAN内の他の端末と同じように仮想マシンへアクセスするためにはブリッジ接続を作成しなくてはなりません。
openSUSEのときはGUIのクリック一つで解決しましたが、CentOSでは地道に設定ファイルを記述しなくてはなりません。

次のコマンドでネットワークの設定ファイルをコピーし、CentOSにネットワーク接続を増やしてやります。

#cd /etc/sysconfig/network-scripts/
#cp ifcfg-eth0 ifcfg-br0

コピーしたifcfg-br0を編集します
  
DEVICE名をbr0に変更
TYPE=Bridgeを追加
MACアドレスを消し、アドレス(ここではDHCP)を設定してます。
大文字小文字を認識するので、全て記述ミスが無いようにします。TYPEをTypeとするとうまくいきません。

ちなみに静的アドレスを設定する場合はDHCP行の代わりに
BOOTPROTO=static
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
NETWORK=192.168.1.0
BROADCAST=192.168.1.255
と記述します。
/etc/resolv.conにもDNSを記述します。

ifcfg-eth0を編集します
  
eth0のアドレスを消します。IPアドレスはブリッジポートに設定され、eth0はただのプロミスキャストポートになります。
そしてBRIDGEの接続先にbr0を指定します。
記述ミスのないように気を付けましょう。

最後にbr0を有効にします。
※ここで注意点です。
ネットワークを再起動する前に、NetworkManagerというデーモンが停止しているかを確認します。
ブリッジを使うためnetworkデーモンを起動する必要がありますが、NetworkManagerと同居できません。
CentOSはデフォルトではNetworkManagerは止まっているはずですが、一応確認しましょう。

#ifconfig br0 up
#service NetworkManager stop
#chkconfig NetworkManager off
#service network restart
#chkconfig network on


ifconfigを実行し、br0にIPアドレスが設定され、eth0からアドレスが消えていれば成功です。
もしエラーが表示されるようなifcfg-eth0、ifcfg-br0の記述を見直します。
大文字小文字が特にミスしやすいです。

ネットワークが遅く感じたり、外部からサービスへのアクセスができない場合はシステムを再起動しましょう。
検証環境では、うまくサービスが動作しない症状が出ました。


仮想マシンをブリッジに接続する
仮想マシンの構成を開き、まずネットワークアダプタを削除します。
AddHardwareで新しいハードウェアの追加を選択します。


ネットワークを追加します。


タイプは共有物理装置でbr0を選択します。

このとき、ハードウェアモデルは「virtio」か「e1000」を選びましょう。(仮想OSに収録されているドライバにもよりますが)
ハイパーバイザーのデフォルトを選択すると、Realtec8139のNICが選択され、100Mリンクとなります。

これで仮想マシンに対するネットワークの適用は完了です。

が、ここで仮想OSを起動してもDHCPが取得できない。
外部と通信できない、という症状に見舞われることがあります。
ブリッジの作成に失敗したのでしょうか?

いいえ、ホストOS側のファイアウォールが有効になっているからです。

とりあえずシステムメニューの[管理]-[セキュリティとファイアウォールの設定]からファイアウォールを無効化します。


これで外部と通信できるようになります。


NATネットワークの停止
最後にNATアダプタの停止です。
ifconfigと入力すると、virbr0というアダプタが見つかります。
これは仮想マシン用のNATのゲートウェイとして設定してある仮想アダプタです。
ルーティング、DHCPサーバ、DNSプロキシとして動作します。
virbr0を司っているのは、仮想化に重要なデーモンlibvirtdです。

ですが仮想でNAT接続などを使わないのなら、止めてもいいでしょう。

仮想マシンマネージャーのメニューに[編集]-[ホストの設定]を選択します。
仮想ネットワークタブの「ブート時」のチェックを外します。







prev.gif