KVMの導入と基本的な使い方:知って見るみるKVM(2)(2/3 ページ)
アナウンス後わずか2カ月でLinux Kernelにマージされたことで一躍注目を浴びることになった仮想化技術「KVM」。しかし、その具体的な仕組みや使用方法となると、意外と知られていないのではないでしょうか。この連載ではそんなKVMについて紹介します(編集部)
ゲストOSの起動
インストールが終わったら、仮想ハードディスクイメージを使ってブートします(-boot c)。今回、ゲストOSはX Window Systemを必要としない最小構成にしています。通常、QEMUはSDLを使ったVGAでの出力ですが、今回はテキストモードで起動します(-curses)。
実行するとそのまま仮想ターミナル上でゲストOSのブートが始まり、ブート後、ログインし/proc/cpuinfoを見ると、CPUの型が「QEMU Virtual CPU」となっていることが分かります。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
この状態で、ゲストOSはホストOSを介して外部ネットワークにアクセスすることができます。普通にKVMを使用するだけであれば、この起動方法だけを知っていれば十分でしょう。
KVMの基本的な使い方は以上です。QEMUを知っている方であれば、ハードウェアの制限があること以外、使用方法はほぼまったく同じであることがお分かりになると思います。
使い方に応じたネットワーク構成
これで動作は可能な状態になったわけですが、kvm/qemuではいろいろなネットワーク設定を行うことができます。中には、manマニュアルをよく読んでもなかなか分かりにくい部分があります。そこで、いくつかの使い方を想定し、ネットワークの設定方法について解説します。
主に想定される使い方は以下のようなケースです。
- 基本的にクローズ環境でゲストOSを動かす
- ケース1の構成で、ホストOSやホストOSの外部端末からもゲストOSにアクセスできるようにする
- ケース1の構成で、複数のゲストOS同士で通信する
- サービス用のゲストOSを複数起動し、外部ノードからゲストOSに簡単にアクセスできるようにする
●ケース1:基本的にクローズ環境でゲストOSを動かす
先に説明した手順で設定すれば、そのまま利用できます。この場合、デフォルト値の「-net user」オプションが指定されています。ネットワーク構成は図1のとおりです。
-net userオプションでは、デフォルトゲートウェイとしてDHCPサーバが組み込まれたQEMU FW/DHCP(10.0.2.2)が、DNSのリゾルバとしてQEMU DNS(10.0.2.3)が自動的に指定されます。ゲストOSは、QEMUを介して外部ネットワークにアクセスすることはできますが、10.0.2.2がファイアウォールとして機能するため、ホストOSの外部ノードはもちろん、ホストOSからも、ゲストOSに対しネットワーク経由でアクセスすることはできません。
●ケース2:ケース1の構成で、ホストOSやホストOSの外部端末からもゲストOSにアクセスできるようにする
ケース1で実行したコマンドに「-redir」オプションを加えて起動します。また、このケースでも-net userオプションが省略されています。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
この例ではホストOSのtcp/2222ポートとゲストOSのtcp/22ポートをバインドします。ホストOSのtcp/2222にアクセスすると、ゲストOSのtcp/22ポート(ssh)にリダイレクトされるようになります。ネットワーク構成は図2のとおりです。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
公開するサービスごとにredirオプションで指定を行う必要があるため、一時的な利用にはよいのですが、サーバとして通常運用するには不便です。
●ケース3:ケース1の構成で、複数のゲストOS同士で通信する
このケースでは「-net nic,macaddr」オプションと「-net socket」オプションを使用します。
前者ではMACアドレスを指定します。ゲストOSのMACアドレスは、デフォルトでは52:54:00:12:34:56が使用されますが、ゲストOS同士で通信させる場合、別のMACアドレスを指定する必要があります。またこのオプションを指定すると、-net userオプションにはあったQEMU FW/DHCPサーバや、QEMU DNSサーバはありませんので、ゲストOS起動後に手動でIPアドレスを設定する必要があります。
後者はTCPソケットを用いたゲストOS同士の通信の設定です。1台目のゲストOSは「-net socket,listen」オプションで待ち受け、2台目のゲストOSは「-net socket,connect」オプションで1台目に接続します。
- ゲストOS 1台目
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
ホストOSのtcp/1234ポートで2台目のゲストOSからの通信を待ち受けます(-net socket,listen=:1234)。IPアドレスはゲストOS自体で192.168.1.101/24で設定します。
- ゲストOS 2台目
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
1台目のゲストOSとは別のMACアドレスを指定します(-net nic,macaddr=52:54:00:12:34:57)。またホストOSの127.0.0.1 tcp/1234でLISTENしているポートに対し、TCPセッションを張ります(-net socket,connect=127.0.0.1:1234)。ゲストOS自体で1台目とは別のIPアドレス、192.168.1.102/24を設定します。
ネットワーク構成は図3のとおりです。上記のように起動すると、Guest1とGuest2の間で、ホストOSのloインターフェイスのtcp/1234ポートを介し、TCPソケットをトンネルとした通信を行えるようになります。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
上記の例では、tcp/1234ポートがGeust1側、tcp/50100ポートがGuest2側です。Guest1、Guest2の間は、ICMP、TCP、UDPのいずれの通信も行えます。ただし、このケースでは外部との通信は一切行えないので、クローズ環境での疎通テストを行うケースなどで利用することになるでしょう。
Copyright © ITmedia, Inc. All Rights Reserved.