Jump to contentJump to page navigation: previous page [access key p]/next page [access key n]
コンテンツコンテンツ
仮想化ガイド
  1. 前書き
  2. I 概要
    1. 1 仮想化技術
    2. 2 仮想化シナリオ
    3. 3 Xen 仮想化の紹介
    4. 4 KVM 仮想化の紹介
    5. 5 仮想化ツール
    6. 6 仮想化コンポーネントのインストール
  3. II libvirt を利用した仮想マシンの管理
    1. 7 libvirt デーモン
    2. 8 VM ホストサーバ の準備
    3. 9 ゲストのインストール
    4. 10 基本的な VM ゲスト の管理
    5. 11 接続と認可
    6. 12 高度なストレージ設定
    7. 13 仮想マシンマネージャ を利用した仮想マシンの設定
    8. 14 virsh を利用した仮想マシンの設定
    9. 15 Xen から KVM への移行ガイド
  4. III 全ハイパーバイザ共通の機能
    1. 16 ディスクのキャッシュモード
    2. 17 VM ゲスト の時刻設定
    3. 18 libguestfs
    4. 19 QEMU ゲストエージェント
    5. 20 ソフトウエア TPM エミュレータ
    6. 21 VM ゲスト に対するクラッシュダンプの作成
  5. IV Xen を利用した仮想マシンの管理
    1. 22 仮想マシンホストの設定
    2. 23 仮想ネットワーク
    3. 24 仮想環境の管理
    4. 25 Xen 内でのブロックデバイス
    5. 26 仮想化: オプション設定
    6. 27 管理作業
    7. 28 XenStore: ドメイン間で共有される設定データベース
    8. 29 Xen の高可用性仮想化ホストとしての使用
    9. 30 Xen: 準仮想化 (PV) ゲストから完全仮想化 (FV/HVM) ゲストへの変換
  6. V QEMU を利用した仮想マシンの管理
    1. 31 QEMU の概要
    2. 32 KVM VM ホストサーバ の構築
    3. 33 ゲストのインストール
    4. 34 qemu-system-ARCH を利用した仮想マシンの実行
    5. 35 QEMU モニタを利用した仮想マシンの管理
  7. VI トラブルシューティング
    1. 36 内蔵ヘルプとパッケージのドキュメンテーション
    2. 37 システム情報とログの収集
  8. 用語集
  9. A NVIDIA カードに対する GPU パススルー の設定
  10. B GNU ライセンス
ナビゲーション
適用先 openSUSE Leap 15.6

34 qemu-system-ARCH を利用した仮想マシンの実行 Edit source

仮想ディスクイメージの準備 (詳しくは 33.2項 「qemu-img を利用したディスクイメージの管理」 をお読みください) を行ったあとは、対応する仮想マシンの起動を行うことができます。 33.1項 「qemu-system-ARCH を利用した基本的なインストール」 では VM ゲスト のインストールから実行までの簡単なコマンドを紹介してきましたが、本章では qemu-system-ARCH のより詳しい説明のほか、特定の作業を行うための解決方法についても説明しています。 qemu-system-ARCH に用意されている全てのオプションについて説明を読みたい場合は、マニュアルページ ( man 1 qemu ) をご覧ください。

34.1 基本的な qemu-system-ARCH の実行方法 Edit source

qemu-system-ARCH コマンドは下記の書式で実行します:

qemu-system-ARCH オプション1 -drive file=ディスクイメージ2

1

qemu-system-ARCH には多数のオプションが存在しています。これらのうちのほとんどは擬似ハードウエアを定義するためのパラメータで、残りはエミュレータの一般的な動作に影響があるものです。何もオプションを指定しない場合は、いずれも既定値が適用されますが、少なくともディスクイメージについては指定する必要があります。

2

ディスクイメージには、仮想化を行うゲストシステムのディスクのイメージが含まれているものを指定します。 qemu-system-ARCH では多数のイメージ形式に対応していますので、詳しくは qemu-img --help と入力して実行してください。

重要
重要: AArch64 アーキテクチャについて

KVM サポートは 64 ビット ARM アーキテクチャ (AArch64) 向けにのみ提供されています。 AArch64 アーキテクチャで QEMU を実行する場合、それぞれ下記を行う必要があります:

  • -machine virt-バージョン番号 オプションを指定して、 QEMU ARM 仮想マシンの種類を選択する必要があります。

  • -bios オプションを指定して、ファームウエアイメージファイルを選択する必要があります。

    ファームウエアイメージファイルの指定に関しては、 -drive オプションを利用する方法もあります。たとえば下記のようになります:

    -drive file=/usr/share/edk2/aarch64/QEMU_EFI-pflash.raw,if=pflash,format=raw
    -drive file=/var/lib/libvirt/qemu/nvram/opensuse_VARS.fd,if=pflash,format=raw
  • -cpu host オプションを指定して、 VM ホストサーバ の CPU を指定する必要があります (既定値: cortex-15) 。

  • ホストと同一のバージョンの Generic Interrupt Controller (GIC) を使用したい場合は、 -machine gic-version=host を指定する必要があります (既定値: 2) 。

  • グラフィックモードが必要な場合は、 virtio-gpu-pci のグラフィックデバイスの種類を指定する必要があります。

たとえば下記のようになります:

> sudo qemu-system-aarch64 [...] \
 -bios /usr/share/qemu/qemu-uefi-aarch64.bin \
 -cpu host \
 -device virtio-gpu-pci \
 -machine virt,accel=kvm,gic-version=host

34.2 一般的な qemu-system-ARCH のオプション Edit source

本章では qemu-system-ARCH の一般的なオプションのほか、仮想マシンのプロセッサやメモリ、モデルや時刻処理方式など、基本的な仮想ハードウエアに関連するオプションを説明しています。

-name ゲストの名前

動作させるゲストシステムの名前を指定します。名前はウインドウのタイトル部分に表示されるほか、 VNC サーバでも使用されます。

-boot オプション

起動時にどの順番でドライブを読み込むのかを指定します。ドライブはそれぞれ文字で表され、 ab がそれぞれフロッピィディスクドライブの 1 台目と 2 台目、 c が 1 台目のハードディスク、 d が 1 台目の CD-ROM ドライブ、そして n から p までがイーサネットアダプタかのネットワーク起動を表します。

たとえば qemu-system-ARCH [...] -boot order=ndc のように指定すると、最初にネットワークからの起動を試し、次に 1 台目のCD-ROM ドライブから、最後に 1 台目のハードディスクからの起動を試すことになります。

-pidfile ファイル名

QEMU のプロセス識別番号 (PID) のファイルへの保存先を指定します。これは QEMU をスクリプト内で動作させる場合に有用です。

-nodefaults

既定では、 QEMU はコマンドラインから何も指定を行わない場合、基本的な仮想デバイスを作成します。このオプションを指定すると、その機能が無効化され、グラフィックカードやネットワークカード、パラレルポートやシリアルポートなど、それぞれのデバイスを個別に手作業で指定しなければならなくなります。また、この場合 QEMU モニタも既定では接続されなくなります。

-daemonize

QEMU を起動したあと、プロセスを デーモン化 します。デーモン化を行うことで、仮想マシンの準備が整った段階で標準入出力から切り離されるようになります。

注記
注記: SeaBIOS BIOS 実装について

SeaBIOS は既定で使用される BIOS です。 USB デバイスのほか、任意のドライブ (CD-ROM ドライブ, フロッピィディスクドライブ, ハードディスクドライブ) から起動を行うことができます。また、 USB マウスやキーボードにも対応し、複数の VGA カードを接続することもできます。 SeaBIOS に関する詳細は、 SeaBIOS の Web サイト (英語) をご覧ください。

34.2.1 基本的な仮想ハードウエア構成 Edit source

34.2.1.1 マシンの種類 Edit source

擬似するマシンの種類を指定することができます。対応するマシンの種類について、詳しくは qemu-system-ARCH -M help を実行して確認してください。

注記
注記: ISA-PC について

isapc: ISA-only-PC の種類はサポート対象外となっております。

34.2.1.2 CPU モデル Edit source

プロセッサ (CPU) の型式を指定したい場合は、 qemu-system-ARCH -cpu 型式 のように指定して実行してください。指定可能な CPU の型式について、詳しくは qemu-system-ARCH -cpu help と入力して実行してください。

34.2.1.3 その他の基本オプション Edit source

下記に示すオプションは、コマンドラインから qemu を起動する場合によく使用されるオプションです。利用可能なオプションの一覧を表示したい場合は、 qemu-doc のマニュアルページをお読みください。

-m メガバイト

VM ゲスト に割り当てる RAM のサイズを、メガバイト単位で指定します。

-balloon virtio

VM ゲスト に割り当てる RAM のサイズを動的に変更することのできる、準仮想化デバイスを指定します。動的な割り当ての上限は -m で指定します。

-smp CPU_数

$vmguest; に提供する擬似 CPU 数を指定します。 QEMU では PC プラットフォームの場合、最大で 255 個 (KVM アクセラレーションを使用した場合 64 個) までの CPU を指定することができます。このオプションでは、 ソケット数 やソケットあたりの コア数 、コアあたりの スレッド数 など、 CPU 関連のパラメータを指定することもできます。

下記は qemu-system-ARCH のコマンドライン例です:

> sudo qemu-system-x86_64 \
 -name "SLES 15.6" \
 -M pc-i440fx-2.7 -m 512 \
 -machine accel=kvm -cpu kvm64 -smp 2 \
 -drive format=raw,file=/images/sles.raw
VM ゲスト として SLES を動作させた場合の QEMU のウインドウ
図 34.1: VM ゲスト として SLES を動作させた場合の QEMU のウインドウ
-no-acpi

ACPI サポートを無効化します。

-S

QEMU を CPU を停止させた状態で開始します。 CPU を起動するには、 QEMU モニタ内で c を押します。詳しくは 第35章 「QEMU モニタを利用した仮想マシンの管理 をお読みください。

34.2.2 仮想デバイスの設定保存と読み込み Edit source

-readconfig 設定ファイル

VM ゲスト を起動する際、コマンドラインでデバイスの設定オプションを指定する代わりに、設定ファイル内にそれらを保存して使用することができます。設定ファイルの作成は -writeconfig で書き込むことができるほか、手作業で作成することもできます。

-writeconfig 設定ファイル

現在の仮想マシンのデバイス設定を、テキストファイルに保存します。保存したテキストファイルは、後から -readconfig オプションで指定することができます。

> sudo qemu-system-x86_64 -name "SLES 15.6" \
 -machine accel=kvm -M pc-i440fx-2.7 -m 512 -cpu kvm64 \
 -smp 2 /images/sles.raw -writeconfig /images/sles.cfg
(exited)
> cat /images/sles.cfg
# qemu config file

[drive]
  index = "0"
  media = "disk"
  file = "/images/sles_base.raw"

このような仕組みにより、仮想マシンの設定をより効率的かつ整理して管理することができるようになります。

34.2.3 ゲスト側のリアルタイムクロック Edit source

-rtc オプション

VM ゲスト 内での RTC (リアルタイムクロック) の処理方法を指定します。既定ではゲスト側のクロックはホストシステム側から派生させて使用することになります。そのため、ホスト側のシステムクロックは、正確な外部クロック (例: NTP サービス) と同期させておくことをお勧めします。

VM ゲスト と VM ホストサーバ のクロックを分離したい場合は、既定値である clock=host の代わりに clock=vm を指定してください。

なお、 VM ゲスト 側の起動時点の時刻を指定することもできます。時刻の指定は base オプションで行ってください:

> sudo qemu-system-x86_64 [...] -rtc clock=vm,base=2010-12-03T01:02:00

