GNS3 に VyOS 仮想ルーターを追加する長い道のり② イメージ準備編

Pocket

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

GNS3 という OSS のネットワークエミュレータを、 Cisco の IOS などの取得なしに、無料のライセンス内で利用できるようにしようという話。

前回の環境導入編に続く第2回。

GNS3 のインストールと GNS3 VM へのアタッチが完了している状態から始める。

VyOS イメージの取得

GNS3 のマーケットプレイスには、 VyOS のテンプレート が用意されており、これを使うと手軽に GNS3 内で VyOS のルーターを追加できる。

このテンプレートを使うためには、 VyOS の特定のバージョンの ISO イメージファイルが必要だ。
しかし、 VyOS の LTS 版では、ビルド済みイメージのダウンロードは、サブスクリプション契約者(または非営利団体など)のみとなっている。
https://docs.vyos.io/en/equuleus/installation/install.html#download

一方で、 VyOS 自体は OSS であり、 GPL のライセンスを守る限りソースコードを自由にビルドして利用できる。 そのビルド自体も docker を利用したツールセットが用意されていたりと、比較的しっかり整備されていて失敗しにくい。
あまり性能が高くないノートPC でも 10分 程度でビルド可能だ。

VyOS イメージを自分でビルド

このため、 マニュアルの Build 手順に従って VyOS 1.3 を自分でビルドしてイメージファイルを作成しよう。

そのビルドには、前回インストールした Docker が必要となる。
加えて、 Docker は WSL2 内のディストリビューションから利用する必要がある。
Docker 自体は、 Windows のシェル (コマンドプロンプトや PowerShell) から直接起動できるが、今回行う作業では Windows と Linux のファイルシステム違いによる問題で、ビルドが失敗してしまうためだ。

というわけで、 前回 WSL Integration を有効にした、適当な WSL2 ディストリビューション (Ubuntu 22.04.1 LTS など) を起動する。
適当な空のフォルダをカレントフォルダに設定し、以下のように実行する。

  1. git でビルドスクリプトを clone して、 docker でビルド環境を起動する

    $ git clone -b equuleus --single-branch https://github.com/vyos/vyos-build.git
    $ cd ./vyos-build/
    $ docker run --rm -it --privileged -v $(pwd):/vyos -w /vyos vyos/vyos-build:equuleus bash
  2. docker コンテナに入ったら、以下のコマンドでビルドする。

    vyos_bld@xxxx:/vyos# ./configure --architecture amd64 --build-type release --version 1.3.2
    vyos_bld@xxxx:/vyos# sudo make iso
  3. ビルドが成功すれば、 build ディレクトリに .iso ファイルが出力されているはずだ。 ホスト PC 側から WSL2 内のビルドディレクトリを開き、 ホスト PC にコピーする。

    • \\wsl$\<WSL ディストリビューション名>\... のネットワークパスで、 ホスト PC側から WSL2 のファイルを参照できる。

ちなみに、 このビルド手順に関しては、 プロキシ環境下ではどうしてもうまくビルドができなかった。
ビルドスクリプトが、プロキシ環境下のことをあまり考慮していないのだと思われる。

VyOS イメージの野良ビルドを取得する

もし自分でイメージのビルドができなかった場合…

GPL のライセンス上、ビルドしたイメージを再配布することも再配布されたビルドを利用することも、ライセンスを守る限り問題は無い。
このため、 VyOS の LTS版 のビルドを公開している人がいるので、それを取得して利用することもできる。

Releases · 9l/vyos-build-action

GitHub Actions でビルドされており、比較的信頼できそうなイメージではあるが、 VyOS 以外の第三者によるもので何か余計な物が仕込まれているリスクは上がるので、利用に関しては自己責任で。

最初からこれを紹介しとけよって? まぁまぁ、自分でビルドできるならそれに越したことはないし。

VyOS のテンプレートを GNS3 に取り込み

  1. GNS3 のマーケットプレイス Appliances から VyOS のテンプレート (vyos.gns3a) をダウンロードする。
  2. GNS3 GUI の [File]->[Import appliance] メニューから、ダウンロードした vyos.gns3a を取り込む。
  3. 取り込み先をどこにするか聞いてくるので、 GNS3 VM を選択する。 (これまで手順通りなら、他の選択肢はグレーアウトされているはず)
  4. GNS3 VM 内で VyOS を動かす仮想マシン (入れ子の VM) をどれにするか選択する。 デフォルトの選択で問題ないはず。
  5. 必要なファイルをインポートする。
    1. まず、 empty8G.qcow2 を選択し、 [Download] をクリックすると、 自動的に sourceforge.net のダウンロードページに飛ばされるので、それをダウンロードする。
    2. [Import] ボタンで、 ↑ でダウンロードされたファイルを選択すれば、 "Found on GNS3 VM" と表示が変わる
    3. vyos-x.x.x-amd64.iso のほうは、 "Allow custom files" のチェックボックスにチェックをつけてからインポートする。 これは、 セルフビルドや野良ビルドをインポートする際に、 公式提供の .iso とファイルハッシュが異なるために、エラーとなるのを回避するためだ。

      [Import] ボタンから .iso ファイルをインポートすると MD5 チェックサムが異なると怒られるが、それでもインポートを続行させる。
  6. Ready to install 表記に変わったら、 その version を選択して、 Next をクリックする。

    • 他のバージョンの VyOS を用意する場合は、インポートの動作を繰り返す。

これで、 GNS3 で VyOS を利用する準備が整った。

VyControl Docker イメージを GNS3 に取り込み

VyOS を操作するフロントエンドとなる VyControl を、 Docker で導入する。

公式で用意されている robertoberto/vycontrol イメージを入れれば良い… と言いたいところなのだが、別途用意した advanceboy/vycontrol-host のイメージを使う。

GNS3 で vycontrol コンテナがホストする HTTP サーバーを操作する際、 GNS3 がフォワーディングしてくれので、 ホスト側のブラウザを使用する。
ところが、 vycontrol の公式イメージは 127.0.0.1 以外でのアクセスを禁止しているので、フォワーディングされたアドレスで UI に入ることができない。

そこで、 ALLOWED_HOSTS という環境変数経由でアクセスに使える IPアドレス を指定可能に改造したイメージを使用する。

  1. GNS3 の [Edit]->[Preferences] から "Docker container templates" の設定を開き、 [New] をクリック。
  2. Docker コンテナを実行する場所をどこにするか聞いてくるので、 GNS3 VM を選択する。 (これまで手順通りなら、他の選択肢はグレーアウトされているはず)
  3. New image の Image name に、先ほどの advanceboy/vycontrol-host:latest のイメージ名を設定する。

    • ちなみに、 GNS3 VM のシェル側で docker pull をあらかじめ実行しておけば、 "Existing imases" の選択肢に現れるようになる。
  4. Template name は、適当にわかりやすい名前で。 Adapter 数は 1 で OK。 Start Command も 空でよい。
  5. Console type を "http" に設定する。
  6. Environment で、 ALLOWED_HOSTS=* を設定して、コンテナテンプレートの設定を完了させる、
  7. "Docker container templates" の設定から [Edit] で詳細設定画面を開き、 "HTTP port in the container" を 8000 に設定する。
  8. 更に、 Advanced タブに移動して、 コンテナの永続化パスに /code/db.sqlite3 を追加する。

これで、 GNS3 で VyControl を利用する準備が整った。

ついでに、 curl などが利用できる buildpack-deps:stable-curl イメージあたりも追加しとくと便利かもしれない。

次回

次回は、いよいよ GNS3 で VyOS を実行する。

コメントを残す

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

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