GNS3 に VyOS 仮想ルーターを追加する長い道のり① 環境導入編

Pocket

本記事は 【アットホームな現場です】🎄★☆ネットワーク系エンジニア★☆アレコレアウトプット★☆🎄 Advent Calendar 2022 8日目の記事だ。 (空いていたので埋め)

GNS3 という、オープンソースのネットワークエミュレータがある。

GUI 上で、様々なネットワーク機器を仮想環境に設置して、仮想ネットワークを構築できる、大変優れたツールだ。

実際に、ルータや端末を沢山用意して物理的に結線せずとも、 PC 上で簡単にネットワークを作成できるので、ネットワークの勉強には最適だ。

しかし、一つ大きな問題がある。
GNS3 自体には、基本的なハードウェアのエミュレータしか含まれていないため、ルーターなどを使うには、 "Cisco の IOS" といった「ルーターのソフトウェア」を別途用意しなくてはならない。

すでに Cisco のルーターを持っていて、 IOS イメージなどが手に入るならよいのだが、そうではない場合合法的にこういったイメージを入手するのは(主に金銭的な意味で)厳しい。

ネットワークの検証や勉強をする目的であれば、何も Cisco のルーターでなくとも、使う分には問題ないはずだ。

…ということで、 VyOS という OSS のネットワークデバイスを、 Windows 上の GNS3 で使えるようにするまでの長い道のりを、数回に分けて紹介しようと思う。

とりあえず、今回は環境導入編。

OS

実行する Windows のバージョンは、 CPU が Intel なら Windows 10 で問題ないが、 CPU が AMD (Ryzen/Epic) の場合 Windows 11 以上が望ましい。
これは、 入れ子になった(ネストされた)仮想化による仮想マシン のサポートが、 OS 側に必要であるためだ。
(一応、 AMD のサポートは Windows 10 Build 19640 以上となっているが、 このバージョンはプレビュービルドしか存在しない)

一応、上記を満たしていなくても動作させることは可能だが、内部で仮想化支援機能が働かないので、 VyOS の動作が著しく遅くなる。

ちなみに、 ARM Windows はそもそもサポートされない。

VyOS と VyControl

VyOS とは、 オープンソースのネットワーク機器向けの OS で、 Linux をベースとしたディストリビューションである。

ルーティングからファイアウォール、パケットフィルタから負荷分散まで、商用ルータに劣らない様々な機能を持っている。

VyOS の設定は、基本的に専用のコマンドを用いて行うのだが、最初からそれを学ぶのは学習コストが高い。
そこで、 VyControl という VyOS 向けの シンプルな GUI フロントエンドと組み合わせるところまで、構築していきたいと思う。

環境構築に必要なもの

しかし、 GNS3 上で VyOS を利用できるようにする道のりは長い。

まず、 VyControl を使うためには、 VyOS 1.3 以上が必要となる。
実は、ビルド済みの安定板の VyOS イメージは、サブスクリプション契約をしないとダウンロードできない。

VyOS 自体は、前述のとおり OSS なのでソースコードを自由に取得できる。
そのビルド自体も docker を利用する仕組みがしっかりと用意されおり、環境依存なども少なく失敗しにくい。
あまり性能の高くないノートPCでも、 10分程度でビルド可能だ。

Windows 上で VyOS 1.3 のイメージをビルドするには、 WSL2 と Docker (Docker Desktop または Rancher Desktop) が必要だ。
Docker Desktop を使えば、 Windows のシェルから直接 Docker を起動できるが、ファイルシステムの問題でビルドエラーになるため、 WSL が必要となる。

また、 GNS3 を Windows 上で使うには、 別途 VirtualBox などの仮想マシン管理ツールが必要となる。 1
以降、無料で使用できる VirtualBox での利用方法を中心に説明するが、他の仮想マシン管理ツールを利用する場合は適宜読み替えていただきたい。

GNS3 は、この VirtualBox の中に "GNS3 VM" という仮想マシンを作成し、 その中でさらに QEMU の仮想マシンや、 docker コンテナ (※) を作成し、 ネットワークをエミュレーションを行うのが、基本的な仕組みとなる。

※: VyOS のビルドに使用した docker とはまた別の環境。

…とまあ、いろいろツールの名前が出てきたが、これらの構成をまとめると、以下の図のようになる。

これらを順にインストールしていこう。

なお、このうち WSL2 と Docker Desktop については、 VyOS の ISO イメージのビルドを自分でせず、野良ビルドを使う場合はインストール不要だ。 (詳しくは次回②に記載)

WSL2

WSL のインストール | Microsoft Learn
のページの内容に則り、以下の手順でインストールする

  1. PowerShell または Windows コマンド プロンプトを管理者モードで開く

  2. 以下のコマンドを入力して PC を再起動する

    wsl --install
  3. 以下のコマンドで、 WSL で作成される WSL バージョンを WSL2 を規定にする。

    wsl --set-default-version 2
  4. Microsoft Store などから、適当な WSL ディストリビューション (Ubuntu 22.04.1 LTS など) をインストールする

Docker Desktop

Docker Desktop のインストーラを取得し、 ウィザードに従ってインストールする。

インストール後、設定から WSL Integration を有効にする。

もし、ライセンス的に Docker Desktop が使いづらい環境なら、以下の Rancher Desktop の手順を参照。

VirtualBox

VirtualBox で、 Version 6.1 以上を取得して、ウィザードに従ってインストール。

こちらは特に気を付けるべきことはなかったと思う。

GNS3

GNS3 本体のインストール

