
ProxmoxのLXCコンテナでOpenWrtを使う

ここんとこProxmox上でいろんなマシンを作ったり壊したりしてます。
それについてはネタとしてまとめるとして、Proxmoxの中でソフトウェアルーターのOpenWrtを使うにはどうしたらいいのかと考えていました。
Proxmoxを使っているなら、ほとんどの場合はProxmoxのブリッジとVLANで解決できると思いますが、使い方を忘れてしまったりルーターとしてあると管理をする上で使いやすいので実験としてインストールしてみました。
Proxmoxの中でOpenWrtを使う方法を調べると2つあって、1つはOpeWrtからx86用のディスクイメージをダウンロードして、それを仮想マシンのイメージとしてインポートして使う方法。もう1つは、Linux Containersが毎日ビルドしているOpenWRTのイメージをLXCコンテナとして使う方法があるそうです。
インストールしてみた系の記事としてはVMを使う記事が多いけれど、コンテナのほうがオーバーヘッドが少ないので自分はコンテナを使ってみました。
コンテナイメージのダウンロード
LXDがCanonicalに移管されたりいろいろあったのでLinux ContainersのデイリービルドイメージのURLがわからなくなっていますが、OpenWrtのイメージはこちらにあります。
ここに直近3日間にビルドされたイメージがあるので最新の日付ディレクトリの中にあるrootfs.tar.xz
のURLをコピーします。Proxmox上からダウンロードするのでURLをコピーするだけでOKです。
URLは、https://images.linuxcontainers.org/images/openwrt/23.05/amd64/default/(日付)_11:57/rootfs.tar.xz
という形になります(2023/02/03時点)。
URLをコピーしたらProxmoxの画面を開いて、[データセンター]→[(ノード)]→[ストレージlocal]の「CTイメージ」から「URLからダウンロード」を開きます。
「URLからダウンロード」のダイアログには、URLにコピーしたrootfs.tar.xzのURL、ファイル名には保存するコンテナのファイル名を入力します。
ファイル名についてはどんな名前でもかまいませんが自分は、いつダウンロードしたかわかるようにURLにあるバージョンと日付を入れてopenwrt-23.05_default_20240131_amd64.tar.xz
のように付けました。
これでダウンロードボタンを押せばProxmoxにダウンロードされます。
コンテナの作成
次にイメージを使ってコンテナを作りますが、「CTを作成」ボタンからコンテナを作成できません。なのでProxmoxノードのシェルからpctコマンドで以下のようにしてコンテナを作成します。
pct create 501 /var/lib/vz/template/cache/(ダウンロードしたファイル名) --arch amd64 --hostname openwrt --rootfs local-lvm:4 --memory 512 --cores 1 --ostype unmanaged --unprivileged 1
おもなコマンドオプションを説明すると、501
はコンテナ番号、--hostname
はコンテナのホスト名、--rootfs local-lvm:4
はコンテナのサイズで自分は4GBにしてます。
--ostype unmanaged
はOSタイプの指定ですが、GUIからunmanaged
タイプは作成できないので、コマンドを使う必要があります。
--unprivileged 1
は特権コンテナにするかどうかで、LXCコンテナは特権コンテナにしていないとハマることが多かったので特権アリにしています。
コンテナを作成すると、それ以外の設定はGUIから操作できるので、残りの設定はGUIから設定してください。
GUIから設定する必要があるものは、「ネットワーク」からネットワークデバイスを追加することと「オプション」にある「機能」から特権に必要な権限を有効にするぐらいだと思います。
コンテナのネットワークデバイスについて
コンテナのネットワークデバイスについてですが、IPアドレスを指定する必要はありません。ネットワークのデバイス名とブリッジだけ設定すればOKです。
LANポートが複数ある場合は、外側にするポートのデバイス名eth0
にして外側ネットワークポートのProxmoxブリッジvmbr0
を指定。そして内側にするポートはデバイス名をeth1
にして、内側ネットワークにするProxmoxブリッジvmbr1
を指定します。
コンテナのネットワークを設定
コンテナを起動しますが、コンテナイメージにはLAN側のネットワーク設定が無いのでOpenWrtのWebインターフェースにアクセスできません。ですので、アクセスするための必要最低限の設定をします。
ネットワークの設定方法は、下のOpenWrtのuciコマンドで設定を流し込むバッチスクリプトをコピーします。ネットワークデバイスの名前、IPアドレスとネットマスクは自分の環境に合わせて変更してください。
uci batch <<EOL
add network device
set network.@device[0].name='br-lan'
set network.@device[0].type='bridge'
set network.@device[0].ports='eth1' # 環境に合わせて変更する
set network.lan='interface'
set network.lan.device='br-lan'
set network.lan.proto='static'
set network.lan.ipaddr='192.168.1.1' # 環境に合わせて変更する
set network.lan.netmask='255.255.255.0'
EOL
uci commit
service network restart
続いて、起動したコンテナの「コンソール」を開きます。そしてコンソール画面でEnterキーを押すとシェルの画面になるので、コピーしたバッチスクリプトを貼り付けます。
これでスクリプトのIPアドレスにアクセスするとOpenWrtの設定画面に入れるので、通常通りOpenWrtの設定をします。
まとめ
実を言うと最初は勘違いからOpenWrtをインストールしようとしていた(なので冒頭にお断りを書いた)けど、これはこれでいいんじゃないでしょうか。あとで書くけど派生のネタもできたので、とりあえずヨシッということで。