VyOS v1.3をv1.4にアップグレードしてつまづいた

オープンソースのルータOSであるVyOSのバージョンを1.3から1.4に
アップグレードする際に2つほどエラーが発生したのでそれについて.

VyOS のアップデート手順

基本的に新しいバージョンのイメージをダウンロードして切り替えることで
アップグレード/ダウングレードがかんたんにできるようになっています.
ネットワーク機器と似た仕組みでとても便利です.

現在のバージョンとイメージの確認.

1
2
3
4
5
6
7
8
9
10
11
$ show version
Version: VyOS 1.3-rolling-2020xxxxxxxx
Release Train: equuleus

~ ~ ~

$ show system image
The system currently has the following image(s) installed:

1: 1.3-rolling-2020xxxxxxxx (default boot) (running image)
2: 1.3-rolling-2020xxxxxxxx

現在のコンフィグのバックアップを一応しておきます.
コンフィグの出力はよくあるコンフィグファイルだけでなくコマンド設定用の出力も可能です.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ set terminal length 0
$ show configuration commands
set firewall all-ping 'enable'
set firewall broadcast-ping 'disable'

~ ~ ~

$ configure
# show
firewall {
~ ~
}

#

イメージのダウンロードをします.
毎日イメージがビルドされているのですが基本的な最新版の URL で追加します.
VyOS nightly builds
追加時に設定を引き継ぐかなどのプロンプトが出てくるのでよしなに設定します.
(普通は引き継ぐと思われますが)

1
2
3
4
5
$ add system image https://s3-us.vyos.io/rolling/current/vyos-rolling-latest.iso

~ ~ ~

$

イメージが追加されて起動時のバージョンが変わっています.

1
2
3
4
5
6
7
$ show system image
The system currently has the following image(s) installed:

1: 1.4-rolling-2022xxxxxxxx (default boot)
2: 1.3-rolling-2020xxxxxxxx (running image)
3: 1.3-rolling-2020xxxxxxxx
$

再起動すれば新しいバージョンに変わっています.

1
2
3
4
5
$ reboot

~ ~ ~

$

アップグレード時に問題となった点

以下の2点です.

  • zone-policyのコマンドが変わっていた
  • firewallの設定がエラーで反映できない

zone-policyのコマンドが変わっていた

これは単純にzone-policy zone <name>からfirewall zone <name>に変わりましたと
アナウンスがあるのでバックアップしたコンフィグをもとに書き換えるだけです.
Zone Based Firewall
単純に置き換えるだけで設定ができたので問題はありませんでした.

firewallの設定がエラーで反映できない

1つめの問題点を反映しようと,firewallのコンフィグを追加し,commitしたところ,
以下のエラーが出てきて変更点が反映されませんでした.
Error: No such file or directory; did you mean table ‘vyos_filter’ in family ip? delete table ip6 vyos_filter

VyOSは様々な(ソフトウェアルータ向けの)ソフトウェアの設定ラッパーとして動作しているのが基本です.
そこでそのエラーを出力している元のソフトウェアnftablesを直接操作し解決しました.

VyOSが設定するときに‘vyos_filter’と呼ばれる項目をまず削除しようとすることが
テンプレートファイルから読み取ることができます.
vyos-1x/data/templates/firewall/nftables.j2

なぜかそのフィルターが存在していないことが問題なのでとりあえずどうでもいいので
その項目を増やしてあげることで削除でのエラーがでなくなりVyOSの設定を反映する事ができるようになりました.

1
2
$ sudo nft add table vyos_filter
$ sudo nft add table ip6 vyos_filter

バージョン1.4から1.4へのアップグレード時にはこの問題は発生しなかったため,
1.3からという特定の状況下で発生するものと思われます.

まとめ

VyOSはルータOSとして様々なソフトウェアを一括で設定する事ができるので,
とても便利なものではあるのですがいざ問題が起きた場合にはエラーの特定が
少し難しいと感じました.
内部でAnsibleを使用しているのでそこの理解に時間がかかりました.
詳しければPRなどしたいのですがそこまでの知識がないため今回は記事として残しました.

関連記事