GitHub の gns3-gui プロジェクトのリリースページ から、最新バージョンの

  • GNS3-*-all-in-one.exe

をダウンロードし、実行する。

インストールするコンポーネントを選択するところで、

  • GNS3 Desktop
  • GNS3 VM

2つだけを選択してそれ以外の選択を(外せる物は)全て外す。 2

ウィザードを進めると、 GNS3 の VMタイプ を選ぶ場面になるので、 VirtualBox を選択する。

そのままインストールを進め、初回起動の段階で一旦休憩。

GNS3 VM のインポート

次に、 インストール途中で "ダウンロード" フォルダあたりにダウンロードされていた、 GNS3.VM.VirtualBox.*.zip を解凍して GNS3 VM.ova を取り出す。 3

VirtualBox を起動し、この GNS3 VM.ova を「仮想アプライアンスのインポート」にて、 "GNS3 VM" という名前でインポートする。

その後、 PowerShell を立ちあげ、以下のコマンドを実行する。
これにより、前述の入れ子になった(ネストされた)仮想化による仮想マシンの機能が有効化される。 4

$env:Path += ';' + 'C:\Program Files\Oracle\VirtualBox\';
VBoxManage.exe modifyvm 'GNS3 VM' --nested-hw-virt on;

GNS3 上の VM の設定

GNS3 の初回起動に戻ると、 GNS3 のネットワークシミュレーションをどのように実行するか選択肢が出てくる。

The GNS3 VM option is strongly recommended on Windows and Mac OSX.

と書かれているように、 Virtual Machine を選択する。

Local server の設定はデフォルトのままで良い。 この設定を使って、 GNS3 VM で動くサービスがホストされ、 GNS3 GUI がそのサービスと通信することでツールが動作する仕組みとなる。

改めてもう一度 GNS3 VM がどの仮想マシンマネージャーを使うか効いてくるので、 VirtualBox を選択する。

vCPU や RAM のサイズ (特に前者) は、ホスト PC のリソースが許す限り豊富に設定しておいた方が良い。

GNS3 起動後、 [Edit]->[Preferences] の [GNS3 VM] の設定でも、もう少し細かい GNS3 VM の設定ができる。
"Run the VM in headless mode" や "Action when closing GNS3: suspend the GNS3 VM" あたりの設定は ON にしておいた方が便利。

正しくセットアップできていれば、 GNS3 起動後暫くしたら、 Servers Summary ウィンドウの GNS3 VM がグリーンになっているはずだ。

GNS3 VM 側の設定

VirtualBox 側で立ち上がった GNS3 VM を開くと、以下のように VM 情報が表示されている。

この画面 (TUI) を直接操作したり、 画面に書かれているアドレスやパスワードで ssh することで、 GNS3 VM 内部のより細かい設定ができる。

例えば、プロキシ環境下でプロキシの設定が必要な場合、以下の 2カ所 の設定を行う。

  1. VM 情報のページから [OK] -> メニューで [Proxy] と選択し、 http://203.0.113.99:8080 と言った形で指定する。
    • VM 内からホストPCで設定されている DNS は見れず、 DNS は 8.8.8.8 や 8.8.4.4 が決め打ちされている。 イントラネット内の名前解決はできないので、 プロキシがイントラネット内なら、ホスト名では無くて IPアドレス で指定する方が良い。
  2. メニューで [Shell] を選択して以下のように実行し、 docker デーモン (dockerd) にもプロキシの設定を反映させる。

    gns3@gns3vm:~$ sudo mkdir -p /etc/systemd/system/docker.service.d
    gns3@gns3vm:~$ sudo tee -a /etc/systemd/system/docker.service.d/http-proxy.conf << EOF >/dev/null
    [Service]
    Environment="HTTP_PROXY=$http_proxy"
    Environment="HTTPS_PROXY=$https_proxy"
    EOF
    gns3@gns3vm:~$ sudo systemctl daemon-reload
    gns3@gns3vm:~$ sudo systemctl restart docker
    gns3@gns3vm:~$ cat << EOF > ~/.docker/config.json
    {"proxies":{"default":{"httpProxy": "$http_proxy","httpsProxy": "$https_proxy","noProxy": "127.0.0.0/8"}}}
    EOF

GNS3 から VirtualBox を操作する部分の作り込みが甘いのかもしれないが、 GNS3 VM が再起動されると GNS3 から VM を正常に操作できなくなってエラーが起きがちだ。
このため、 一通り GNS3 VM の設定が終わったら、 GNS3 (GUI) 側を再起動したほうが良い。

次回

次回は、 GNS3 に入れる VyOS イメージのビルドと、 GNS3 に VyControl のコンテナを準備する。


  1. VirtualBoxではなくHyper-Vなども使えることは使えるが、仮想NICの扱いの仕組み上Hyper-Vだと若干ややこしい。(GNS3 VMのIPアドレスが毎回わかるとか、VPN環境下で使いにくいとか) 

  2. GNS3は、VMではなくホストPC上で直接ネットワークをエミュレートする方法もあり、そういった場合にTool以下のソフトが必要になるのだが、今回はVM上でエミュレートしているので、これらの殆どはホストPC側にインストールする必要が無い。強いて言うならNPCAPとWiresharkはインストールしても良いかも。 

  3. ダウンロードし間違えたり、どこにダウンロードされたかわからない場合、前述のリリースページから手動でダウンロード可能。 

  4. Hyper-Vの場合は、GNS3.VM.Hyper-V.*.zip内のinstall-vm.batのバッチを実行すれば、自動的にネストされた仮想化が有効になる。 

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください