前回の記事の続き。だいぶ準備が長かったけど、ようやくやりたいことができる。
LXCイメージの入手
今回、実は一番難しかったというか時間がかかったのがOpenWrtを動かすところ。結果としては公式のユーザガイドに従えばよかったのだけど、LXCとは何かの理解が浅くて変なブログ記事を徘徊したりしてだいぶ迷った。
正解は、単純明快。公式のイメージを入手してそれを動作させるだけ。公式のユーザガイドは巨大な文書なのでどこから読めば良いのか迷うけれども、右側のほうに表示されている目次の中にRunning OpenWrt in a virtual machine or conatinerと呼ばれる章があり、そこに記載されている。そこに飛ぶとさらに小目次があり、その中にOpenWrt in LXC containersがある。
ここで書かれている操作手順は、通常のLXC環境を前提としているので、proxmoxの場合、rootfsをテンプレートイメージとして独自の設定/手段でインストールすることになる。
最初の難関は、LXCイメージの入手。マニュアルだと、イメージサーバからlxc_create -dオプションでダウンロードすることになっているが、proxmoxだと順序が異なり、rootfsを入手してからになる。イメージサーバのページには、Jenkinsのビルディングサーバへのリンクが記載されているため、そこからLXCイメージを入手することになる。
JenkinsのLXCビルドサーバに行き、openwrtのページに行くとdaily buildの結果が表示されている。ここで、22.03/arm64を選択してそこからイメージをダウンロードする。

ここで、proxmoxのテンプレートとして利用できるのはrootfs.tar.xzになる。これをGUI上でダウンロードして適当な名前に変更して保存する。

これで正しいイメージを入手できた。
コンテナの作成と設定
このテンプレートイメージからコンテナを作成していく。これが第二の難関、というのもここではunmanagedと呼ばれるos typeを利用して作成することになるのだが、作成にGUIは利用できず、コンソールも利用できなくなるからである。
$ sudo pct create 105 /var/lib/vz/template/cache/openwrt-22.03-lxc.tar.xz --arch aarch64 --hostname openwrt --rootfs local-lvm:16 --memory 2048 --cores 4 --ostype unmanaged --unprivileged 1
ここで、createの後の105はIDなので、環境に合わせて変更する。その次の引数はテンプレート。テンプレートはほかの指定方法もあるけれども、今回はファイルパスでそのまま指定している。次の引数はアーキテクチャ指定。Orange Piの場合はaarch64、次はホスト名。これも環境に合わせて変更。rootfsのlocal-lvm:16はGB単位での指定。正直、OpenWrtはプアなルータ機器に入れる想定なので、1GiBでも十二分すぎたかもしれない。メモリ、コアの指定。次のostypeが重要でここをunmanagedにする必要がある。最後は非特権コンテナの指定。
うちの環境は上流1Gbps、下流2.5Gbps、特に大してトラフィックも流さないので、めちゃくちゃリソースは余っている。1日動かした感じだとメモリは最大で8MiB程度、CPU使用率は0.9%(4core)くらいであった。ただし、これからいろいろな設定を入れると多少は使うのかもしれない。

後でもよいのだが、起動する前にネットワークの設定をしておく。
WAN側とLAN側で使うIFを決め、ブリッジを利用しておく。Orange Pi 5 PlusでDebianを動かすと私の環境では、enP3p49s0とenP4p65s0が、割り当てられていた。ここで、どちらをWAN、どちらをLANに割り当てるのかを決定し、GUI上で、Linuxブリッジをそれぞれに割り当てて作成しておく。vmbr0(LAN)、vmbr1(WAN)で作成した。vmbr0には、LAN側でホストに割り振ったアドレス設定を入れておく。

次に、コンテナ側のネットワーク設定で、eth0にWAN、eth1にLANを設定しておく。WAN側は私の環境だとdhcp、LAN側はデフォルトゲートウェイとなるルータアドレスになるのだが、今は別のIPをとりあえず振っておいた。(まだ、元のルータが稼働しているため)

OpenWrtの起動と設定
イメージを正しく選択できていると起動はたぶん問題ない。ただし、次が最大の難関。知らないとまずクリアできない。コンテナ設定でネットワーク設定をしても残念ながらunmanagedなので、コンテナの中には反映されない。また、コンテナ内のネットワーク設定はまだされていないので、管理Web画面にアクセスすることはできない。さて、どうするか。
正解は、ホストからコンテナに接続すること。
$ sudo pct enter 105 BusyBox v1.35.0 (2023-04-27 20:28:15 UTC) built-in shell (ash) / #
105はIDなのでここは適宜変更する。これで動作中のOpenWrtを操作することが可能になった。ここからは、OpenWrtの知識の問題。
/ # cat /etc/config/network config interface 'loopback' option proto 'static' option ipaddr '127.0.0.1' option netmask '255.0.0.0' option device 'lo' config interface 'wan' option proto 'dhcp' option device 'eth0' config interface 'wan6' option proto 'dhcpv6' option device 'eth0'
初期設定ではこのようになっている。ここで、以下の設定を追加する。
config interface 'lan' option proto 'static' option netmask '255.255.255.0' option device 'eth1' option ipaddr 'xxx.xxx.xxx.xxx'
ここでipaddrにコンテナ設定で認識させたアドレス/netmaskを登録しておく。これでホストから見たコンテナのIPとコンテナ内の設定が一致し、無事管理画面へのアクセスが可能になる。あとは、passwdコマンドでrootのパスワードを変更しておき、http://<ipaddr>/ へアクセスすると無事ログイン画面が表示し、OpenWrtのGUI操作が可能になる。

この状態でログインすると先ほど設定した/etc/config/networkの設定に応じて適切な初期設定がされる。画面キャプチャは取っていないのだけど、Network→Interfacesの画面にアクセスすると「初期化する」みたいな表示が出て、無事OpenWrtの設定画面となる。Systemで、ホスト名、説明、タイムゾーン、時刻同期などを初期設定した後、NVR-500を一旦停止し、デフォルトゲートウェイアドレスに設定した上で入れ替えた。
DHCPの停止
デフォルトではDHCPが有効になっている。もともと移行のために、ルータからWiFiアクセスポイントにDHCPサーバを移管していたので、DHCPは不要、というか、自宅環境だと有線機器は、ほとんど固定IPを割り振っているため、機器メンテのためにもこの方が望ましい。ということでDHCPを停止させたが、OpenWrtではこの画面の場所がわかりづらい。正解はNetwork→Interfacesから、lanのインタフェースを選択し、Editを押下してDHCP Serverのタブを選ぶ。DHCP&DNSからではたどれない。ということで忘れそうなのでメモしておく。

これで一旦動くようになった。NVR-500で設定してた外部接続周りの設定は一旦リセットされてしまったけど、まあ、インターネット閲覧だとこれで一旦動くのであとは別の日にやることにする。
コメントを残す