本記事は 【アットホームな現場です】🎄★☆ネットワーク系エンジニア★☆アレコレアウトプット★☆🎄 Advent Calendar 2022 15日目の記事だ。 (空いていたので埋め)
GNS3 という OSS のネットワークエミュレータを、 Cisco の IOS などの取得なしに、無料のライセンス内で利用できるようにしようという話。
前回の環境導入編に続く第2回。
https://crieit.net/posts/GNS3-VyOS
GNS3 のインストールと GNS3 VM へのアタッチが完了している状態から始める。
GNS3 のマーケットプレイスには、 VyOS のテンプレート が用意されており、これを使うと手軽に GNS3 内で VyOS のルーターを追加できる。
このテンプレートを使うためには、 VyOS の特定のバージョンの ISO イメージファイルが必要だ。
しかし、 VyOS の LTS 版では、ビルド済みイメージのダウンロードは、サブスクリプション契約者(または非営利団体など)のみとなっている。
https://docs.vyos.io/en/equuleus/installation/install.html#download
一方で、 VyOS 自体は OSS であり、 GPL のライセンスを守る限りソースコードを自由にビルドして利用できる。 そのビルド自体も docker を利用したツールセットが用意されていたりと、比較的しっかり整備されていて失敗しにくい。
あまり性能が高くないノートPC でも 10分 程度でビルド可能だ。
このため、 マニュアルの Build 手順に従って VyOS 1.3 を自分でビルドしてイメージファイルを作成しよう。
そのビルドには、前回インストールした Docker が必要となる。
加えて、 Docker は WSL2 内のディストリビューションから利用する必要がある。
Docker 自体は、 Windows のシェル (コマンドプロンプトや PowerShell) から直接起動できるが、今回行う作業では Windows と Linux のファイルシステム違いによる問題で、ビルドが失敗してしまうためだ。
というわけで、 前回 WSL Integration を有効にした、適当な WSL2 ディストリビューション (Ubuntu 22.04.1 LTS など) を起動する。
適当な空のフォルダをカレントフォルダに設定し、以下のように実行する。
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
docker コンテナに入ったら、以下のコマンドでビルドする。
[email protected]:/vyos# ./configure --architecture amd64 --build-type release --version 1.3.2
[email protected]:/vyos# sudo make iso
ビルドが成功すれば、 build
ディレクトリに .iso ファイルが出力されているはずだ。 ホスト PC 側から WSL2 内のビルドディレクトリを開き、 ホスト PC にコピーする。
ちなみに、 このビルド手順に関しては、 プロキシ環境下ではどうしてもうまくビルドができなかった。
ビルドスクリプトが、プロキシ環境下のことをあまり考慮していないのだと思われる。
もし自分でイメージのビルドができなかった場合…
GPL のライセンス上、ビルドしたイメージを再配布することも再配布されたビルドを利用することも、ライセンスを守る限り問題は無い。
このため、 VyOS の LTS版 のビルドを公開している人がいるので、それを取得して利用することもできる。
→ Releases · 9l/vyos-build-action
GitHub Actions でビルドされており、比較的信頼できそうなイメージではあるが、 VyOS 以外の第三者によるもので何か余計な物が仕込まれているリスクは上がるので、利用に関しては自己責任で。
最初からこれを紹介しとけよって? まぁまぁ、自分でビルドできるならそれに越したことはないし。
vyos.gns3a
) をダウンロードする。vyos.gns3a
を取り込む。これで、 GNS3 で VyOS を利用する準備が整った。
VyOS を操作するフロントエンドとなる VyControl を、 Docker で導入する。
公式で用意されている robertoberto/vycontrol イメージを入れれば良い… と言いたいところなのだが、別途用意した advanceboy/vycontrol-host のイメージを使う。
GNS3 で vycontrol コンテナがホストする HTTP サーバーを操作する際、 GNS3 がフォワーディングしてくれので、 ホスト側のブラウザを使用する。
ところが、 vycontrol の公式イメージは 127.0.0.1 以外でのアクセスを禁止しているので、フォワーディングされたアドレスで UI に入ることができない。
そこで、 ALLOWED_HOSTS
という環境変数経由でアクセスに使える IPアドレス を指定可能に改造したイメージを使用する。
https://github.com/advanceboy/vycontrol-host
advanceboy/vycontrol-host:latest
のイメージ名を設定する。docker pull
をあらかじめ実行しておけば、 "Existing imases" の選択肢に現れるようになる。ALLOWED_HOSTS=*
を設定して、コンテナテンプレートの設定を完了させる、/code/db.sqlite3
を追加する。これで、 GNS3 で VyControl を利用する準備が整った。
ついでに、 curl などが利用できる buildpack-deps:stable-curl イメージあたりも追加しとくと便利かもしれない。
次回は、いよいよ GNS3 で VyOS を実行する。
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント