深夜2時の現実
想像してみてください。時刻は深夜2時。あなたはターミナルを見つめ、コアルーターのプレフィックスリストがなぜ正当なトラフィックをドロップしているのか頭を抱えています。修正案をテストしたいところですが、本番環境を使うのは災いの元です。物理ラックを正確に模倣したサンドボックスが必要になります。ここで、GNS3 (Graphical Network Simulator-3) が最も価値のあるツールとなります。
Linux上のGNS3は、WindowsやmacOS版とは一線を画します。KVMハイパーバイザー上でネイティブに動作するため、ネストされた仮想化による重いオーバーヘッドを回避できます。私のテストでは、WindowsでCPU使用率60%を消費するラボが、Ubuntuではわずか15〜20%で軽快に動作しました。この効率性により、標準的なノートPC一台で、3台のルーターからISPのバックボーン全体までスケールさせることが可能になります。
クイックスタート:5分で完了するセットアップ
Ubuntu 22.04または24.04 LTSを使用している場合は、すぐにバイナリを動かすことができます。公式のPPAを使用して、ubridgeやdynamipsの重要な修正が含まれているバージョン2.2.x以降を確実にインストールします。
# 公式のGNS3 PPAを追加
sudo add-apt-repository ppa:gns3/ppa
sudo apt update
# GNS3 GUIとサーバーをインストール
sudo apt install gns3-gui gns3-server
# 古いCisco IOUイメージ向けの32ビットサポートを有効化
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install gns3-iou
インストール中に、root以外のユーザーにubridgeの実行を許可するか尋ねるプロンプトが表示されます。必ずYesを選択してください。このシンプルな選択により、ノード間にケーブルを接続するたびにGNS3がsudo権限を要求することがなくなり、システムのセキュリティが維持されます。
ディープダイブ:環境のチューニング
ソフトウェアのインストールは最初のステップに過ぎません。GNS3を実際にハードウェアと通信させるには、仮想インターフェースのブリッジを妨げている権限のギャップを修正する必要があります。
1. 権限の問題を解決する
インストール時に作成されたシステムグループに、自分のユーザーアカウントを追加します。これは初心者にとって最も一般的なハードルです。
sudo usermod -aG ubridge,libvirt,kvm,wireshark,docker $USER
これをスキップしないでください: これらの変更を適用するには、一度ログアウトして再ログインする必要があります。そうしないと、ノードを起動したり/dev/kvmにアクセスしようとした瞬間に、GNS3が「Permission Denied(権限拒否)」エラーを吐き出します。
2. エンジンルーム:内部ツールの理解
GNS3は単一のアプリではなく、いくつかの専門ツールのオーケストレーターです。
- Dynamips: 古参のツール。Cisco 7200のようなクラシックなルーター向けにMIPSベースেরハードウェアをエミュレートします。
- QEMU/KVM: 主力ツール。Cisco ASAv、Arista vEOS、Juniper vMXなどのモダンなイメージに使用します。
- VPCS: 軽量なシミュレーター。インスタンスあたりわずか2MBのRAMで、基本的なping/traceroute機能を提供します。
3. イメージのインポートと最適化
GNS3にはCisco IOSファイルは同梱されていません。独自の.binまたは.qcow2ファイルを用意する必要があります。Edit -> Preferencesからルーターを追加する際は、Idle-PC値に細心の注意を払ってください。
Idle-PC値が設定されていないと、1台の仮想ルーターだけでホストCPUのコア1つを100%使い切ってしまいます。セットアップ中に「Idle-PC finder」を使用してください。これは、仮想ルーターがパケットを処理していないときにホストCPUをスリープさせるための特定の16進コードを計算します。これにより、CPU温度を即座に20°C下げることができます。
高度な使い方:現実の世界と接続する
隔離されたラボは、便利さが半分しかありません。仮想のUbuntuノードからインターネット経由でアップデートを取得したり、デスク上の物理ファイアウォールへのVPNトンネルをテストしたりする必要があるかもしれません。
CloudノードとTapインターフェース
Cloudノードは、仮想トポロジを物理NICにブリッジします。これはイーサネット経由なら簡単に動作しますが、LinuxのWi-Fiドライバーはブリッジをブロックすることがよくあります。これを解決するには、Tapインターフェースを作成します。
# 永続的なtapインターフェースを作成
sudo ip tuntap add dev tap0 mode tap
sudo ip link set tap0 up
sudo ip addr add 192.168.100.1/24 dev tap0
Cloudノードをtap0にマッピングします。これで仮想デバイスは、ホストOSやその先に到達するためのゲートウェイとして192.168.100.1を使用できるようになります。
Dockerを活用するメリット
Webサーバーを動かすためだけに、2GBのRAMを消費してフルスペックのUbuntu VMを起動するのは無駄です。すでにdockerグループに所属しているため、NginxのDockerイメージをGNS3に取り込むことができます。これは2秒以内に起動し、消費メモリは約15〜20MBです。大規模な設計でエンドホストをシミュレートする際に、最も効率的な方法です。
安定稼働のための貴重な教訓
私はラボのクラッシュで何時間分もの作業を失ってきました。3つのシンプルなルールを守ることで、こうした落とし穴を回避できます。
1. 「Write Mem」を習慣にする
仮想ルーターはSSDに自動保存されません。ノートPCのバッテリーが切れたりGNS3がクラッシュしたりした場合、write memoryまたはcopy run startで保存していない設定は永遠に失われます。GNS3には「自動保存」機能がありますが、ルーター自身のNVRAMへの保存ほど信頼できるものはありません。
2. ディスク容量に注意する
QEMUイメージは「コピーオンライト(COW)」ファイルを使用します。ベースイメージが500MBだとしても、ラボ内の各ノードは~/GNS3/projects内に新しいスパースファイルを作成します。10ノードのラボなら、簡単に10GBまで膨れ上がります。ルートパーティションが小さい場合は、Preferences -> Serverからプロジェクトフォルダをセカンダリドライブに移動しておきましょう。
3. 「Cannot Connect to Local Server」エラーの修正
これはUbuntuで最も多い不満です。GUIがサーバーと通信できない場合は、ファイアウォールを確認してください。Ubuntuのufwがポート3080をブロックしている可能性があります。sudo ufw allow 3080/tcpで修正できます。それでも失敗する場合は、ss -antlp | grep 3080を実行して、ゴーストプロセスがポートを掴んでいないか確認してください。
UbuntuはGNS3を利用するためのゴールドスタンダードなプラットフォームです。ネイティブのKVMサポートを活用することで、標準的なPCを強力なネットワークテスト環境に変えることができます。まずは数台のノードから始め、Idle-PC設定をマスターしてください。すぐに、複雑なマルチエリアOSPF環境なども涼しい顔でシミュレートできるようになるはずです。

