Dockerを使ってVyOS 1.4.1 LTSをビルドした

久々にアクセスしたVyOSプロジェクトの公式ブログVyOS Network Blogにて、昨年の年末にVyOS 1.4.1 LTSがリリースされた旨の記事が掲載されていた。
バージョン1.4.1は商用版であるものの、VyOS Networks社との間でサブスクリプション契約を結んでいないユーザが個人利用目的で自分でビルドし、サポート対象外という条件で利用する事は可能である。
今回は復習を兼ねて久々にDockerを介して自家製VyOSをビルドした。
VyOSは新しい機能の追加やコマンドのオプションの追加や構文の変更などが頻繁に行われており、今回のビルド時においてオプションも一部変更が見られた。

前回の記事:
https://debslink.hatenadiary.jp/entry/20240406/1712367184 Dockerを使ってVyOS 1.4.0-epa2をビルドした
 
 
VyOSとは
VyOSとは、Debian GNU/Linuxベースのネットワークオペレーティングシステム(NOS)であり、ルータやファイアウォールやVPNゲートウェイ等のようなネットワーク機能を提供する。Vyattaというソフトウェアルータの無償版の開発が中止された事により、2013年にそれをコミュニティが引き継いでVyOSとして開発を継続させた。
2025年2月現在、VyOS Networks社とVyOSのコミュニティにより開発が勧められている。

開発版のnightly builds版と商用版のLTS release版の2種類が用意されており、nightly builds版のインストーラはユーザ登録やサブスクリプション契約が無くてもダウンロードおよび利用が可能である。
VyOS Networks社との間でサブスクリプション契約を結ぶ事で、LTS release版のインストーラのダウンロードが可能になるだけでなく、商用版のルータのようなサービスを受ける事も可能になる。
VyOSは、CiscoやJuniper等の商用ルータOSの代替としての利用やクラウド環境で利用が多く、技術者や特にコストを抑えたい企業等に人気が有る。
 

当方の環境
ホスト機:macOS 15.3.1 / MacBook Pro 2020 / RAM: 16GB / CPU: Intel Core i5 2.0GHz
仮想化環境:Oracle VirtualBox 7.1.4 r165100
ゲスト機 (ビルド環境):Ubuntu Linux 22.04.1 LTS
ビルド対象:VyOS 1.4.1 LTS amd64
 

VyOS 1.4のビルドの大まかな流れ
ビルドの大まかな流れは上記のリンク先にある前回の記事と同じである。VirtualBoxにてVyOSのビルド環境用のUbuntu Serverを立てるところから始め、ゴールはVirtualBoxにVyOSの仮想ルータを立てて動作確認するところまでとする。
・Ubuntu Serverの構築
・Ubuntu ServerにてVyOSのビルドに必要なパッケージをインストール
・Ubuntu ServerにてVyOSのビルドで使用するDockerのパッケージをインストール
・VyOSのソースコードの取得
・VyOSのビルド
・VyOSのisoファイルの吸い出し
・VirtualBoxでVyOSの動作確認
尚、VyOSの動作確認の際の対向先として、今回もCisco CSR1000vを使用する。
 

VyOSのビルド環境の構築

1.Ubuntu Serverの構築
VyOSのビルド環境を作る為、まずはVirtualBoxにてUbuntu Serverを立てる。
尚、VirtualBoxにUbuntu Serverを構築する手順は当記事では割愛する。
Ubuntu Serverは以下の条件でVirtualBoxにて構築した。
・Ubuntu Linux 22.04.1 LTS
・Mem: 8192MB
・HDD: 132GB
VyOSのビルド中にUbuntu Serverの仮想HDDの容量を大量に消費する為、Ubuntu Serverにアサインする仮想HDDの容量は132GBとした。
Ubuntu Serverのデプロイが完了しログイン可能な状態になったら、ターミナルを立ち上げてsshでUbuntu Serverにログインする。

以下は今回使用するUbuntu Serverの情報。

