目次
今のルーターは Alpine Linux + apu2d4 で動いていて、これが結構性能もカスタマイズ性も良くてすっかり馴染んでしまった。でも始めてルーター作ったこともあってIPv6が使えなかったり構築方法をちゃんとまとめられてなかったりしていたので、今回はちゃんとブログに書き残しておこうと思う。
やりたいこと
- Alpine 3.18系に更新
- iptables から nftables に移行
- IPv4/v6 デュアルスタック対応
- LANポート減るのでタグVLAN使う
- 自分用 apk リポジトリを作る(必要なら)
まず Alpine Linux は最新のものを使いたい。今は 3.15 を使っているが、これは今年で EOL になるし、更新するには良いタイミング。iptables は最近は nftables に置き換わっており、ip6tables も統合されているとのことなので採用する。今のルーターは知識不足で IPv4 (IPv4 over IPv6) しか対応しておらず、IPv6 のサーバーに接続することができないので、これも再チャレンジしたい。
今回ハードウェアは HUNSN RJ12 という深センのメーカーのミニPCを採用した。これは 2.5 GbE ポートが2個ついていてルーターにうってつけなのだけど、LANポートが3個あった apu2d4 からポートが2個に減ることになるので、タグVLANを使うことにする。1 GbE のポート2個を1個の 2.5 GbE ポートにまとめるわけだから、帯域的には問題ないはずだ。たぶん。

また監視には Mackerel を使っていて、ルーターにも mackerel-agent を入れたい。Alpine 用のパッケージは公式からは配布されていないので、自分で apk パッケージを作る必要がある。自分で使う apk パッケージは自分でリポジトリ立てた方がアプデ等の運用がやりやすそうなので、余力があればオレオレリポジトリの構築も視野に入れたい。
準備その1 ディスクレスモードのインストール
Alpine は Live CD みたいに RAM ディスク上にシステムを展開してブートするモードがあり、disk-less mode と呼ばれている。この機能のおかげで、商用ルーターのように設定を保存せずに再起動して元に戻す、といったことが簡単に実現できる。私が Alpine で気に入ってる機能の一つだ。
setup-bootable コマンドを使うと、Live イメージを指定したディスクにインストールすることができる。まずUSBメモリに Alpine Linux の Live イメージを書き込み、USBポートにつないでブートする。
ブート用領域の確保
USBメモリからブートする運用でもいいのだけど、RJ12 は USB ポートが2つしかないのでブートイメージを内蔵のNVMeディスクにインストールすることにした。ディスクレスと言いつつディスク使ってるので、厳密にはディスクレス・インストールとは言えない気がするが、それは置いておく。
最初 fdisk を使って MBR でパーティションを切ろうとしたけどうまくいかなかったので、GPT パーティションを作成できるようにまず cfdisk をインストールする。インストールにはインターネット接続が必要なので、とりあえず eth0 に LAN ケーブルをつないで setup-interfaces を実行する。
# setup-interfaces
# ifup eth0
次に setup-apkrepos を実行して公式リポジトリへのアクセスを設定したのち、cfdisk をインストールする。
# setup-apkrepos
# apk add cfdisk
HUNSN RJ12 は出荷状態で pfSense plus がインストールされている。今回はこれを Alpine に置き換えるので、以下のコマンドでパーティションテーブルをクリアして新規 GPT パーティションテーブルを作成する。
# cfdisk -z /dev/nvme0n1
パーティションは以下のような構成にした。
デバイス名 | ファイルシステム | 容量 | マウントポイント |
/dev/nvme0n1p1 | swap | 8G | swap |
/dev/nvme0n1p2 | vfat | 32G | /media/nvme0n1p2 |
パーティションを作成したらファイルシステムを作成する。
# mkswap /dev/nvme0n1p1
# mkfs.vfat /dev/nvme0n1p2
/etc/fstab にマウント設定を追加する。
# 以下を /etc/fstab に追加
/dev/nvme0n1p2 /media/nvme0n1p2 vfat defaults 0 0
マウント先のディレクトリを作成する。
# mkdir /media/nvme0n1p2
ブートイメージのインストール
ここまで準備できたら、以下のコマンドでブートイメージを /dev/nvme0n1p2 に書き込む。
# setup-bootable -v /media/usb /dev/nvme0n1p2
エラーなくコマンドが終了したら、poweroff して USB メモリを抜いて、再び電源ON。USB メモリを挿しているときと同じように Alpine Linux がブートすればインストール成功である。
準備その2 lbu の設定
Alpine Linux をディスクレスモードでインストールした場合、ルートディレクトリが RAM ディスク上に展開されるため、電源OFFするとファイルの変更がすべて失われる。lbu (Alpine Local Backup) を設定すると、/etc 以下の変更を USB メモリ等の外部ディスクに保存して、次回ブート時に自動的に読み込ませられるようになる。またインストールする apk パッケージのキャッシュも保持できるようになる。
vfat でフォーマットしたUSBメモリを挿して、以下のコマンドで lbu と apk キャッシュ用のディスクを設定する。
# setup-lbu
# setup-apkcache
以降、lbu commit
を実行するたびに、ファイルの変更が USB メモリに記録される。例えば以下のようにホスト名を変更した後に lbu commit すれば、再起動後も設定が保持される。
# setup-hostname
# lbu commit
スワップの設定
まず以下のように /etc/fstab にスワップ領域のエントリーを追加する。
# 以下を /etc/fstab に追加
/dev/nvme0n1p1 swap swap defaults 0 0
swapon -a
して free -m
で、スワップ領域を認識したことを確認する。
# swapon -a
# free -m
ディスクレスモードの場合、スワップ領域は自動的にマウントされない。以下のコマンドでブート時にマウントするように設定して、lbu commit で設定を保存する。なお lbu ci は lbu commit のエイリアスである。
# rc-update add swap default
# lbu ci
次回
ここまでで、HUNSN RJ12 に Alpine Linux をディスクレスモードでインストールして、ブートすること、lbu で設定が保存できることを確認した。次回は VLAN と IPoE 接続の設定をやってみたいと思う。
追記:次回のやつ書きました
Tweet
One Reply to “Alpine Linux でルーター構築 2023 準備編”