上記のようなタイムスタンプではなく、 utclocaltime を指定することもできます。前者の場合、 VM ゲスト を現在の UTC 時刻 (Coordinated Universal Time (協定世界時; https://ja.wikipedia.org/wiki/UTC )) に、後者の場合は現在のローカル時刻にそれぞれ設定されます。

34.3 QEMU 内でのデバイスの使用 Edit source

QEMU の仮想マシンは VM ゲスト を動作させるのに必要な全てのデバイスを擬似します。 QEMU では、ネットワークカードやブロックデバイス (ハードディスク、リムーバブルドライブなど) 、 USB デバイスやキャラクタデバイス (シリアルポートやパラレルポート) 、マルチメディアデバイス (グラフィックカード、サウンドカード) などに対応しています。本章では、対応するさまざまな種類のデバイスについて、それらを設定するオプションを紹介しています。

ヒント
ヒント

なお、デバイス側 (例: -drive) で特殊なドライバやドライバ設定を指定する必要がある場合、ドライバは -device オプションで設定し、ドライバを drive= で指定してください。具体的には下記のようになります:

> sudo qemu-system-x86_64 [...] -drive if=none,id=drive0,format=raw \
-device virtio-blk-pci,drive=drive0,scsi=off ...

利用可能なドライバや設定に関する情報を得たい場合は、 -device ? オプション、もしくは -device ドライバ名,? オプションを指定して実行してください。

34.3.1 ブロックデバイス Edit source

ブロックデバイスは仮想マシンを動作させるのに必須のデバイスです。一般的には固定メディアと取り外し可能メディアの 2 種類が存在し、これらを総称して ドライブ と呼んでいます。通常は、接続されているうちの 1 台にゲスト側のオペレーティングシステムがインストールされます。

仮想マシン のドライブは -drive で定義します。このオプションには多数のサブオプションが存在し、それらのうちのいくつかを本章で紹介しています。全ての一覧を読みたい場合は、マニュアルページ ( man 1 qemu ) をご覧ください。

-drive オプションに対するサブオプション
file=ファイルパス

このドライブで使用するディスクイメージのパスを指定します。何も指定しない場合、何も挿入されていない (リムーバブル) ドライブであるものとされます。

if=インターフェイス

ドライブが接続されているインターフェイスの種類を指定します。現時点では、 SUSE では floppy (フロッピィディスク) , scsi (SCSI) , ide (IDE) , virtio (virtio) のみをサポート対象としています。 virtio を指定すると、準仮想化型ディスクドライバを使用します。既定値は ide です。

index=コネクタ番号

ディスクインターフェイス (詳しくは if オプションをご覧ください) 側での、ディスクが接続されているコネクタの番号を指定します。何も指定しない場合、コネクタ番号は自動で付与されます。

media=種類

メディアの種類を指定します。ハードディスクの場合は disk を、リムーバブル CD-ROM ドライブの場合は cdrom を指定します。

format=形式

接続されているディスクイメージの形式を指定します。何も指定しない場合、形式を自動検出します。現時点では、 SUSE では raw , qcow2 をそれぞれサポートします。

cache=キャッシュ方式

ドライブに対するキャッシュ方法を指定します。指定可能な値は unsafe , writethrough , writeback , directsync , none のいずれかです。 qcow2 イメージ形式で性能を改善したい場合は writeback を指定してください。なお none を指定するとホスト側でのキャッシュが無効化されますので、最も安全な選択となります。イメージファイルの場合、既定値は writeback となります。詳しくは 第16章 「ディスクのキャッシュモード をお読みください。

ヒント
ヒント

ブロックデバイスの設定を単純化することもできます。 QEMU にはいくつかのショートカットが規定されていて、これらを使用することで qemu-system-ARCH のコマンドラインを短くすることができます。

たとえば下記のように指定することができます:

> sudo qemu-system-x86_64 -cdrom /images/cdrom.iso

上記は、下記のような意味になります:

> sudo qemu-system-x86_64 -drive format=raw,file=/images/cdrom.iso,index=2,media=cdrom

また、下記のように指定することもできます:

> sudo qemu-system-x86_64 -hda /images/imagei1.raw -hdb /images/image2.raw -hdc \
/images/image3.raw -hdd /images/image4.raw

上記は、下記のような意味になります:

> sudo qemu-system-x86_64 -drive format=raw,file=/images/image1.raw,index=0,media=disk \
-drive format=raw,file=/images/image2.raw,index=1,media=disk \
-drive format=raw,file=/images/image3.raw,index=2,media=disk \
-drive format=raw,file=/images/image4.raw,index=3,media=disk
ヒント
ヒント: イメージではなくホストのドライブを使用する方法について

ディスクイメージを使用 (詳しくは 33.2項 「qemu-img を利用したディスクイメージの管理」 ) する代わりに、 VM ホストサーバ 内にある既存のディスク選択してドライブとして使用し、 VM ゲスト からアクセスすることもできます。この場合は、ディスクイメージのファイルパスを指定する箇所で、ホスト側のデバイス名をそのまま記述してください。

たとえばホスト側の CD-ROM ドライブにアクセスするには、下記のように指定します:

> sudo qemu-system-x86_64 [...] -drive file=/dev/cdrom,media=cdrom

ホスト側のハードディスクにアクセスするには、下記のように指定します:

> sudo qemu-system-x86_64 [...] -drive file=/dev/hdb,media=disk

なお、 VM ゲスト 側が使用しているホスト側のドライブは、 VM ホストサーバ 側からアクセスしてはなりませんし、他の VM ゲスト からもアクセスしてはなりません。

34.3.1.1 未使用のゲスト側ディスク領域の解放 Edit source

スパースイメージファイル はディスクイメージファイルの形式で、その中にデータが書き込まれていくことによって、そのディスクイメージに指定したサイズまで自動的に拡張が行われるものを指します。たとえばスパースディスクイメージ内に 1 GB のデータをコピーすると、そのイメージのサイズは 1 GB だけ拡張します。ですが、そのうちの 500 MB 分のデータを削除しても、既定ではイメージのサイズは自動的には縮小しません。

このような理由から、 KVM のコマンドラインには discard=on というオプションが用意されるようになっています。これはハイパーバイザに対して、スパースイメージ内からデータが削除された場合、そのうちの 不要な 箇所を自動的に解放する設定です。なお、このオプションはドライブインターフェイスに if=scsi を指定した場合にのみ設定することができます:

> sudo qemu-system-x86_64 [...] -drive format=イメージ形式,file=ファイルイメージのパス,if=scsi,discard=on
重要
重要: サポート状態について

if=scsi はサポート対象外となっております。このインターフェイスは virtio-scsi ではなく、 lsi SCSI アダプタ に結びつけられているためです。

34.3.1.2 IOThreads Edit source

IOThreads は virtio デバイス向けのイベントループスレッドで、スケーラビリティを改善するために I/O 要求を専門で処理するスレッドです。特に SMP 型の VM ホストサーバ 内で多数のディスクデバイスの接続された SMP 型の VM ゲスト を動作させているような場合に有用です。 I/O 処理に QEMU のメインイベントループを使用する代わりに、 IOThreads では複数の CPU に I/O 処理を分散させ、適切に設定されていれば遅延を改善することができるようになっています。

IOThreads は IOThread オブジェクトを定義することで有効化することができます。あとは virtio デバイスを使用することで、 I/O イベントループ向けのオブジェクトを使用するようになります。多くの virtio デバイスで 1 つの IOThread オブジェクトを共用することもできますし、 virtio デバイスと IOThread オブジェクトを 1:1 で作成して割り当てることもできます。下記の例では、 ID iothread0 で IOThread を 1 つだけ作成し、それを 2 つの virtio-blk デバイスから使用する場合の例を示しています。

> sudo qemu-system-x86_64 [...] -object iothread,id=iothread0\
-drive if=none,id=drive0,cache=none,aio=native,\
format=raw,file=filename -device virtio-blk-pci,drive=drive0,scsi=off,\
iothread=iothread0 -drive if=none,id=drive1,cache=none,aio=native,\
format=raw,file=filename -device virtio-blk-pci,drive=drive1,scsi=off,\
iothread=iothread0 [...]

下記の qemu コマンドラインでは、 virtio デバイスと IOThread を 1:1 で割り当てる設定を示しています:

> sudo qemu-system-x86_64 [...] -object iothread,id=iothread0\
-object iothread,id=iothread1 -drive if=none,id=drive0,cache=none,aio=native,\
format=raw,file=filename -device virtio-blk-pci,drive=drive0,scsi=off,\
iothread=iothread0 -drive if=none,id=drive1,cache=none,aio=native,\
format=raw,file=filename -device virtio-blk-pci,drive=drive1,scsi=off,\
    iothread=iothread1 [...]

34.3.1.3 virtio-blk 向けの bio ベースの I/O パス Edit source

I/O に負荷が集中する環境の性能を改善するため、カーネルバージョン 3.7 では、 virtio-blk インターフェイスに対して新しい I/O パスが提供されるようになりました。この bio ベースのブロックデバイスドライバは I/O スケジューラを迂回して動作するため、ゲスト側の I/O パスを短くすることができますので、遅延を短くすることができるようになっています。これは特に、 SSD ディスクなどの高速なストレージデバイスで有用です。

このドライバは既定では無効化されています。使用するには、下記を実施します:

  1. ゲスト側のカーネルコマンドラインに対して、 virtio_blk.use_bio=1 を追加します。これは YaST › システム › ブートローダ から行うことができます。

    それ以外にも、 /etc/default/grub ファイルを編集して、 GRUB_CMDLINE_LINUX_DEFAULT= 以下に上記の内容をスペース区切りで追加してもかまいません。追加した後は、 grub2-mkconfig >/boot/grub2/grub.cfg を実行すると、 grub2 の起動メニューに反映させることができます。

  2. あとはゲスト側のカーネルコマンドラインを反映させるため、再起動を行います。

ヒント
ヒント: 遅いデバイスでの bio ベースドライバについて

bio ベースの virtio-blk ドライバは、ハードディスクドライブのような遅いデバイスの場合、あまり役には立ちません。これは、 bio によるパスの短縮よりもスケジューリングの利点のほうが大きいためです。そのため、遅いデバイスでは bio ベースのドライバを使用してはなりません。

34.3.1.4 iSCSI リソースへの直接アクセス Edit source

QEMU は現在 libiscsi との統合が行われています。これにより、 QEMU から iSCSI デバイスに直接アクセスすることができるようになっているほか、 iSCSI デバイスを仮想マシンのブロックデバイスとして使用することもできるようになっています。この機能を使用する場合もホスト側の iSCSI イニシエータの設定は必要なく、 libvirt iSCSI ターゲットベースのストレージプールで必要となるだけです。その代わり、 QEMU は iSCSI のターゲット LUN に対して、ユーザスペースライブラリの libiscsi を利用して、直接アクセスすることになります。 iSCSI ベースのディスクデバイスは、 libvirt の XML 設定でも指定することができます。

注記
注記: RAW イメージ形式

この機能は、 iSCSI プロトコルにさまざまな技術的制限が存在することから、 RAW イメージ形式を使用している場合にのみ使用することができます。

下記は iSCSI の接続に対する QEMU のコマンドラインインターフェイスを説明しています。

注記
注記: virt-manager の制限事項について

libiscsi ベースのストレージのプロビジョニング機能は virt-manager インターフェイス側に公開されていませんが、ゲストの XML ファイルを直接編集することで設定を行うことができます。このような iSCSI ベースのストレージに対するアクセスは、コマンドラインから行います。

> sudo qemu-system-x86_64 -machine accel=kvm \
  -drive file=iscsi://192.168.100.1:3260/iqn.2016-08.com.example:314605ab-a88e-49af-b4eb-664808a3443b/0,\
  format=raw,if=none,id=mydrive,cache=none \
  -device ide-hd,bus=ide.0,unit=0,drive=mydrive ...

下記は iSCSI プロトコルを使用したゲストドメインの XML ファイル例の抜粋です:

<devices>
...
  <disk type='network' device='disk'>
    <driver name='qemu' type='raw'/>
    <source protocol='iscsi' name='iqn.2013-07.com.example:iscsi-nopool/2'>
      <host name='example.com' port='3260'/>
    </source>
    <auth username='myuser'>
      <secret type='iscsi' usage='libvirtiscsi'/>
    </auth>
    <target dev='vda' bus='virtio'/>
  </disk>
</devices>

下記はホストベースの iSCSI イニシエータを使用する設定例ですが、上記との違いを比較してください:

<devices>
...
  <disk type='block' device='disk'>
    <driver name='qemu' type='raw' cache='none' io='native'/>
    <source dev='/dev/disk/by-path/scsi-0:0:0:0'/>
    <target dev='hda' bus='ide'/>
    <address type='drive' controller='0' bus='0' target='0' unit='0'/>
  </disk>
  <controller type='ide' index='0'>
    <address type='pci' domain='0x0000' bus='0x00' slot='0x01'
             function='0x1'/>
  </controller>
</devices>

34.3.1.5 QEMU での RADOS ブロックデバイスの使用 Edit source

RADOS Block Devices (RBD) は Ceph クラスタ内にデータを保存する仕組みです。この仕組みではスナップショットやレプリケーション、データの一貫性維持などの機能が用意されています。お使いの KVM 管理下の VM ゲスト からは、他のブロックデバイスを使用する場合と同様の方法で使用することができます。

34.3.2 グラフィックデバイスとディスプレイのオプション Edit source

本章では擬似ビデオカードの種類選択のほか、 VM ゲスト のグラフィカル出力へのアクセス方法に関わるオプションを説明しています。

34.3.2.1 ビデオカードの定義 Edit source

QEMU では -vga オプションを使用して、 VM ゲスト のグラフィカルな出力に使用するビデオカードの設定を行います。 -vga オプションでは下記のような値を指定することができます:

none

VM ゲスト のビデオカードを無効化します (ビデオカードの擬似を行いません) 。ただし、シリアルコンソール経由で動作中の VM ゲスト にアクセスすることはできます。

std

標準的な VESA 2.0 VBE ビデオカードを擬似します。 VM ゲスト で高解像度のディスプレイを使用したい場合に選択してください。

qxl

QXL は準仮想化グラフィックカードです。 VGA との互換性もあります (つまり VESA 2.0 VBE に対応しています) 。 qxl は、 spice ビデオプロトコルを使用する場合、推奨されるグラフィックカードです。

virtio

準仮想化 VGA グラフィックカードです。

34.3.2.2 ディスプレイのオプション Edit source

下記のオプションは、 VM ゲスト のグラフィカル出力の表示方法を制御するためのものです。

-display gtk

GTK ウインドウ内にビデオ出力を表示します。このインターフェイスには UI 要素が表示され、ここから動作中に VM の設定や制御を行うことができるようになります。

-display sdl

SDL を介してビデオ出力を行います。通常は個別のグラフィックウインドウで表示されます。詳しくは SDL のドキュメンテーションをお読みください。

-spice オプション[,オプション[,...]]

SPICE リモートデスクトッププロトコルを有効化します。

-display vnc

詳しくは 34.5項 「VNC を利用した VM ゲスト の表示」 をお読みください。

-nographic

QEMU のグラフィカル出力を無効化します。コンソールの内容は、擬似シリアルポートに転送されます。

-nographic を指定した仮想マシンを起動した場合、仮想コンソール内で CtrlA H を押すことで、さまざまなショートカットの一覧を表示することができます。これにはたとえば、コンソールと QEMU モニタの切り替えなどの機能があります。

> sudo qemu-system-x86_64 -hda /images/sles_base.raw -nographic

C-a h    print this help
C-a x    exit emulator
C-a s    save disk data back to file (if -snapshot)
C-a t    toggle console timestamps
C-a b    send break (magic sysrq)
C-a c    switch between console and monitor
C-a C-a  sends C-a
(pressed C-a c)

QEMU 2.3.1 monitor - type 'help' for more information
(qemu)
-no-frame

QEMU のウインドウに対する装飾を無効化します。専用のデスクトップ作業領域を用意するような場合に便利です。

-full-screen

QEMU のグラフィカル出力をフルスクリーンで表示します。

-no-quit

QEMU のウインドウ内にある閉じるボタンを無効化し、強制的に閉じられてしまうことを防ぎます。

-alt-grab , -ctrl-grab

既定では、 QEMU のウインドウ内でマウスのボタンを押すと、 CtrlAlt を押すまではマウスカーソルが外に出られなくなります。このキーの組み合わせを変更し、 CtrlAltShift ( -alt-grab ) もしくは右 Ctrl キー ( -ctrl-grab ) に変更することができます。

34.3.3 USB デバイス Edit source

KVM 内の VM ゲスト で利用可能な USB デバイスを作成する方法には 2 つのものがあります。 1 つは VM ゲスト 内に新しい擬似 USB デバイスを作成する方法、もう 1 つは既存の USB デバイスを VM ゲスト に割り当てる方法です。 QEMU 内で USB デバイスを使用するには、まず -usb オプションで汎用 USB ドライバを有効化する必要があります。あとは -usbdevice オプションで個別のデバイスを指定していきます。

34.3.3.1 VM ゲスト 内での USB デバイスの擬似 Edit source

SUSE では現在、下記の種類の USB デバイスをサポートしています: disk , host , serial , braille , net , mouse , tablet

-usbdevice オプションで指定することのできる USB デバイスの種類
disk

ファイルをベースにしたマスストレージデバイスを擬似します。ファイルの形式を自動検出させたくない場合は、 format オプションで形式を指定してください。

> sudo qemu-system-x86_64 [...] -usbdevice
        disk:format=raw:/virt/usb_disk.raw
host

ホスト側のデバイスをパススルーします (バス.アドレス で識別します)

serial

ホスト側のキャラクタデバイスに対するシリアルコンバータを定義します。

braille

BrlAPI を使用してブライユ点字ディスプレイを擬似し、ブライユ点字の出力を行います。

net

CDC イーサネットおよび RNDIS プロトコルに対応するネットワークアダプタを擬似します。

mouse

仮想 USB マウスを擬似します。このオプションは既定の PS/2 マウスの擬似を上書きする設定です。 qemu-system-ARCH [...] -usbdevice mouse を指定して起動した VM ゲスト 内で下記のように実行すると、ハードウエアの状態を表示することができます:

> sudo hwinfo --mouse
20: USB 00.0: 10503 USB Mouse
[Created at usb.122]
UDI: /org/freedesktop/Hal/devices/usb_device_627_1_1_if0
[...]
Hardware Class: mouse
Model: "Adomax QEMU USB Mouse"
Hotplug: USB
Vendor: usb 0x0627 "Adomax Technology Co., Ltd"
Device: usb 0x0001 "QEMU USB Mouse"
[...]
tablet

絶対座標系を使用するポインタデバイス (例: タッチスクリーン) を擬似します。このオプションは、既定の PS/2 マウスの擬似を上書きする設定となります。タブレットデバイスは、 VM ゲスト を VNC プロトコル経由で操作する場合に有用です。詳しくは 34.5項 「VNC を利用した VM ゲスト の表示」 をお読みください。

34.3.4 キャラクタデバイス Edit source

-chardev オプションを指定することで、新しいキャラクタデバイスを作成することができます。一般的には下記のような書式を使用します:

qemu-system-x86_64 [...] -chardev バックエンドの種類,id=ID_文字列

ここで、 バックエンドの種類 には、 null , socket , udp , msmouse , vc , file , pipe , console , serial , pty , stdio , braille , tty , parport のいずれかを指定します。また、それぞれのキャラクタデバイスに対しては、最大で 127 文字までの識別 (ID) 文字列を指定しなければなりません。この識別文字列は、関連する他のディレクティブを指定する際に使用します。それぞれのバックエンドに対する全てのオプションについて、詳しくはマニュアルページ ( man 1 qemu ) をお読みください。下記にそれぞれの バックエンド に対する概要説明を記述します:

null

何もデータを出力せず、入力されたデータをそのまま廃棄するだけのデバイスを作成します。

stdio

QEMU プロセスの標準入出力に結びつけるデバイスを作成します。

socket

双方向のストリームソケットを作成します。 path サブオプションを指定すると、 Unix ソケットを作成します:

> sudo qemu-system-x86_64 [...] -chardev \
socket,id=unix_socket1,path=/tmp/unix_socket1,server

server サブオプションを指定すると、作成するソケットを待ち受け状態にします。

port を指定すると、 TCP ソケットを作成します:

> sudo qemu-system-x86_64 [...] -chardev \
socket,id=tcp_socket1,host=localhost,port=7777,server,nowait

このコマンドは、 TCP ポートの 7777 番を利用して、待ち受け側の ( server ) ソケットを作成します。 QEMU では待ち受けるポートに対して、クライアント側からの接続を待機しないようにしています ( nowait ) 。

udp

VM ゲスト からの全てのネットワークトラフィックを、 UDP プロトコルを介して指定したリモートホストに転送します。

> sudo qemu-system-x86_64 [...] \
-chardev udp,id=udp_fwd,host=mercury.example.com,port=7777

このコマンドは、 VM ゲスト から受信したデータを、ポート 7777 から mercury.example.com 宛に送信します。

vc

新しい QEMU のテキストコンソールを作成します。下記のようにすることで、仮想コンソールの幅と高さを指定することができます:

> sudo qemu-system-x86_64 [...] -chardev vc,id=vc1,width=640,height=480 \
-mon chardev=vc1

このコマンドは vc1 という名前の仮想コンソールを指定したサイズで作成し、 QEMU モニタに接続します。

file

VM ゲスト からの全てのデータを VM ホストサーバ 内のファイルに書き込みます。 path サブオプションを指定する必要があります。指定したファイルが存在しない場合は、作成されます。

> sudo qemu-system-x86_64 [...] \
-chardev file,id=qemu_log1,path=/var/log/qemu/guest1.log

既定では、 QEMU はシリアルポートとパラレルポートに対応するキャラクタデバイスを作成するほか、 QEMU モニタ向けに特殊なコンソールを作成します。必要であれば、独自のキャラクタデバイスを作成して上述の用途で使用することができます。この場合、下記のオプションを指定しておくと良いでしょう:

-serial キャラクタデバイス

上記のように指定することで、 VM ゲスト の仮想シリアルポートが VM ホストサーバ 内の キャラクタデバイス に転送されるようになります。グラフィカルモードの場合、既定では仮想コンソール ( vc ) になりますし、グラフィカルモードでない場合は stdio (標準入出力) になります。このほか、 -serial オプションには多数のサブオプションが用意されています。詳しくは man 1 qemu で表示することのできるマニュアルページをお読みください。

なお、最大で 4 個までのシリアルポートを擬似することができます。シリアルポートを全て無効化したい場合は、 -serial none を指定してください。

-parallel デバイス

上記のように指定することで、 VM ゲスト の仮想パラレルポートが VM ホストサーバ 内の デバイス に転送されるようになります。指定することのできるデバイスは -serial と同じです。

ヒント
ヒント

VM ホストサーバ に openSUSE Leap を使用している場合、ハードウエア側のパラレルポートに直接接続することもできます。この場合は /dev/parportN (N はポート番号) のように指定してください。

なお、最大で 3 個までのパラレルポートを擬似することができます。パラレルポートを全て無効化したい場合は、 -parallel none を指定してください。

-monitor キャラクタデバイス

QEMU のモニタを VM ホストサーバ 内の キャラクタデバイス に転送するよう設定します。指定することのできるデバイスは -serial と同じです。グラフィカルモードの場合、既定では仮想コンソール ( vc ) になりますし、グラフィカルモードでない場合は stdio (標準入出力) になります。

利用可能な全てのデバイスバックエンドについて、詳しくは ( man 1 qemu ) で表示することのできるマニュアルページをお読みください。

34.4 QEMU でのネットワーク Edit source

-device とともに -netdev オプションを指定することで、ネットワークの種類を指定して VM ゲスト のネットワークインターフェイスを追加することができるようになります。 -netdev オプションの書式は下記のとおりです:

-netdev 種類[,キー[=][,...]]

現時点では、 SUSE は user , bridge , tap の種類のみをサポート対象としています。 -netdev で指定可能な全サブオプションの一覧について、詳しくはマニュアルページ ( man 1 qemu ) をお読みください。

対応する -netdev サブオプション
bridge

指定したネットワークヘルパーを使用して TAP インターフェイスの設定を行い、それを指定したブリッジに接続します。詳しくは 34.4.3項 「ブリッジ型ネットワーク」 をお読みください。

user

ユーザモードネットワーキングを指定します。詳しくは 34.4.2項 「ユーザモードネットワーク」 をお読みください。

tap

ブリッジもしくはルーティング型のネットワークを指定します。詳しくは 34.4.3項 「ブリッジ型ネットワーク」 をお読みください。

34.4.1 ネットワークインターフェイスカードの定義 Edit source

-device オプションとともに -netdev オプションを指定することで、新しい擬似ネットワークカードを追加することができます:

> sudo qemu-system-x86_64 [...] \
-netdev tap1,id=hostnet0 \
-device virtio-net-pci2,netdev=hostnet0,vlan=13,\
macaddr=00:16:35:AF:94:4B4,name=ncard1

1

ネットワークデバイスの種類を指定しています。

2

ネットワークカードの型式を指定しています。お使いのプラットフォームの QEMU で指定可能な全てのネットワークカードの一覧を取得するには、 qemu-system-ARCH -device help を実行して Network devices: セクション以下をご覧ください。

現時点では、 SUSE は rtl8139 , e1000 およびその派生系である e1000-82540em , e1000-82544gc , e1000-82545em , virtio-net-pci にそれぞれ対応しています。そのドライバで指定可能なオプションの一覧を取得したい場合は、ドライバのオプションの箇所に help を追加してください:

> sudo qemu-system-x86_64 -device e1000,help
e1000.mac=macaddr
e1000.vlan=vlan
e1000.netdev=netdev
e1000.bootindex=int32
e1000.autonegotiation=on/off
e1000.mitigation=on/off
e1000.addr=pci-devfn
e1000.romfile=str
e1000.rombar=uint32
e1000.multifunction=on/off
e1000.command_serr_enable=on/off

3

ネットワークインターフェイスを VLAN 番号 1 に接続する指定です。主に識別用のものとなりますが、必要であれば独自の番号を設定することができます。このサブオプションを省略した場合、 QEMU は既定値である 0 を指定したものとみなします。

4

ネットワークカードの Media Access Control (MAC) アドレスを指定しています。この値はネットワーク内で唯一のものでなければならないため、必ず指定しておくことをお勧めします。指定しない場合、 QEMU は既定の MAC アドレスを使用してしまうため、同じ VLAN 内で MAC アドレスの重複を引き起こしてしまうことになります。

34.4.2 ユーザモードネットワーク Edit source

-netdev user オプションを指定することで、 QEMU に対してユーザモードのネットワーキングを使用するように指定することができます。これはネットワーキングモードを指定しない場合の既定であるため、下記のコマンドはいずれも同じ意味になります:

> sudo qemu-system-x86_64 -hda /images/sles_base.raw
> sudo qemu-system-x86_64 -hda /images/sles_base.raw -netdev user,id=hostnet0

このモードは、 VM ゲスト からインターネットなどの外部リソースにアクセスさせる必要があるような場合に有用です。既定では着信側のトラフィックは許可されない仕組みであるため、 VM ゲスト はネットワーク内では他のマシンから見えない存在になります。また、このネットワークモードを使用する場合、管理者権限は不要となります。ユーザモードは、 VM ホストサーバ 内のローカルディレクトリから VM ゲスト をネットワークブートするような場合にも有用です。

なお、このモードの場合、仮想的な DHCP サーバを利用して VM ゲスト に IP アドレスが割り当てられます。 VM ホストサーバ (DHCP サーバ) は 10.0.2.2 、そして割り当てられる IP アドレスの範囲は 10.0.2.15 以降となります。 sshscp などで 10.0.2.2 を指定することで、 VM ホストサーバ に接続してファイルのやり取りを行ったりすることができます。

34.4.2.1 コマンドライン例 Edit source

本章ではユーザモードのネットワーキングの設定例をいくつか示しています:

例 34.1: 制限付きユーザモードネットワーク
> sudo qemu-system-x86_64 [...] \
-netdev user1,id=hostnet0 \
-device virtio-net-pci,netdev=hostnet0,vlan=12,name=user_net13,restrict=yes4

1

ユーザモードネットワーキングの指定を行っています。

2

VLAN 番号 1 に接続しています。省略した場合、既定値である 0 になります。

3

ネットワークスタックに対する分かりやすい名前を指定しています。 QEMU モニタなどで識別する際に有用です。

4

VM ゲスト を孤立させる指定です。これにより VM ホストサーバ と通信ができなくなるほか、外部ネットワークにもパケットが送信されなくなります。

例 34.2: 独自の IP アドレス範囲を指定したユーザモードネットワーク
> sudo qemu-system-x86_64 [...] \
-netdev user,id=hostnet0 \
-device virtio-net-pci,netdev=hostnet0,net=10.2.0.0/81,host=10.2.0.62,\
dhcpstart=10.2.0.203,hostname=tux_kvm_guest4

1

VM ゲスト との間で使用されるネットワークの IP アドレスとネットマスク (オプション) を指定しています。既定値は 10.0.2.0/8 です。

2

VM ゲスト から見た VM ホストサーバ のアドレスを指定しています。既定値は 10.0.2.2 です。

3

内蔵の DHCP サーバが割り当てる最初の IP アドレスを指定しています。このアドレスから最大で 16 個までを割り当てることができます。既定値は 10.0.2.15 です。

4

内蔵 DHCP サーバが VM ゲスト に対して送信する、 VM ゲスト 側のホスト名を指定しています。

例 34.3: ネットワーク起動と TFTP を利用したユーザモードネットワーク
> sudo qemu-system-x86_64 [...] \
-netdev user,id=hostnet0 \
-device virtio-net-pci,netdev=hostnet0,tftp=/images/tftp_dir1,\
bootfile=/images/boot/pxelinux.02

1

内蔵 TFTP (非常に基本的な機能に限定されたファイル転送プロトコル) サーバを有効化しています。 VM ゲスト 側からは、指定したディレクトリがルートディレクトリとなります。

2

指定したファイルを BOOTP (IP アドレスと起動イメージの場所を提供するネットワークプロトコル、主にディスクレスマシンで使用します) ファイルとして提供する指定です。 tftp オプションとともに使用した場合、 VM ゲスト はホスト内のローカルディレクトリ内のファイルからネットワーク起動できるようになります。

例 34.4: ホスト側でのポート転送を指定したユーザモードネットワーク
> sudo qemu-system-x86_64 [...] \
-netdev user,id=hostnet0 \
-device virtio-net-pci,netdev=hostnet0,hostfwd=tcp::2222-:22

ホスト側で TCP ポート番号 2222 に届いたパケットを、 VM ゲスト 側の TCP ポート番号 22 ( SSH ) に転送する指定です。 VM ゲスト 側で sshd が動作していれば、

> ssh ホスト -p 2222

のように入力することで、 VM ゲスト 側の SSH に接続することができるようになります。ここで ホスト には VM ホストサーバ のホスト名または IP アドレスを指定します。

34.4.3 ブリッジ型ネットワーク Edit source

-netdev tap オプションを指定することで、 QEMU はネットワークブリッジを作成し、ホスト側の TAP ネットワークデバイスを VM ゲスト の指定 VLAN に接続することができます。これにより、ネットワークインターフェイスはネットワーク側からアクセスできるようになります。なお、この方式は既定では選択されないため、明示的に指定する必要があります。

まずはネットワークブリッジを作成し、 VM ホストサーバ の物理ネットワークインターフェイス (通常は eth0) をブリッジに追加します:

  1. YaST コントロールセンター を起動し、 システム › ネットワークの設定 を選択します。

  2. 追加 を押したあと、 ハードウエアダイアログ ウインドウ内で、 デバイスの種類 のドロップダウンボックスで ブリッジ を選択します。あとは 次へ を押します。

  3. IP アドレスを動的もしくは静的に設定したい場合はそれぞれの項目を設定します。また、必要であればその他の設定も行います。

  4. ブリッジ接続デバイス のタブを選択して、ブリッジに追加するイーサネットデバイスを選択します。

    次へ を行います。既に設定されているデバイスを追加する旨のメッセージが表示された場合は、 続行 を押します。

  5. 最後に OK を押して変更点を保存します。あとはブリッジが作成されていることを確認します:

    > bridge link
    2: eth0 state UP : <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master br0 \
     state forwarding priority 32 cost 100

34.4.3.1 ブリッジへの手動接続 Edit source

下記のようなサンプルスクリプトを使用することで、 VM ゲスト を新しく作成したブリッジ br0 に接続することができます。スクリプト内のコマンドはいずれも管理者権限が必要となることから、 sudo の仕組みを利用して実行するよう作られています。

ヒント
ヒント: 必要なソフトウエアについて

ネットワークブリッジを管理するには、 tunctl パッケージをインストールしておく必要があります。

#!/bin/bash
bridge=br01
tap=$(sudo tunctl -u $(whoami) -b)2
sudo ip link set $tap up3
sleep 1s4
sudo ip link add name $bridge type bridge
sudo ip link set $bridge up
sudo ip link set $tap master $bridge5
qemu-system-x86_64 -machine accel=kvm -m 512 -hda /images/sles_base.raw \
 -netdev tap,id=hostnet0 \
 -device virtio-net-pci,netdev=hostnet0,vlan=0,macaddr=00:16:35:AF:94:4B,\
 ifname=$tap6,script=no7,downscript=no
sudo ip link set $tap nomaster8
sudo ip link set $tap down9
sudo tunctl -d $tap10

1

ブリッジデバイスの名前です。

2

新しい TAP デバイスを作成し、スクリプトを実行したユーザに権限を与えます。 TAP デバイスは仮想的なネットワークデバイスで、しばしば仮想化やエミュレーションで用いられるものです。

3

新しく作成した TAP ネットワークインターフェイスを起動しています。

4

TAP ネットワークデバイスの準備を待つため、 1 秒間の一時停止を設定しています。

5

新しい TAP デバイスをネットワークブリッジ br0 に追加しています。

6

ifname= サブオプションでは、ブリッジに使用する TAP ネットワークインターフェイスの名前を指定しています。

7

qemu-system-ARCH がネットワークブリッジに接続する前に、それぞれ scriptdownscript の値が調べられます。 VM ホストサーバ のファイルシステム内に該当するスクリプトが見つかった場合、 script はネットワークブリッジへの接続前に、 downscript はネットワーク環境の終了時にそれぞれ実行されます。また、既定では /etc/qemu-ifup および /etc/qemu-ifdown をそれぞれ実行します。 script=no および downscript=no を指定すると、これらのスクリプトは無効化され、必要に応じて手作業で作業を行うことになります。

8

ネットワークブリッジ br0 から TAP インターフェイスを削除しています。

9

TAP デバイスの状態を down (停止) に設定しています。

10

TAP デバイスを削除しています。

34.4.3.2 qemu-bridge-helper を利用したブリッジへの接続 Edit source

VM ゲスト をネットワークブリッジ経由でネットワークに接続する場合、もう 1 つの方法として qemu-bridge-helper というヘルパープログラムを使用する方法が用意されています。これは TAP インターフェイスを作成して指定したブリッジに接続するまでの処理を行います。既定のヘルパープログラムは /usr/lib/qemu-bridge-helper にあります。なお、このヘルパープログラムは setuid root ビットが設定されていて、かつ仮想化グループ ( kvm ) のメンバーのみに実行権限が与えられていますので、 qemu-system-ARCH コマンド自身を root 権限で動作させる必要はありません。

ヘルパーは下記のようにしてネットワークブリッジを指定した場合、自動的に呼び出されます:

qemu-system-x86_64 [...] \
 -netdev bridge,id=hostnet0,vlan=0,br=br0 \
 -device virtio-net-pci,netdev=hostnet0

TAP デバイスの設定/設定解除を行うプログラムを用意することで、独自のプログラムを実行することもできます。ヘルパープログラムを指定するには、 helper=ヘルパープログラムのパス のように指定してください:

qemu-system-x86_64 [...] \
 -netdev bridge,id=hostnet0,vlan=0,br=br0,helper=/path/to/bridge-helper \
 -device virtio-net-pci,netdev=hostnet0
ヒント
ヒント

qemu-bridge-helper に対してアクセス権限を設定するには、 /etc/qemu/bridge.conf ファイルを作成してください。たとえば下記のようなディレクティブを設定したものとすると、

allow br0

qemu-system-ARCH コマンドが VM ゲスト をネットワークブリッジに追加する際、 br0 を指定できるようになります。

34.5 VNC を利用した VM ゲスト の表示 Edit source

既定の QEMU では GTK (クロスプラットフォーム型のツールキットライブラリ) ウインドウを作成し、 VM ゲスト のグラフィカルな出力を表示します。 -vnc オプションを指定すると、 QEMU は VNC ディスプレイを作成して接続を待ち受けるようになり、その VNC ディスプレイ内にグラフィカルな出力を行うようになります。

ヒント
ヒント

VNC セッションで QEMU の仮想マシンを操作する場合、 -usbdevice tablet オプションを指定しておくとよいでしょう。

これに加えて、 en-us 以外のキーボードレイアウトを使用したい場合は、 -k オプションで指定してください。

-vnc の最初のサブオプションには、 ディスプレイ 番号を指定しなければなりません。 -vnc オプションでは、下記のような形式でディスプレイ番号を指定します:

ホスト:ディスプレイ

ディスプレイ のディスプレイへの接続を、 ホスト で指定したホストからの接続のみに制限します。 VNC セッションで使用する TCP ポート番号は通常、 5900 + ディスプレイ になります。また、 ホスト を指定しない場合、任意のマシンから接続できるようになります。

unix:パス

Unix ドメインソケットを利用して VNC サーバの待ち受けを行います。 パス には Unix ソケットの場所を指定します。

none

VNC サーバの機能を準備しますが、サーバ自身の開始は行わないようにします。この場合、 QEMU モニタから開始することができます。詳しくは 第35章 「QEMU モニタを利用した仮想マシンの管理 をお読みください。

ディスプレイ値の後にカンマ区切りで下記のような追加オプションを指定することができます:

reverse

接続と呼ばれる方式を利用して、 VNC クライアントに接続を行います。

websocket

VNC Websocket 接続専用に追加の TCP 待ち受けポートを用意します。 VNC WebSocket では、 5700 + ディスプレイ の TCP ポートを使用します。

password

クライアントから接続があった場合、パスワードベースの認証を求めます。

tls

VNC サーバと通信を行う際、クライアント側で TLS を利用するよう求めます。

x509=証明書ディレクトリ

tls を指定した場合にのみ使用されます。 TLS セッションのネゴシエーションに使用する x509 の視覚情報を求めるようにします。

x509verify=証明書ディレクトリ

tls を指定した場合にのみ使用されます。 TLS セッションのネゴシエーションに使用する x509 の視覚情報を求めるようにします。

sasl

クライアントが VNC サーバに接続する際、 SASL による認証を求めるようにします。

acl

x509 クライアント証明書や SASL のパーティを確認する際、アクセス制御リストの機能を有効化します。

lossy

有損失圧縮 (gradient, JPEG など) を使用するようにします。

non-adaptive

適応符号化機能を無効化します。既定では適応符号化機能は有効化されています。

share=[allow-exclusive|force-shared|ignore]

ディスプレイの共有ポリシーを設定します。

注記
注記

ディスプレイオプションについてさらに詳しく知るには、 qemu-doc のマニュアルページをお読みください。

VNC の使用例:

tux > sudo qemu-system-x86_64 [...] -vnc :5
# (クライアント側で:)
wilber > vncviewer venus:5 &
QEMU VNC セッション
図 34.2: QEMU VNC セッション

34.5.1 VNC 接続の認証設定 Edit source

既定の VNC サーバでは、何も認証を求めません。ここまでの例で設定を行うと、ネットワーク内の任意のマシンから QEMU の VNC セッションに接続し、画面を表示して操作ができるようになってしまいます。

VNC のクライアントとサーバの間で認証を必要とするよう設定したい場合、さまざまなレベルでそれを設定することができます。単純にパスワードのみで保護することができるほか、 x509 証明書認証や SASL 認証を設定したり、これらを組み合わせて使用したりすることもできます。いずれも QEMU のコマンド 1 つで実現することができます。

VM ホストサーバ とクライアントの間での x509 認証の設定方法については、 11.3.2項 「x509 証明書を利用したリモート TLS/SSL 接続 ( qemu+tls もしくは xen+tls )」11.3.2.3項 「クライアントの設定とテスト」 をそれぞれお読みください。

Remmina VNC ビューアでは高度な認証機構に対応しているため、下記の例に従って仮想マシンを起動し、 Remmina で接続することで、 VM ゲスト のグラフィカル出力を表示することができます。なお下記の例では、ホスト内の /etc/pki/qemu ディレクトリ内に、 ca-cert.pem (証明機関の証明書), server-cert.pem (サーバの証明書), server-key.pem (サーバの機密鍵) の各ファイルが配置されているものとします。クライアント側では Remmina の起動時に設定を行うことができることから、任意のディレクトリに証明書を配置して使用することができます。

例 34.5: パスワード認証
qemu-system-x86_64 [...] -vnc :5,password -monitor stdio

VM ゲスト のグラフィカル出力を VNC ディスプレイ番号 5 (通常は TCP ポート 5905) に出力します。 password サブオプションは、シンプルなパスワードベースの認証を有効化するための設定です。既定ではパスワードが何も設定されないため、起動後に QEMU モニタから change vnc password コマンドでパスワードを設定する必要があります:

QEMU 2.3.1 monitor - type 'help' for more information
(qemu) change vnc password
Password: ****

ここでは -monitor stdio を指定していますが、これは入出力を転送せずに QEMU モニタを使用することができないことによるものです。

Remmina での認証ダイアログ
図 34.3: Remmina での認証ダイアログ
例 34.6: x509 証明書認証

QEMU の VNC サーバが TLS 暗号化を行い、 x509 の証明書を使用するように設定します。サーバはクライアントに対して証明書の提示を求め、証明機関の証明書に適合するかどうかを確認します。この認証方式を使用するには、内部用の証明機関を構築する必要があります。

qemu-system-x86_64 [...] -vnc :5,tls,x509verify=/etc/pki/qemu
例 34.7: x509 証明書とパスワードによる認証

TLS による暗号化と x509 証明書による認証に加えて、パスワード認証を追加で設定することもできます。これにより、クライアントに対して 2 階層の認証を設定することになります。なお、下記のコマンドを実行したあと、 QEMU モニタでパスワードを忘れずに設定してください:

qemu-system-x86_64 [...] -vnc :5,password,tls,x509verify=/etc/pki/qemu \
-monitor stdio
例 34.8: SASL 認証

Simple Authentication and Security Layer (SASL) はインターネットプロトコル向けの認証およびデータセキュリティフレームワークです。 PAM や Kerberos, LDAP など、さまざまな認証機構を組み合わせることができます。 SASL では独自のユーザデータベースを使用する仕組みであるため、 VM ホストサーバ 内にユーザアカウントを作成する必要はありません。

セキュリティ上の理由から、 SASL 認証を使用する場合は、 TLS 暗号化と x509 証明書認証を併用することをお勧めします:

qemu-system-x86_64 [...] -vnc :5,tls,x509,sasl -monitor stdio
このページを印刷