user@jpmtkvmsv00:~$ date
Sat Feb 15 01:02:53 AM UTC 2025
user@jpmtkvmsv00:~$ 
user@jpmtkvmsv00:~$ uname -a
Linux jpmtkvmsv00 5.15.0-131-generic #141-Ubuntu SMP Fri Jan 10 21:18:28 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
user@jpmtkvmsv00:~$ 
user@jpmtkvmsv00:~$ 
user@jpmtkvmsv00:~$ cat /etc/os-release 
PRETTY_NAME="Ubuntu 22.04.1 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.1 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
user@jpmtkvmsv00:~$ 

 
2.VyOSのビルドに必要なパッケージをインストール
Ubuntu Serverにログイン可能な状態になったら、aptコマンドでリポジトリおよびインストール済みパッケージを更新する。

user@jpmtkvmsv00:~$ sudo apt update
Hit:1 http://jp.archive.ubuntu.com/ubuntu jammy InRelease
Hit:2 http://jp.archive.ubuntu.com/ubuntu jammy-updates InRelease
Hit:3 http://jp.archive.ubuntu.com/ubuntu jammy-backports InRelease
:
省略
:
108 packages can be upgraded. Run 'apt list --upgradable' to see them.
user@jpmtkvmsv00:~$ 
user@jpmtkvmsv00:~$ 
user@jpmtkvmsv00:~$ sudo apt -y upgrade
Reading package lists... Done
Building dependency tree... Done
:
省略
:
user@jpmtkvmsv00:~$ 

 
リポジトリおよびインストール済みパッケージを更新が完了したら、続けてaptコマンドでVyOSのビルドに必要なパッケージをインストールする。

user@jpmtkvmsv00:~$ sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
lsb-release is already the newest version (11.1.0ubuntu4).
lsb-release set to manually installed.
:
省略
:
user@jpmtkvmsv00:~$

 
VyOSのビルドに必要なパッケージのインストールが完了したら、sudo apt update実行時にDockerのパッケージの信頼性を検証出来るようにする為、Dockerで公式に公開されている署名鍵をダウンロードする。

user@jpmtkvmsv00:~$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
user@jpmtkvmsv00:~$ 

 
Dockerの署名鍵のダウンロード後、Dockerの最新版かつ安定版がインストールされるようにリポジトリを追加する。
続けて、追加したリポジトリを更新する為に再度apt updateを実行する。

user@jpmtkvmsv00:~$ echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
user@jpmtkvmsv00:~$ 
user@jpmtkvmsv00:~$ 
user@jpmtkvmsv00:~$ sudo apt update
Get:1 https://download.docker.com/linux/ubuntu jammy InRelease [48.8 kB]
Get:2 https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages [44.1 kB]       
Hit:3 http://jp.archive.ubuntu.com/ubuntu jammy InRelease                               
Hit:4 http://jp.archive.ubuntu.com/ubuntu jammy-updates InRelease
Hit:5 http://jp.archive.ubuntu.com/ubuntu jammy-backports InRelease
Hit:6 http://jp.archive.ubuntu.com/ubuntu jammy-security InRelease
Fetched 92.9 kB in 2s (50.4 kB/s)
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
All packages are up to date.
user@jpmtkvmsv00:~$ 

 
3.Dockerのパッケージをインストール
aptのリポジトリおよびパッケージの更新が完了したら、aptコマンドでDockerのパッケージをインストールする。

user@jpmtkvmsv00:~$ sudo apt install -y docker-ce docker-ce-cli containerd.io
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following packages were automatically installed and are no longer required:
  libflashrom1 libftdi1-2
:
省略
:
user@jpmtkvmsv00:~$

 
続いて、curlを使用してDocker composeをインストールする。

user@jpmtkvmsv00:~$ sudo curl -L "https://github.com/docker/compose/releases/download/1.28.6/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100 11.6M  100 11.6M    0     0  6504k      0  0:00:01  0:00:01 --:--:-- 12.0M
user@jpmtkvmsv00:~$ 

 
Docker composeのインストールが完了したら、Docker composeに実行権限を付与する。
続けてdockerサービスを再起動させる。

user@jpmtkvmsv00:~$ sudo chmod +x /usr/local/bin/docker-compose
user@jpmtkvmsv00:~$ 
user@jpmtkvmsv00:~$ sudo systemctl stop docker.service 
Warning: Stopping docker.service, but it can still be activated by:
  docker.socket
