ARTICLE

Ubuntu Desktop で KVM 仮想化環境 を構築する

ishiwari.net article

Linux環境で仮想マシンを運用する際に検討するのが KVM (Kernel-based Virtual Machine) です。
KVMは、Linuxカーネルをタイプ1ハイパーバイザー(ベアメタルに近い形で動作するハイパーバイザー)へと変貌させるオープンソースの仮想化技術です。VirtualBoxやVMware Workstation Playerなどのタイプ2ハイパーバイザーと比較して、ホストOSのリソースを最大限に引き出せる高いパフォーマンスと、極めて低いオーバーヘッドが最大の魅力です。
Ubuntu DesktopではGUIで直感的に操作できる「仮想マシンマネージャー」や、コマンドラインで高度な制御が可能な「virsh」など、エコシステムが成熟しています。
本記事では、Ubuntu Desktopをベースに、KVMのインストールから仮想マシンの作成、そして運用のためのネットワーク初期設定まで解説します。


1. 前提条件の確認(仮想化支援機能のチェック)

まず、CPUがハードウェア仮想化をサポートしているか、および有効になっているかを確認します。
※仮想化支援機能(Intel: vmx, AMD: svm)の確認(0以上ならOK)

egrep -c '(vmx|svm)' /proc/cpuinfo

kvm-ok コマンドでの確認も行います。("KVM acceleration can be used" と出ればOK)

sudo apt update
sudo apt install -y cpu-checker
kvm-ok

※以下の出力が返ってくればOK
 KVM acceleration can be used

2. KVMおよび関連パッケージのインストール

仮想化に必要なハイパーバイザー本体、管理ツール、およびGUIクライアント(virt-manager)をインストールします。以下の5つのコンポーネントがインストールされます。

sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager

※ エラーが出た場合は、末尾の「トラブルシューティング」を参照してください。

3. ユーザー権限の設定

毎回 sudo をつけずに一般ユーザーで仮想マシンを管理できるよう、現在のユーザーを libvirt および kvm グループに追加します。

sudo adduser $USER libvirt
sudo adduser $USER kvm

※ グループの変更を反映させるため、ここで一度OSを再起動するか、ログアウトして再ログインしてください。

4. ブリッジネットワークの構築(Netplanを使用)

ホストマシンの物理NIC(ネットワークインターフェース)をブリッジ(br0)に紐付けます。
Ubuntu DesktopではNetplanがネットワークを管理しているため、nmcliで変更を加えてもNetplanに上書きされてしまいます。Netplanの設定ファイルを直接編集する方法を使います。

Hyper-V上で動かしている場合の事前確認
このUbuntuがHyper-VのVM上で動いている場合、ブリッジはそのままでは機能しません。Hyper-VはデフォルトでVMのNICを「自分のMACアドレスのトラフィックのみ通過」させる設定になっており、br0(eth0と異なるMACアドレスを持つ)のDHCPリクエストが破棄されます。
Windowsホスト側のPowerShellで以下を実行し、対象VMのMAC spoofingを有効にしてください(VMは停止した状態で実行)。

Set-VMNetworkAdapter -VMName "VMの名前" -MacAddressSpoofing On

① 現在の物理NIC名を確認する

ip a

※ ここでは物理NIC名が eth0 であると仮定して進めます。環境に合わせて読み替えてください。

② 既存のNetplan設定ファイルを確認する

ls /etc/netplan/

既存の設定ファイル名を確認します(例:01-network-manager-all.yaml など)。

③ ブリッジの設定ファイルを作成する

sudo nano /etc/netplan/01-network-manager-all.yaml

以下の内容を入力します(eth0 の部分は実際のNIC名に合わせて変更してください)。

network:
  version: 2
  ethernets:
    eth0:
      dhcp4: false
  bridges:
    br0:
      interfaces: [eth0]
      dhcp4: true

※ 固定IPにしたい場合は、dhcp4: true の代わりに以下のように設定します。

      dhcp4: false
      addresses: [192.168.x.x/24]
      routes:
        - to: default
          via: 192.168.x.1
      nameservers:
        addresses: [8.8.8.8]

④ パーミッションの設定

sudo chmod 600 /etc/netplan/01-network-manager-all.yaml

⑤ 設定の適用

sudo netplan apply

作業中、数秒間ネットワークが切断されます。設定後、ip abr0 にIPアドレスが割り当てられていることを確認します。

5. Virt-Managerでのブリッジネットワーク割り当て

OS上でブリッジが作成できたら、それをKVM(libvirt)に認識させます。

  1. アクティビティ画面などから 「仮想マシンマネージャー (virt-manager)」 を起動します。

  2. 上部メニューの 「編集」 > 「接続の詳細」 をクリックします。

  3. 「仮想ネットワーク」 タブを開きます。

    (※デフォルトで「default」というNATネットワークが存在しますが、今回はこれは使用しません)

  4. 新規仮想マシンを作成するウィザードの最後の画面(「インストールの開始」の直前)で、「ネットワークの選択」 を開きます。

  5. プルダウンから 「ホストデバイス br0 : macvtap」 ではなく、「共有された物理デバイス」 または 「ブリッジの名前を指定」 を選び、デバイス名に br0 を入力します。

これで、作成された仮想マシンはホストマシンと同じルーターからIPアドレス(DHCP)を直接取得し、外部ネットワークとシームレスに通信できるようになります。


トラブルシューティング

qemu-kvm が仮想パッケージとして扱われる場合

手順2のインストールコマンド実行時に以下のようなエラーが出ることがあります。

パッケージ qemu-kvm は、以下によって提供される仮想パッケージです:

  qemu-system-x86-hwe 1:10.2.1+ds-1ubuntu4 (= 1:10.2.1+ds-1ubuntu4)

  qemu-system-x86 1:10.2.1+ds-1ubuntu3 (= 1:10.2.1+ds-1ubuntu3)

インストールするには、明示的にいずれかを選択する必要があります。

Error: パッケージ 'qemu-kvm' にはインストール候補がありません

原因

qemu-kvm が実体のある単一のパッケージではなく、「仮想パッケージ(Virtual Package)」として扱われているためです。仮想パッケージとは、特定の機能を提供する複数のパッケージをまとめた「総称」のようなものです。今回のケースでは、qemu-kvm という機能を提供する実際のパッケージとして以下の2つがリポジトリに存在しています。

APT は「どちらのパッケージをインストールすればよいか自動で判断できない」ため、インストールの進行を止めてユーザーに明示的な選択を求めています。

解決方法

コマンド内の qemu-kvm を、実体のあるパッケージ名に置き換えて実行してください。

通常はこちら(標準版)をおすすめします:

sudo apt install -y qemu-system-x86 libvirt-daemon-system libvirt-clients bridge-utils virt-manager

最新のハードウェア機能を利用したい場合(HWE版):

sudo apt install -y qemu-system-x86-hwe libvirt-daemon-system libvirt-clients bridge-utils virt-manager
パッケージ 説明
qemu-system-x86 標準的なQEMUのシステムエミュレータ。一般的な用途であれば問題なく動作します。
qemu-system-x86-hwe 比較的新しいCPUの命令セットや最新のハードウェア仮想化機能に最適化されたバージョン(HWE: Hardware Enablement)。最新のPC環境でパフォーマンスを最大限引き出したい場合に選択します。

どちらかをインストールすれば、従来通り virt-manager などを通じてKVMを利用した仮想マシンの構築が可能になります。

br0 にIPアドレスが割り当てられない(Hyper-V環境)

br0 が UP になっているのにIPv4アドレスが取得できない場合、Hyper-VのMAC spoofing制限が原因の可能性があります。

Hyper-Vは、VMのNICを通過するトラフィックをそのNICのMACアドレスに限定します。br0は eth0 とは異なるMACアドレスを持つため、DHCPリクエストがHyper-V側で破棄されます。

解決方法

WindowsホストのPowerShellでVMを停止した状態で以下を実行します:

Set-VMNetworkAdapter -VMName "VMの名前" -MacAddressSpoofing On

VM起動後に ip a で br0 にIPアドレスが割り当てられていることを確認してください。