本記事は 【アットホームな現場です】🎄★☆ネットワーク系エンジニア★☆アレコレアウトプット★☆🎄 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
(任意の文字列) に設定
- API のアクセスキーを
このため、 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 による仮想化支援機能を無効化してしまう方法もある。
- まず、 VM管理ツールや ssh で GNS3 VM の管理画面に入る
- メニューから Configure を選択する
-
以下の内容を追記し、 Ctrl+X で保存、 その後 GNS3 VM を再起動する。
[Qemu] enable_kvm = false
ただし、 VyOS の動作速度がかなり落ちるので注意。
次回
最後となる次回は応用編。