user@jpmtkvmsv00:~$ 

 
ここで、systemctlコマンドを使用し上記にてインストールしたDockerが動いているか確認する。
Activeの行が「Active: active (running)」である事を確認する。
「inactive (dead)」の場合、sudo systemctl start docker.serviceコマンドを叩き、Dockerサービスを起動させる。
「failed」の場合、sudo systemctl restart docker.serviceコマンドを叩き、Dockerサービスを再起動させる。

user@jpmtkvmsv00:~$ systemctl status docker.service
● docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2025-02-15 01:10:22 UTC; 11s ago
TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com
   Main PID: 19699 (dockerd)
      Tasks: 7
     Memory: 21.0M
        CPU: 438ms
     CGroup: /system.slice/docker.service
             └─19699 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Feb 15 01:10:22 jpmtkvmsv00 dockerd[19699]: time="2025-02-15T01:10:22.236616235Z" level=info msg="OTEL tracing is not configure>
Feb 15 01:10:22 jpmtkvmsv00 dockerd[19699]: time="2025-02-15T01:10:22.236839468Z" level=info msg="detected 127.0.0.53 nameserve>
Feb 15 01:10:22 jpmtkvmsv00 dockerd[19699]: time="2025-02-15T01:10:22.346640803Z" level=info msg="[graphdriver] using prior sto>
Feb 15 01:10:22 jpmtkvmsv00 dockerd[19699]: time="2025-02-15T01:10:22.347132589Z" level=info msg="Loading containers: start."
Feb 15 01:10:22 jpmtkvmsv00 dockerd[19699]: time="2025-02-15T01:10:22.592069429Z" level=info msg="Default bridge (docker0) is a>
Feb 15 01:10:22 jpmtkvmsv00 dockerd[19699]: time="2025-02-15T01:10:22.710052704Z" level=info msg="Loading containers: done."
Feb 15 01:10:22 jpmtkvmsv00 dockerd[19699]: time="2025-02-15T01:10:22.747339200Z" level=info msg="Docker daemon" commit=4c9b3b0>
Feb 15 01:10:22 jpmtkvmsv00 dockerd[19699]: time="2025-02-15T01:10:22.747753845Z" level=info msg="Daemon has completed initiali>
Feb 15 01:10:22 jpmtkvmsv00 dockerd[19699]: time="2025-02-15T01:10:22.781530275Z" level=info msg="API listen on /run/docker.soc>
Feb 15 01:10:22 jpmtkvmsv00 systemd[1]: Started Docker Application Container Engine.
user@jpmtkvmsv00:~$ 

 
VyOSのisoをビルドする為のdocker imageをpullする。
VyOS 1.4をビルドしたい為、vyos/vyos-build:オプションはsagittaを指定する。
当記事の投稿時の段階では、sagittaではなくcurrentを指定するとVyOS 1.5のRolling Release版が降ってくる。

user@jpmtkvmsv00:~$ sudo docker pull vyos/vyos-build:sagitta
sagitta: Pulling from vyos/vyos-build
b2b31b28ee3c: Pulling fs layer 
4f4fb700ef54: Pulling fs layer 
a7bc64ceb516: Pulling fs layer 
a1cdc45e87b0: Pulling fs layer 
6c6ca0278f5e: Pulling fs layer 
4cad22684be2: Pulling fs layer 
63bc8642f651: Pulling fs layer 
c58c4bc92429: Pulling fs layer 
da0b478117ba: Pulling fs layer 
c043bdef5b11: Pull complete 
:
省略
:
519f65597c1a: Pull complete 
Digest: sha256:45d0de8ddcceefd7712b65f4bfb08995554fbb8ae8fa718dff0aeb0348a07531
Status: Downloaded newer image for vyos/vyos-build:sagitta
docker.io/vyos/vyos-build:sagitta
user@jpmtkvmsv00:~$ 

 
作業用ディレクトリを作成する。作成後、作業用ディレクトリに移動する。
作業用ディレクトリ名は任意の文字列で良いが、自分の場合はvyos-1.4.0とした。
Ubuntu Serverのリポジトリの実行タイミングは前回の記事と異なるものの、VyOSのビルドの下準備は完了となる。
尚、Ubuntu Serverのリポジトリの実行タイミングはパッケージのインストールの前と後のどちらでも良い。

