Proxmox上でEVE-NGラボを構築:Nested Virtualizationで「激重」から「サクサク」へ

Virtualization tutorial - IT technology blog
Virtualization tutorial - IT technology blog

CPUロード40.0の衝撃とホームラボ最適化の課題

昨夜、私はある難題を解決するために徹夜しました。EVE-NG上で動かしているCisco vIOSルーターが、起動後5分でフリーズしてしまうのです。EVE-NGのWebインターフェースも反応が鈍くなり始めました。Proxmoxの top コマンドを確認すると、わずか3つのラボノードを実行しているだけなのに、CPUロードが40.0まで跳ね上がっているのを見て愕然としました。

実際の問題はRAMやディスクの不足ではありませんでした。原因は Nested Virtualization(入れ子状仮想化)の最適化を忘れていたことにありました。12台以上のVMが稼働するホームラボ環境において、EVE-NGのようなリソースを大量に消費する「モンスター」を、リソース配分を調整せずに導入することは、システムの崩壊を招くのも時間の問題です。

なぜ他の選択肢ではなくProxmox + EVE-NGなのか?

コマンドを入力する前に、なぜこの組み合わせが現在のネットワークエンジニアにとって「最適解」と言えるのか、各導入方法の現実を見てみましょう。

1. ベアメタル実行(サーバーに直接インストール)

  • メリット: 最高のパフォーマンス。中間レイヤーによる遅延がない。
  • デメリット: 非常に非効率。128GBのRAMを搭載したサーバーをEVE-NG専用にするのは、電気代の無駄遣いです。また、OS全体のスナップショットや素早いバックアップも困難です。

2. VMware Workstation または ESXi

  • メリット: 使い慣れたインターフェースで、導入が容易。
  • デメリット: BroadcomによるVMware買収後、ライセンス体系や古いハードウェアのサポートが不透明になりました。ESXiは民生用のネットワークカード(NIC)との相性が悪いことでも有名です。

3. Proxmox VE (KVM)

  • メリット: 完全に無料、オープンソースであり、Web UIの管理が非常にスムーズ。特にPBS(Proxmox Backup Server)へのバックアップ機能は、数分で一週間分の作業成果を救うことができます。
  • デメリット: デフォルトではNested Virtualizationが有効になっておらず、手動での設定変更が必要。

私の選択: Proxmox VE。これにより、EVE-NGを動かしながら、Windows Server、Linux、Dockerを併用して、完全なエンタープライズシステムをシミュレートすることが可能になります。

ステップ1:ProxmoxホストでNested Virtualizationを有効にする

これが最大のボトルネックです。この機能を有効にしないと、EVE-NGはハードウェアアクセラレーションではなくエミュレーションモードで動作します。その結果、CiscoやJuniperのノードは亀のように遅くなり、通常の5〜10倍のCPUを消費します。

まず、Proxmoxのシェルから現在の状態を確認します:

# Intel CPUの場合
cat /sys/module/kvm_intel/parameters/nested

# AMD CPUの場合
cat /sys/module/kvm_amd/parameters/nested

結果が N または 0 の場合は、以下のコマンドを実行してパワーを解放しましょう:

# Intelの場合
echo "options kvm-intel nested=Y" > /etc/modprobe.d/kvm-intel.conf

# AMDの場合
echo "options kvm-amd nested=1" > /etc/modprobe.d/kvm-amd.conf

# 設定を反映させるためにサーバーを再起動
reboot

再起動後, cat コマンドで Y または 1 が返ってくれば、仮想化レイヤーの準備は完了です。

ステップ2:VMの設定 – デフォルトCPUを使用しない

よくある間違いは、CPU Typeを Default (kvm64) のままにしておくことです。この設定では実CPUの最適化命令セットが隠されてしまい、VMがパフォーマンスを最大限に引き出すことができません。

  • CPU Type: 必ず host を選択してください。これにより、VMがVMX/SVMやAES-NIなどのフラグを完全に認識できるようになり、ラボ内でのVPN暗号化タスクなどが30%高速化します。
  • Memory: Ballooning(メモリの動的割り当て)は使用せず、固定RAMを設定することを推奨します。大規模なラボでは、メモリの頻繁な伸縮がシミュレートされたトラフィックフローにラグ(ジッター)を引き起こす原因となります。
  • Network: ノード間の内部帯域幅を最大化するために VirtIO (balanced) を使用します。
  • SCSI Controller: ディスクのI/Oキューを最適化するために VirtIO SCSI Single を選択します。

ステップ3:EVE-NG内でのDisk I/Oの確認と最適化

インストール完了後、EVE-NGにSSHでログインし、KVMの確認コマンドを実行します:

/opt/unetlab/wrappers/unl_wrapper -a check

KVM Acceleration の行に exists と表示されれば、90%は成功です。残りの10%はディスクの読み書き速度に関わります。

EVE-NGは大量のログを書き込みます。SSDを使用している場合は、fstabファイルで Discard 機能を有効にし、Proxmoxが古いデータブロックを解放できるようにして、長期間の使用による速度低下を防ぎましょう:

# fstabファイルを編集
nano /etc/fstab
# rootのマウント行に 'discard' を追加:
UUID=xxx-xxx / ext4 defaults,discard 0 1

実践的なヒント:CPU Pinning(CPUの固定分配)

Palo AltoやCheckpointなどの重いノードを含むラボを運用していると、わずかなカクつき(マイクロスタッタリング)を感じることがありました。原因は通常、Proxmox上の他のVMがEVE-NGとCPUコアを奪い合っていることにあります。

多コアCPU(Xeon E5やRyzen 9など)を使用している場合は、CPU Pinning を試してみてください。特定のコア範囲をEVE-NG専用に割り当てることで、同じサーバー上のPlex VMで映画を観ていても、OSPFやBGPのプロセスが中断されないように保証できます。

/etc/pve/qemu-server/[VMID].conf にあるVM設定ファイルを編集し、以下の行を追加します:

cpuset: 0-7

ラボからの結び

ネットワークラボの構築は、単にソフトウェアをインストールするだけではありません。基盤となる仮想化レイヤーを理解することで、無意味なデバッグ時間を何時間も節約できます。Proxmoxを使えば、複雑なラボ実習を行う前にすべてをスナップショットで保存できます。もしシステムがまだ遅いと感じるなら、 Swap を確認してください。ディスク速度は決してRAMの速度には追いつけないため、ラボをSwap上で走らせることは絶対に避けるべきです。

Share: