GNS3 に VyOS 仮想ルーターを追加する長い道のり③ 実践編

Pocket

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

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

環境導入編、イメージ準備編に続く実践編。
以前の投稿はこちら。


実際に、 GNS3 上で VyOS を使ってみよう。

GNS3 プロジェクトを作成

GNS3 を開き、適当なプロジェクトを新規作成(ないし開く)する。

平行して、 GNN3 VM が起動するまで待とう。

VyOS の起動

GNS3 GUI 上で、テンプレート一覧から VyOS のデバイスをドラッグ&ドロップして、プロジェクトに追加する。

デバイスアイコンの右クリックで Configure をクリックしてプロパティを開き、 On close の動作を Save the VM state (休止状態) にしておくとよいだろう。

その後、 デバイスアイコンの再度右クリックで Start を選択し、仮想マシンをスタートさせる。
デバイスアイコンをダブルクリックすると、 コンソールが起動する。 iso ファイルがブータブルディスクになっていてるため、VyOS の起動ログが表示されているはずだ。
ログイン画面が出るまで待つ。

デフォルトの認証情報 (login: vyos, password: vyos) を使ってログインする。

VyOS 仮想 HDD へのインストール

このままでも VyOS として利用できるのだが、 "T2958 DHCP server doesn't work from a live CD" といった問題もあるようなので、一旦仮想 HDD にインストールする。
Permanent installation — VyOS 1.3.x (equuleus) documentation

ログイン後、以下のコマンドを実行し、いくつかの質問に答えれば OK だ。

vyos@vyos:~$ install image

その後、再起動する。

vyos@vyos:~$ reboot

再起動前は、 cat /proc/cmdline のカーネルに渡された BOOT_IMAGE/live/vmlinuz となっていたのが、

vyos@vyos:~$ cat /proc/cmdline # 再起動前
BOOT_IMAGE=/live/vmlinuz boot=live components hostname=vyos username=live nopersistence noautologin nonetworking union=overlay console=ttyS0,115200 console=tty0 net.ifnames=0 biosdevname=0 initrd=/live/initrd.img

再起動後は、 install image の途中で入力したイメージ名のものに変更されていることがわかる。

vyos@vyos:~$ cat /proc/cmdline # 再起動後
BOOT_IMAGE=/boot/1.3.2/vmlinuz boot=live rootdelay=5 noautologin net.ifnames=0 biosdevname=0 vyos-union=/boot/1.3.2 console=tty0 console=ttyS0,115200

VyOS の初期設定

VyOS の操作は VyContol に任せたい… が、どうしても VyControl から VyOS にアクセスできるようにするため、以下の 3点 はコマンドで設定する必要がある。

  • インターフェースへの IP の設定
    • 以下の例では、 192.168.11.254/24 に設定
  • DHCP サーバーの起動
    • 以下の例では、 192.168.11.0/24 のサブネットに、 DNS, デフォルトゲートウエイを自分自身、 DHCP の貸し出し範囲を .17 から .126 の範囲で指定
  • (VyControl で操作させるための) HTTP API の有効化
    • API のアクセスキーを my_secret_key (任意の文字列) に設定

このため、 VyOS のコンソールでログインし、以下のコマンドを入れる。

vyos@vyos:~$ configure
vyos@vyos# set interfaces ethernet eth0 address '192.168.11.254/24'
vyos@vyos# set service dhcp-server shared-network-name 'subnet01'
vyos@vyos# set service dhcp-server shared-network-name 'subnet01' subnet '192.168.11.0/24' default-router '192.168.11.254'
vyos@vyos# set service dhcp-server shared-network-name 'subnet01' subnet '192.168.11.0/24' name-server '192.168.11.254'
vyos@vyos# set service dhcp-server shared-network-name 'subnet01' subnet '192.168.11.0/24' range 0 start '192.168.11.17'
vyos@vyos# set service dhcp-server shared-network-name 'subnet01' subnet '192.168.11.0/24' range 0 stop '192.168.11.126'
vyos@vyos# set service https api keys id my_id key 'my_secret_key'
vyos@vyos# set service https certificates system-generated-certificate lifetime '65535'
vyos@vyos# set service https virtual-host vyos1 listen-address '192.168.11.254'
vyos@vyos# set service https virtual-host vyos1 listen-port '6443'
vyos@vyos# set service https virtual-host vyos1 server-name 'vyos1.example.com'
vyos@vyos# commit
vyos@vyos# save
vyos@vyos# exit

これで、 VyOS 側の設定は完了だ。

VyControl の起動

GNS3 GUI 上で、テンプレート一覧から VyControl をドラッグ&ドロップして、プロジェクトに追加する。

スイッチングハブか何かを間に咬ませて(2デバイスを繋ぐだけなら無くても良いけど)、 VyOS と VyControl を結線する。

デバイスアイコンの右クリックで Edit config をクリックして、コンテナの /etc/network/interfaces を編集する。

# DHCP config for eth0 の部分のコメントアウトを外せば、 VyOS の DHCP から IPアドレスを取得するようになる。

その後、 デバイスアイコンの再度右クリックで Start を選択し、コンテナをスタートさせる。
デバイスアイコンをダブルクリックすると、 コンテナ内にフォワードされるアドレスがブラウザ側で開く。

VyControl の初期設定

VyControl の初回アクセス時は、 管理者アカウントを作るように表示されるので、適当なユーザー名とパスワードで作成しておく。

そして、 VyControl のコントロール対象の VyOS インスタンス情報を設定してやる。

Router の Interfaces 情報を開き、 VyOS ルーター側の interface 一覧が表示されていれば、設定は完了だ。

以上で、 VyControl から VyOS が操作できるようになった。

トラブルシューティング

VyOS 起動時に KVM acceleration cannot be used と出る


VyOS 起動時に、 以下のようなエラーが出て起動に失敗するケース。

KVM acceleration cannot be used (/dev/kvm doesn't exist). It is possible to turn off KVM support in the gns3_server.conf by adding enable_kvm = false to the [Qemu] section.

① 環境導入編 で触れていた、「入れ子になった(ネストされた)仮想化」が機能しておらず、 GNS3 VM の中で更に、 KVM という仮想化支援機能を使用して二重の仮想化にて VyOS を起動するのに失敗している。
GNS3 VM を開くと以下のように "KVM support available: True" となるべきところが "False" となっていると思われる。

まずは、 OS のバージョンや CPU, 仮想化管理ツールのバージョンが、ネストされた仮想化をサポートしているかをもう一度確認しよう。

Hyper-V系の機能 (WSL2 や Windows Sandbox 等) が有効になっていると、 VirtualBox を動かす段階で既に一段仮想化支援機能がネストされていて、その下の VM で仮想化支援機能が使えない場合もある。
そのようなときは、 Hyper-V 機能をオフにして VirtualBox を使ったり、いっそ逆に Hyper-V で GNS3 VM を動かしてしまう手もある。

しかし、 CPU や仮想化管理ツールの組み合わせによっては、どうしても有効化できない場合もあるだろう。
そのような場合は、動作速度は遅くなるが KVM による仮想化支援機能を無効化してしまう方法もある。

  1. まず、 VM管理ツールや ssh で GNS3 VM の管理画面に入る
  2. メニューから Configure を選択する
  3. 以下の内容を追記し、 Ctrl+X で保存、 その後 GNS3 VM を再起動する。

    [Qemu]
    enable_kvm = false

ただし、 VyOS の動作速度がかなり落ちるので注意。

次回

最後となる次回は応用編。

コメントを残す

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

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