user@jpmtkvmsv00:~$ mkdir vyos-1.4.1
user@jpmtkvmsv00:~$ cd vyos-1.4.1
user@jpmtkvmsv00:~/vyos-1.4.1$ 

 

VyOS 1.4.1 LTSのビルド

1.VyOSのソースコードの取得
VyOSのビルドの下準備が出来た。git cloneを実行しVyOSのソースコードを取得する。

user@jpmtkvmsv00:~/vyos-1.4.1$ git clone -b current --single-branch https://github.com/vyos/vyos-build
Cloning into 'vyos-build'...
remote: Enumerating objects: 13832, done.
remote: Counting objects: 100% (17/17), done.
remote: Compressing objects: 100% (12/12), done.
remote: Total 13832 (delta 8), reused 8 (delta 5), pack-reused 13815 (from 2)
Receiving objects: 100% (13832/13832), 8.18 MiB | 12.13 MiB/s, done.
Resolving deltas: 100% (8159/8159), done.
user@jpmtkvmsv00:~/vyos-1.4.1$ 

 
2.VyOSのビルド
VyOSのソースコードの取得後、ビルド用のディレクトリvyos-buildに移動し、docker runコマンドを叩きVyOSのビルドを実行する。
今回はVyOS 1.4をビルドする為、vyos/vyos-build:オプションはsagittaを指定する。
docker runコマンドを叩いた後はDocker環境に移行する為、プロンプトが変化する。

user@jpmtkvmsv00:~/vyos-1.4.1$ cd vyos-build
user@jpmtkvmsv00:~/vyos-1.4.1/vyos-build$ 
user@jpmtkvmsv00:~/vyos-1.4.1/vyos-build$ sudo docker run --rm -it --privileged -v $(pwd):/vyos -w /vyos vyos/vyos-build:sagitta bash
Current UID/GID: 1000/1000
vyos_bld@76a74bfc4085:/vyos$ 

 
続けて、build-vyos-imageスクリプトを走らせ、VyOSのビルドの続きを実行する。
前回実行時とは異なり、ファイル形式はgenericのみ指定可能でisoやaws-isoを指定するとエラーを吐きビルドが停止する。
アーキテクチャやバージョンの文字列等は前回と同様にユーザ側で指定が可能で、自分の場合はアーキテクチャはamd64、生成されるisoファイルのファイル名に付くバージョンの文字列は1.4.1-ltsを指定。
ビルドの完了まで長時間を要する。自分の環境では30分程で完了した。

vyos_bld@76a74bfc4085:/vyos$ sudo ./build-vyos-image generic --architecture amd64 --build-type release --version 1.4.1-lts
I: Checking if packages required for VyOS image build are installed
I: using build flavors directory data/build-flavors
I: Cleaning the build workspace
[2025-02-15 01:32:03] lb clean 
P: Cleaning chroot
:
省略
:
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
[2025-02-15 01:59:17] lb source 
P: Source stage disabled, skipping
P: Build completed successfully
vyos_bld@76a74bfc4085:/vyos$ 

  
build-vyos-imageスクリプトはVyOSのISOイメージをビルドする際に実行するツールで、さまざまなオプションの指定が可能である。今回はbuild-vyos-imageスクリプトのオプションとしてarchitecture、build-type、versionの3つを使用した。
オプションの一覧およびオプションの意味を以下に列挙する。
・architecture:ビルドするアーキテクチャを指定。amd64やaarch64など
・build-by:ビルドを実行した人の情報を指定。メールアドレスやユーザ名など
・debian-mirror:ベースとなっているOS(Debian GNU/Linux)のリパッケージのポジトリを別途指定
・debian-security-mirror:OSのセキュリティ関連のパッケージのリポジトリを別途指定
・pbuilder-debian-mirror:テスト用のビルド環境pbuilderの構築の為のリポジトリを別途指定
・vyos-mirror:VyOS向けパッケージのリポジトリを別途指定
・build-type:ビルドのタイプを指定。releaseなど
・version:ビルドするVyOSのバージョンを指定。1.4.1-releaseなど
・build-comment:コメントを残したい場合、このオプションを付けて記載
・build-hook-opts:ビルド時にプロセスを挿入する
・bootloaders:イメージに含めるブートローダを指定
・debug:デバッグのログ出力を有効化
・dry-run:ビルドの予行演習
・custom-apt-entry:特定のディレクトリにあるaptのエントリーを読み込ませる
・custom-apt-key:パッケージ認証時に使用するキーの一覧を管理する際に使用(現在非推奨)
・custom-package:ビルドに含めるカスタムパッケージを指定。例えばvimやzshなど
・reuse-iso:既存のISOファイルを使用し追加のイメージ形式を構築する際に指定
・disk-size:ISOフォーマット以外のイメージ形式のディスクサイズを指定
 
ビルドの完了後、lsコマンドを叩きbuildディレクトリの中を確認したところ、VyOS 1.4.0-epa2のisoファイルが生成された事が分かる。

vyos_bld@76a74bfc4085:/vyos$ ls build
auto                        chroot.files              live-image-amd64.contents          local
binary                      chroot.packages.all.info  live-image-amd64.files             manifest.json
binary.modified_timestamps  chroot.packages.install   live-image-amd64.hybrid.iso        vyos-1.4.1-lts-generic-amd64.iso
cache                       chroot.packages.live      live-image-amd64.hybrid.iso.zsync  vyos-1x
chroot                      config                    live-image-amd64.packages
vyos_bld@76a74bfc4085:/vyos$ 

 
Docker環境から抜けてbuildディレクトリ内のファイルを確認すると、VyOSのisoファイル(vyos-1.4.1-lts-generic-amd64.iso)がUbuntu Serverのホームディレクトリ内にあるbuildディレクトリ内にも有る事が確認出来る。

vyos_bld@76a74bfc4085:/vyos$ exit
exit
user@jpmtkvmsv00:~/vyos-1.4.1/vyos-build$ 
user@jpmtkvmsv00:~/vyos-1.4.1/vyos-build$ ls build
auto                        chroot.files              live-image-amd64.contents          local
binary                      chroot.packages.all.info  live-image-amd64.files             manifest.json
binary.modified_timestamps  chroot.packages.install   live-image-amd64.hybrid.iso        vyos-1.4.1-lts-generic-amd64.iso
cache                       chroot.packages.live      live-image-amd64.hybrid.iso.zsync  vyos-1x
chroot                      config                    live-image-amd64.packages
user@jpmtkvmsv00:~/vyos-1.4.1/vyos-build$ 

 

生成したisoファイルの吸い出し

1.VyOSのisoファイルの吸い出し
上記にて生成したVyOSのisoファイルをVirtualBoxのゲストOSとして動かしたい為、vyos-1.4.1-lts-generic-amd64.isoをFTPやSFTP等を使用しUbuntu Serverの中から吸い出す。
今回はSFTPを使用して、vyos-1.4.1-lts-generic-amd64.isoを自PCの適当なフォルダ内に保存する。

前回の記事ではUbuntu Serverの/etc/ssh/sshd_confファイルを編集したが、Ubuntu Serverを今後SFTPサーバとして運用する予定が無いのであれば、/etc/ssh/sshd_confファイルの編集の必要は無い。
生成したVyOSのisoファイルをホームディレクトリ内に移動させる。

user@jpmtkvmsv00:~/vyos-1.4.1/vyos-build$ mv build/vyos-1.4.1-lts-generic-amd64.iso /home/user/
user@jpmtkvmsv00:~/vyos-1.4.1/vyos-build$ 
user@jpmtkvmsv00:~/vyos-1.4.1/vyos-build$ cd
user@jpmtkvmsv00:~$ 
user@jpmtkvmsv00:~$ ls
vyos-1.4.1  vyos-1.4.1-lts-generic-amd64.iso
user@jpmtkvmsv00:~$ 

 
この後はSFTPクライアントもしくはSFTP接続が対応可能なFTPクライアントを使用し、Ubuntu Server内に保存されているVyOSのisoファイルを吸い出し、自端末などの適当なフォルダ内に保存する。
 

VyOS 1.4.1 LTSの動作確認

1.ビルドしたVyOSの動作確認
ビルドで生成されたVyOSのisoファイルを使用し、VirtualBoxにてVyOSの仮想マシンを作成する。その後は前回の記事にて扱ったCisco CSR1000vを使用しVyOSとの間でOSPFのネイバを張らせてみた。
当記事ではVyOSの仮想マシン作成手順とCisco CSR1000vの設定に関しては割愛する。

以下はVyOS 1.4.1 LTSのインストール直後の初回起動時の出力内容。
初期設定前の段階では、ユーザ名とパスワード共にvyosである。

vyos@vyos:~$ show version
Version:          VyOS 1.4.1-lts
Release train:    current
Release flavor:   generic

Built by:         root@76a74bfc4085
Built on:         Sat 15 Feb 2025 01:32 UTC
Build UUID:       bf4ab2ae-bce0-461c-bd4f-6b8a91a85da2
Build commit ID:  79ea85898b610d

Architecture:     x86_64
Boot via:         installed image
System type:      KVM guest
Secure Boot:      n/a (BIOS)

Hardware vendor:  innotek GmbH
Hardware model:   VirtualBox
Hardware S/N:     VirtualBox-117e6565-3c73-4991-9598-bf3d6cf9b0c0
Hardware UUID:    65657e11-733c-9149-9598-bf3d6cf9b0c0

Copyright:        VyOS maintainers and contributors
vyos@vyos:~$ 

 

以下は、VyOSの設定内容。
各インターフェースのPアドレス、OSPFとデフォルトルート、ホスト名とNTPサーバの設定を投入した。
投入時に弾かれたコマンドおよびcommitコマンドやsaveコマンド実行時のエラーの出力は発生せず、正常に設定投入が出来た。

vyos@jpmtkvmrt99:~$ show configuration 
interfaces {
    ethernet eth0 {
        address 192.168.3.99/24
        hw-id 00:0c:29:d2:5e:ba
        offload {
            gro
            gso
            sg
            tso
        }
    }
    ethernet eth1 {
        address 192.168.56.1/24
        hw-id 00:0c:29:d2:5e:c4
        offload {
            gro
            gso
            sg
            tso
        }
    }
    ethernet eth2 {
        address 192.168.57.1/24
        hw-id 00:0c:29:d2:5e:ce
        offload {
            gro
            gso
            sg
            tso
        }
    }
    loopback lo {
        address 10.1.1.99/32
    }
}
protocols {
    ospf {
        area 0 {
            network 10.1.1.99/32
            network 192.168.3.0/24
        }
        redistribute {
            connected {
            }
        }
    }
    static {
        route 0.0.0.0/0 {
            next-hop 192.168.3.1 {
                distance 10
            }
        }
    }
}
service {
    ntp {
        allow-client {
            address 127.0.0.0/8
            address 169.254.0.0/16
            address 10.0.0.0/8
            address 172.16.0.0/12
            address 192.168.0.0/16
            address ::1/128
            address fe80::/10
            address fc00::/7
        }
        server ntp.jst.mfeed.ad.jp {
            prefer
        }
    }
    ssh {
    }
}
system {
    config-management {
        commit-revisions 100
    }
    console {
        device ttyS0 {
            speed 115200
        }
    }
    host-name jpmtkvmrt99
    login {
        user vyos {
            authentication {
                encrypted-password ****************
                plaintext-password ****************
            }
        }
    }
    syslog {
        local {
            facility all {
                level info
            }
            facility local7 {
                level debug
            }
        }
    }
    time-zone Asia/Tokyo
}
vyos@jpmtkvmrt99:~$ 

 
VyOS側にてshow ip routeコマンドを叩き、VyOSが持っているルーティングテーブルを確認する。
WANのネットワーク192.168.3.0/24と、Cisco CSR1000vのLAN側のネットワーク192.168.58.0/24と192.168.59.0/24をOSPFを介して学習している事が分かる。
これらのネットワークをOSPFを介して学習しているという事は、OSPFの設定が正常に反映されていると言ってもいいだろう。

vyos@jpmtkvmrt99:~$ show ip route
Codes: K - kernel route, C - connected, L - local, S - static,
       R - RIP, O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,
       T - Table, v - VNC, V - VNC-Direct, A - Babel, F - PBR,
       f - OpenFabric, t - Table-Direct,
       > - selected route, * - FIB route, q - queued, r - rejected, b - backup
       t - trapped, o - offload failure

S>* 0.0.0.0/0 [10/0] via 192.168.3.1, eth0, weight 1, 00:06:56
O>* 10.1.1.98/32 [110/2] via 192.168.3.253, eth0, weight 1, 00:00:10
O   10.1.1.99/32 [110/0] is directly connected, lo, weight 1, 00:00:56
L * 10.1.1.99/32 is directly connected, lo, weight 1, 00:06:58
C>* 10.1.1.99/32 is directly connected, lo, weight 1, 00:06:58
O   192.168.3.0/24 [110/1] is directly connected, eth0, weight 1, 00:00:14
C>* 192.168.3.0/24 is directly connected, eth0, weight 1, 00:06:57
K * 192.168.3.0/24 [0/0] is directly connected, eth0, weight 1, 00:06:57
L>* 192.168.3.99/32 is directly connected, eth0, weight 1, 00:06:57
C>* 192.168.56.0/24 is directly connected, eth1, weight 1, 00:06:57
K * 192.168.56.0/24 [0/0] is directly connected, eth1, weight 1, 00:06:57
L>* 192.168.56.1/32 is directly connected, eth1, weight 1, 00:06:57
C>* 192.168.57.0/24 is directly connected, eth2, weight 1, 00:06:57
K * 192.168.57.0/24 [0/0] is directly connected, eth2, weight 1, 00:06:57
L>* 192.168.57.1/32 is directly connected, eth2, weight 1, 00:06:57
O>* 192.168.58.0/24 [110/2] via 192.168.3.253, eth0, weight 1, 00:00:10
O>* 192.168.59.0/24 [110/2] via 192.168.3.253, eth0, weight 1, 00:00:10
vyos@jpmtkvmrt99:~$ 

 
show ip ospf neighborコマンドを叩く。
VyOS側はOSPFネイバを認識出来ている事と、OSPFネイバ関係を確立出来ている事が確認出来た。

vyos@jpmtkvmrt99:~$ show ip ospf neighbor 

Neighbor ID  Pri State     Up Time   Dead Time Address         Interface           RXmtL RqstL DBsmL
10.1.1.98      1 Full/DR   23.935s     39.986s 192.168.3.253   eth0:192.168.3.99       0     0     0

vyos@jpmtkvmrt99:~$ 

 
 
今回はここまで。
VirtualBoxのゲストOSとして動作するUbuntu ServerにてVyOS 1.4.1 LTSのビルドを実行し、前回のVyOS 1.4.0-epa2とほぼ同じ手順で進める事が出来る事を確認出来た。build-vyos-imageスクリプトで指定するファイルフォーマットがgeneric以外指定出来なかった件を除き、当記事にて実施した手順の範囲内では前回と同じ内容であった。
また、ビルドで生成されたVyOSのisoファイルをUbuntu Serverから吸い出し、VirtualBoxで仮想マシンとして立ち上げて他のゲストOSとの間でOSPFのネイバ関係を確立するところまで確認出来た。
VyOSのサブスクリプション契約が無い状態で、使用感や設定内容やスループットなどがどこまで商用版と同じであるか、今回ビルドしたVyOS 1.4.1を使って検証したい。(...と前回の記事でも書いたが、暫くの間ネタ切れでブログ記事として書く事が無い状態だったらやってみたいというスタンスで。)
 

以下の画像はVyOSプロジェクトのトップページ。5年程前と比べるとかなり洗練されてきた。


 
 

参照サイト
https://vyos.io/ VyOS - Open source router and firewall platform
https://docs.vyos.io/en/sagitta/contributing/build-vyos.html VyOS User Guide
https://blog.vyos.io/vyos-1.4.1-release VyOS 1.4.1 release
https://debslink.hatenadiary.jp/entry/20240406/1712367184 Dockerを使ってVyOS 1.4.0-epa2をビルドした
https://qiita.com/shihou-ono/items/2a902183111f4dce2193 vyosをまたisoからbuildした
 

関連記事
https://debslink.hatenadiary.jp/entry/20220213/1644755282 DebianにFRRを実装しVyOSごっこをやってみた
https://debslink.hatenadiary.jp/entry/20220211/1644579656 VyOSでIPsec VTI構成を組んでみた
https://debslink.hatenadiary.jp/entry/20220131/1643632170 VyOSの中に保存されているファイルを吸い出す
https://debslink.hatenadiary.jp/entry/20220130/1643510508 VyOSでGRE over IPsec VPN構成を組んでみた