Ubuntu上にEVE-NGで仮想ネットワークラボを構築:CCNA/CCNP対策でCisco・Juniper・MikroTikをシミュレート

Networking tutorial - IT technology blog
Networking tutorial - IT technology blog

6ヶ月前、CCNPの試験勉強を本格化させていた頃、壁にぶつかった。概念ではなく、ツールの問題だった。中古のCisco Catalystスイッチはうるさく、1台あたり200Wの電力を消費し、物理的に机の上に置ける台数以上には増やせなかった。近所の人から「サーバールームでも動かしているのか」と電話がくるほどだった。BGP再配送を勉強していただけなのに。

物理ネットワークラボの本当の問題

CCNAやCCNPの勉強をした人なら誰でもこの苦労を知っている。古いCiscoハードウェアに数十万円を費やすか、CiscoのPacket Tracerで妥協するかの二択だ。Packet Tracerは本物のIOSイメージを動かせず、実際の試験で問われる機能の半分をひっそりと省略している。

費用面でも厳しい。CCNA練習用のCisco 2960スイッチ1台だけでもeBayで80〜200ドル程度する。ルーター・マルチレイヤースイッチ・冗長リンクを含む本格的なCCNPトポロジーともなれば、電気代や騒音問題を考える前から800〜2000ドルはかかる。しかもそのハードウェアはすでに10年以上前のもの——現代の本番環境を反映していない機材で学ぶことになる。

最初はPacket Tracerを試した。基本概念はカバーしているが、高度なルーティングプロトコルに踏み込んだり、CiscoとJuniperの動作を並べてテストしようとした途端に限界が来る。対応コマンドセットは不完全で、実際のベンダーのIOSイメージをアップロードすることもできない。あれは教育用シミュレーターであって、ラボ環境ではない。

根本的な問題:シミュレーションのギャップ

無料ツールのほとんどは入門的な概念を教えるために作られており、現実的な試験対策を念頭に置いていない。それ自体は問題ではないが、Packet Tracerがシミュレートできる内容とCCNP試験で実際に問われる内容の差は、無視できないほど大きい。

GNS3はより現実に近い。DynamipsとQEMUを使ってエミュレートされたハードウェア上で実際のIOSイメージを動かせる。ただし、セットアップが厄介なことで有名だ。サーバー/クライアントアーキテクチャ、GNS3 VMの依存関係、Linux上でKVMアクセラレーションを動かすための設定——ルーター1台を起動できるようになるまでに、丸々1週末をGNS3の設定に費やした。実際のところマルチベンダー対応も限定的で、CiscoにJuniperやMikroTikノードを追加するには、そのたびに相当な手作業が必要になる。

私が本当に必要としていたのは、以下の条件を満たすツールだった:

  • 本物のIOS/JunOS/RouterOSイメージを動かせる(部分的なシミュレーションではなく)
  • 同じラボ内でマルチベンダーのトポロジーをスムーズに構成できる
  • ネットワーク上のどのマシンからでもアクセスできるWebベースのインターフェースを持つ
  • ラボソフトウェアを動かすためだけに専用ワークステーションを必要としない

ツール比較:Packet Tracer vs GNS3 vs EVE-NG

Cisco Packet Tracer

無料でCiscoが公式サポートしており、CCNA基礎を学ぶ初心者には十分なツールだ。ただし限界ははっきりしている。Ciscoデバイスのみ対応、コマンドセットは不完全、本物のIOSイメージは使えない。入門レベルのルーティング・スイッチングを超えた途端、あるいは複数ベンダーの知識が必要になった途端に、使い物にならなくなる。

GNS3

Packet Tracerより高機能で、本物のIOSイメージも動かせる。コミュニティは大きくドキュメントも整っている。欠点は、初期設定が複雑なこと(特にLinux上のGNS3 VM)、パフォーマンスにKVMの丁寧なチューニングが必要なこと、そしてUIが古臭いこと。マルチベンダー対応は一応あるが、後付け感が否めない。一度設定が終わればCisco専用ラボとして機能するが、マルチベンダープラットフォームとしては力不足だ。

EVE-NG Community Edition

これが私が6ヶ月間毎日使い続けているツールだ。EVE-NG(Emulated Virtual Environment – Next Generation)はUbuntu上にインストールでき、すっきりしたWebインターフェースを提供する。ブラウザからベンダーイメージをアップロードし、ノードをドラッグしてトポロジーを構成し、仮想ケーブルで接続する——ローカルネットワーク上のどのブラウザからでも操作可能だ。クライアントソフトウェアは不要。

マルチベンダー対応が実際に機能する。Cisco IOS、IOS-XE、NX-OS、Juniper vMX・vSRX、MikroTik RouterOS、Arista vEOS、Fortinet FortiOS——すべてを同一ラボ内で動かせる。実際の本番ネットワークはマルチベンダーだ。1つのプラットフォームだけで社内全体をカバーしている企業など存在しない。CiscoとJuniperを同時に練習するのは、試験対策であるだけでなく、実際の仕事そのものだ。

Ubuntu上へのEVE-NGセットアップ:実践的なアプローチ

ハードウェア要件

EVE-NGはベアメタルでもVM内でも動作する。本格的なラボではベアメタルが有利だ——CPUの仮想化拡張機能に直接アクセスできる。私の専用マシンはCore i7-8700、32GB RAM、500GB SSDを搭載した中古のDell OptiPlexで、合計費用は中古で約250ドル。15台以上の仮想デバイスを同時に問題なく動かせている。

実用的な最低スペック:

  • CPU:Intel VT-xまたはAMD-V対応の4コア以上(egrep -c '(vmx|svm)' /proc/cpuinfo で確認)
  • RAM:最低16GB、CCNPレベルのトポロジーには32GB推奨
  • ストレージ:200GB以上(IOSイメージだけで1つあたり200〜800MB)
  • OS:Ubuntu 20.04 LTSまたは22.04 LTS——サーバーエディションで問題なし。注意:22.04はEVE-NGリポジトリのfocalパッケージを使用するが、以下のコマンドは両バージョンに対応している。

インストール

# まずシステムパッケージを更新する
sudo apt update && sudo apt upgrade -y

# EVE-NGリポジトリとGPGキーを追加する
wget -O - https://www.eve-ng.net/focal/[email protected] | sudo apt-key add -
echo "deb [arch=amd64] https://www.eve-ng.net/focal focal main" | sudo tee /etc/apt/sources.list.d/eve-ng.list

# EVE-NGをインストールする
sudo apt update
sudo apt install eve-ng -y

# カーネルモジュールのために再起動が必要
sudo reboot

再起動後、ブラウザでサーバーのIPアドレスにアクセスする。EVE-NGのWebインターフェースが直接ロードされる——追加設定は不要だ。デフォルトのログインは admin / eve。初回ログイン後は必ずすぐにパスワードを変更すること。

Cisco IOSイメージの追加

EVE-NGはライセンスの都合上、ベンダーイメージを同梱していない。自分で入手する必要がある——Ciscoのソフトウェアポータル(有効なサポート契約が必要)、すでに持っているGNS3アプライアンスパック、または自組織のイメージリポジトリから入手できる。

# Dynamipsイメージ(旧IOS 12.x/15.x)——IOSvルーター用
sudo mkdir -p /opt/unetlab/addons/dynamips/
sudo cp c7200-adventerprisek9-mz.154-3.M8.image /opt/unetlab/addons/dynamips/

# QEMUベースのイメージ(IOS-XE、NX-OS)——まず名前付きディレクトリを作成する
sudo mkdir -p /opt/unetlab/addons/qemu/iosv-15.9.3M7/
sudo cp vios-adventerprisek9-m.spa.158-3.m7.qcow2 \
  /opt/unetlab/addons/qemu/iosv-15.9.3M7/hda.qcow2

# イメージ追加後は必ずパーミッションを修正する
sudo /opt/unetlab/wrappers/unl_wrapper -a fixpermissions

MikroTik RouterOSの追加(無料)

MikroTikのCloud Hosted Router(CHR)イメージは無料で、公式サイトから直接ダウンロードしてすぐにEVE-NGで使える。追加作業の中でも最も簡単な部類だ。

# MikroTik CHR(Cloud Hosted Router)をダウンロードする
wget https://download.mikrotik.com/routeros/7.15.3/chr-7.15.3.img.zip
unzip chr-7.15.3.img.zip

# ディレクトリを作成しrawイメージをqcow2に変換する
sudo mkdir -p /opt/unetlab/addons/qemu/mikrotik-chr-7.15.3/
qemu-img convert -f raw chr-7.15.3.img \
  -O qcow2 /opt/unetlab/addons/qemu/mikrotik-chr-7.15.3/hda.qcow2

# パーミッションを修正する
sudo /opt/unetlab/wrappers/unl_wrapper -a fixpermissions

実用的なCCNPスタイルのトポロジー

新しいラボにノードをいくつか配置して接続すると、EVE-NGはHTML5経由でブラウザ内に直接デバイスコンソールを開く。Telnetクライアントは不要だ。CiscoとMikroTik間のベンダー間アジャセンシーを確認するための基本的なOSPF設定を示す:

# Cisco IOSv — R1の設定
conf t
interface GigabitEthernet0/0
 ip address 10.0.12.1 255.255.255.0
 no shutdown
!
router ospf 1
 network 10.0.0.0 0.255.255.255 area 0
end
write memory
# MikroTik CHR — 同等のOSPF設定
/ip address add address=10.0.12.2/24 interface=ether1
/routing ospf instance add name=default router-id=2.2.2.2
/routing ospf area add name=backbone area-id=0.0.0.0 instance=default
/routing ospf interface-template add area=backbone interfaces=ether1 passive=no

# MikroTikからアジャセンシーを確認する
/routing ospf neighbor print

CiscoとMikroTik間でOSPFネイバー関係が確立された瞬間、何かがカチッとはまる感覚がある。本物のIOSと本物のRouterOSを動かし、実際のプロトコルアジャセンシーを形成しているのだ——「動きました」と教えてくれるシミュレーターとは違う。

6ヶ月後:実際に耐えうるものは何か

継続的な負荷下での安定性が最大の驚きだった。12ノードのOSPF・BGP再配送トポロジーを何時間も動かし続けたが、クラッシュもメモリリークも発生しなかった。Webインターフェースも毎日の使用に耐えており、ラボは完全な状態で保存されるため、再起動後に作業を再開するのも数秒で済む。

特にCCNP対策において、同じトポロジー内でCiscoとJuniperを並べて動かすことで、勉強のアプローチが変わった。試験当日までCiscoだけで練習して、その後Juniperの構文をライブ環境で初めて触るようでは、実力のギャップが生まれる。ほとんどの学習ツールはその問題に対応していない。EVE-NGは対応している。

Community Editionの制限として事前に知っておくべきことがある。同時アクティブユーザーセッションは1つのみで、一部の高度な機能はProfessionalライセンスが必要だ。個人での学習、または1人がラボを使用する小規模チームであれば、Community Editionで十分だ。

総費用:250ドルの中古マシンと半日のセットアップ。それが1500ドル以上の物理ハードウェアを置き換えた。騒音なし。電気代なし。6ヶ月経った今、ラボ作業で物理スイッチに触れたことは一度もない。

Share: