今回は fnOS の仮想マシンに ImmortalWrt を入れたときの記録で、実機のルーターに焼く話ではない。イメージの選び方も起動方式も NIC の設定も別物だから、仮想マシンの手順をそのまま家のルーターに当てはめるわけにはいかない。
ファームウェアの選び方
ImmortalWrt ダウンロードサイト か ファームウェアセレクター で、デバイスと対象プラットフォームを確認する。今回の構成は x86-64 の仮想マシンで、UEFI 起動ならそれに対応した combined-efi ディスクイメージを選ぶ。EXT4 と SquashFS も実際の用途に合わせて選ぶこと。
実機ルーター用の factory や sysupgrade イメージには、それぞれ対応するデバイスの範囲がある。ファイル名に OpenWrt と入っていても、どんな機器にでも焼けるわけではない。

説明図:x86 仮想マシン用イメージは、実機ルーターのファームウェアとは別物
仮想マシンの作成
合った仮想マシンのアーキテクチャとファームウェアの起動方式を用意し、解凍したディスクイメージをインポートするかシステムディスクとして使う。まず本番の LAN には繋がない。NIC は隔離したテストネットワークに接続して、デフォルトの DHCP や IPv6 RA、ゲートウェイの重複で既存のネットワークに影響が出ないようにする。

fnOS の画面:ImmortalWrt の仮想マシンを作成
これは fnOS の仮想マシン作成画面だ。操作の入口を示すもので、新しいバージョンの画面で全く同じ項目があるとは限らない。CPU、メモリ、ディスク、NIC は今のホストのリソースに合わせて設定する。
まずコンソールで起動して、システムが実際に認識している NIC とネットワーク設定を確認する。
ip link
uci show network
uci show dhcp
/etc/config/network を丸ごと上書きしたり、eth0 から eth3 まで NIC が4枚あると決めつけたりしないこと。そんな書き方をすると、管理用ネットワークを簡単に切ってしまう。
LAN アドレスは必要な部分だけ変える
まず現在の設定に本当に network.lan があるか確認してから、UCI でそのアドレスを変更する。以下のアドレスはあくまで例なので、実際のネットワークで使われていないアドレスに置き換え、ゲートウェイの設計とも揃えること。
cp /etc/config/network /etc/config/network.before-lan-change
uci set network.lan.ipaddr='192.168.10.2'
uci set network.lan.netmask='255.255.255.0'
uci commit network
/etc/init.d/network restart
ネットワークを再起動すると元の管理接続は切れるので、コンソールは開いたままにしておく。管理用の PC も新しいセグメントに到達できる必要がある。画面を開きたいからといって、ついでに WAN やブリッジのメンバー、VLAN まで変えないこと。
すでにメインルーターがあるネットワークにサイドルーターとして入れるなら、まず隔離した環境で LAN 上の DHCP と IPv6 通告のポリシーを確認する。2台の機器が計画なしに同じ LAN へ同時にアドレスを配るのは避ける。メインルーターにするなら、WAN と LAN の仮想 NIC、ホスト側のブリッジを先に区別してから配線して試す。
iStore のインストール
iStore の公式プロジェクト に、現在のアーキテクチャと依存関係の範囲が書かれている。まずシステムが apk と opkg のどちらを使っているか確認し、違うバージョンのソフトウェアソースを混ぜないこと。
公式のインストール手順に従って該当するパッケージインデックスを更新したら、インストーラーをダウンロードし、中身を確認してから実行する。
cd /tmp
wget https://github.com/linkease/openwrt-app-actions/raw/main/applications/luci-app-systools/root/usr/share/systools/istore-reinstall.run
less istore-reinstall.run
chmod 755 istore-reinstall.run
./istore-reinstall.run
less がなければ、使えるテキスト閲覧ツールで確認する。インストールでエラーが出たら、まずアーキテクチャ、ソフトウェアソース、依存関係を見る。他のファームウェアから持ってきたパッケージをそのまま上書きインストールしたりはしない。
PassWall やロードバランシングのプラグインを入れたとき、いまひとつ効いていないように見えることがあった。その後、手動で上書きインストールを試したこともある。これは当時のファームウェアでの話で、今のすべてのバージョンに同じ不具合があるわけではないし、上書きインストールを万能の修復手段にするべきでもない。
参考:ImmortalWrt、ファームウェアダウンロード、iStore。新しいバージョンの手順はドキュメントで確認したもので、あなたの fnOS 上で仮想マシンを再構築したわけではない。