バッファローのWXR-2533DHPはOpenWrt化におすすめのルーターでお気に入りです。
かつて、容量が足りなくなったのでUSBメモリを使って容量拡張(ExtRoot化)しようとしたら、何度やってもUSBメモリをマウントできませんでした。
当時はネット上の情報では「ubiだからダメ」とか「カーネルにバグがある」など言われており、私もあきらめていたのですが・・・
OpenWrtを24.10に上げたところあっけなくExtRoot化できてしまいました。
せっかくなのでWXR-2533DP(無印)をUSBメモリで容量拡張(ExtRoot化)したうえで、普段なら大きすぎてインストールできないdockerパッケージをインストールし、OpenWrtルーターをdockerサーバー化していきたいと思います。
「OpenWrt環境でdockerサーバー環境を構築」です。
WXR-2533DHPでextroot化ができた!dockerを動かしたい!
WXR-2533DHPをUSBメモリで容量拡張(ExtRoot化)
以前、OpenWrt23.05でWXR-2533DHPをExtRoot化しようとしたのですがうまくできませんでした。
ネット上では「ubiだからムリ!」とか「カーネルにバグがある」とか言われていたのですが、私にはよくわからないのであきらめていました。
ところがOpenWrt24.10にあげてみると、いとも簡単にWXR-2533DHPをUSBメモリを使って容量拡張できてしまいました・・・
OpenWrtでdockerを動かす!
さて、WXR-2533DHPで容量拡張できたわけで、以前からやってみたかった「OpenWrtでdockerを動かす」をやってみます。
OpenWrtではdockerパッケージも配布されています。
仮想マシンなどを使っての「x86_64版」などで大きな容量を作り、そこにdocker環境を構築する・・・といったことはできていたのですが、通常物理ルーターには容量が大きすぎてインストールできません。
今回、比較的高性能なWXR-2533DHPでUSBメモリを使った容量拡張(ExtRoot化)ができたので、さっそくdockerを入れてみました。
本記事でやってみること
ということで、本記事では以下のことをやってみます。
- WXR-2533DHPをUSBメモリで容量拡張(ExtRoot化)
- OpenWrtへdocker環境を構築
- WireGuard環境をdockerで構築
WXR-2533DHPをUSBメモリ(USB-SSD)で容量拡張
OpenWrtルーターはそもそもメーカーが自社の純正ファームウェアが動く程度のスペックで製造されているので、OpenWrt化してもあまり多くのパッケージをインストールできません。
この対処としてUSBメモリを使って容量拡張するのがExtRoot化であり、USBポートがついたルーターであれば大体簡単な手順でExtRoot化することができます。
WXR-2533DHPではOpenWrt23.05まではなぜかExtRoot化ができませんが、OpenWrt24.10ではいつもの手順でExtRoot化が可能となっていました。
Extroot化の基本的な手順などはOpenWrt公式で説明されています。
Extroot configuration | OpenWrt
公式サイトの手順を参考にしながら、バッファローWXR2533DHP(無印)をUSBメモリ(16GBを利用)で容量拡張(ExtRoot化)していきます。
STEP① 必要な準備作業
ソフトウェアのインストール
まず、USBメモリを使うために必要なパッケージをインストールします。
## 必要なパッケージをインストール
opkg update
opkg install block-mount kmod-fs-ext4 e2fsprogs kmod-usb-storage gdisk usbutils
容量拡張(ExtRoot化)の目的確認
容量拡張前に、現時点(拡張前)の状況および本記事の目的を確認しておきます。
root@OpenWrt:~# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/root 4352 4352 0 100% /rom
tmpfs 238204 1264 236940 1% /tmp
/dev/ubi0_2 44612 5004 37288 12% /overlay
overlayfs:/overlay 44612 5004 37288 12% /
tmpfs 512 0 512 0% /dev
root@OpenWrt:~#
上記のように、WXR-2533DHPの標準状態では全要容量(“/”ルート)には44612KB(約40MB)が割り当てられています。
本記事の目的「USBメモリにより容量拡張する」とは上記”/”(ルート=”/overlay”)の容量を大きくすることです。
そしてその大きな容量をUSBメモリの容量を割り当てられるようにする、というのが本記事「USBメモリによる容量拡張」の目的です。
USBメモリの接続確認
ルーターにUSBメモリをセットし、USBメモリの接続状況を確認します。
root@OpenWrt:~# lsusb -t
/: Bus 001.Port 001: Dev 001, Class=root_hub, Driver=xhci-hcd/1p, 480M
/: Bus 002.Port 001: Dev 001, Class=root_hub, Driver=xhci-hcd/1p, 5000M
/: Bus 003.Port 001: Dev 001, Class=root_hub, Driver=xhci-hcd/1p, 480M
/: Bus 004.Port 001: Dev 001, Class=root_hub, Driver=xhci-hcd/1p, 5000M
|__ Port 001: Dev 002, If 0, Class=[unknown], Driver=usb-storage, 5000M
root@OpenWrt:~# ls -l /dev/sd*
brw------- 1 root root 8, 0 Jan 1 1970 /dev/sda
brw------- 1 root root 8, 1 Jan 1 1970 /dev/sda1
root@OpenWrt:~#
上記のように「lsusb -t」コマンドでUSBメモリが”Driver=usb-storage”として接続されていることを確認します。
また、そのUSB「/dev/sd*(本記事では”sda”)」として認識されていることを確認します。
STEP① USBメモリ(USB-SSD)をフォーマットする
では、このUSBメモリをOpenWrtで使えるようにしていきます。
具体的には「新しいパーティションの作成」「フォーマット」です。
USBメモリ(USB-SSD)をGPTで初期化しパーティションを作成
まず、USBメモリをいったん全削除し、新しいパーティションを作成します。
新しいパーティションは本記事ではUSBメモリの全容量を割り当てます。
パーティションの作成は「gdisk」コマンドの対話型で行い、その実行ログは以下のようになります。
root@OpenWrt:~# gdisk /dev/sda
GPT fdisk (gdisk) version 1.0.10
Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present
Found valid GPT with protective MBR; using GPT.
## 現在のパーティション状況を確認する("p"コマンド)
Command (? for help): p
Disk /dev/sda: 30183424 sectors, 14.4 GiB
Model: USB Flash Disk
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): 687B5CD4-B8E9-428E-B262-AC0B83970FCA
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 30183390
Partitions will be aligned on 2048-sector boundaries
Total free space is 4029 sectors (2.0 MiB)
Number Start (sector) End (sector) Size Code Name
1 2048 30181375 14.4 GiB 8300 Linux filesystem
## すでにパーティションが存在する場合は削除("d"コマンド)
Command (? for help): d
Using 1
## パーティションが削除されたことを確認("p"コマンド)
Command (? for help): p
Disk /dev/sda: 30183424 sectors, 14.4 GiB
Model: USB Flash Disk
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): 687B5CD4-B8E9-428E-B262-AC0B83970FCA
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 30183390
Partitions will be aligned on 2048-sector boundaries
Total free space is 30183357 sectors (14.4 GiB)
Number Start (sector) End (sector) Size Code Name
## 新しいパーティションを作成("n"コマンド)
## USBメモリ全容量を使うのですべて初期値のままにする
Command (? for help): n
Partition number (1-128, default 1): 1
First sector (34-30183390, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-30183390, default = 30181375) or {+-}size{KMGTP}:
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'
## 作成したパーティションを確認("p"コマンド)
Command (? for help): p
Disk /dev/sda: 30183424 sectors, 14.4 GiB
Model: USB Flash Disk
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): 687B5CD4-B8E9-428E-B262-AC0B83970FCA
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 30183390
Partitions will be aligned on 2048-sector boundaries
Total free space is 4029 sectors (2.0 MiB)
Number Start (sector) End (sector) Size Code Name
1 2048 30181375 14.4 GiB 8300 Linux filesystem
## 内容をUSBメモリへ反映する("w"コマンド)
Command (? for help): w
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sda.
The operation has completed successfully.
root@OpenWrt:~#
以上でUSBメモリへ新しいパーティションを作成しました。
USBメモリ(USB-SSD)をext4でフォーマットする
次に、作成したパーティションを”ext4″でフォーマットします。
## USBメモリデバイスを確認
root@OpenWrt:~# ls -l /dev/sd*
brw------- 1 root root 8, 0 Jan 1 1970 /dev/sda
brw------- 1 root root 8, 1 Jan 1 1970 /dev/sda1
## USBメモリ(/dev/sda1)をext4でフォーマット
mkfs.ext4 /dev/sda1
以上でUSBメモリがext4でフォーマットされました。
これでUSBメモリはOpenWrtから利用可能な状態となっています。
STEP② overlay領域を丸ごとコピー
現時点で”/overlay”に存在するすべてのファイルを丸ごとUSBメモリへコピーします。
このため、まずはUSBメモリをマウントします。
## USBメモリ(/dev/sda1)をマウント
mkdir /mnt/sda1
mount /dev/sda1 /mnt/sda1
マウントしたUSBメモリへ”/overlay”パーティションの内容を丸ごとコピーします。
## /overlayをUSBメモリへ丸ごとコピー
tar -C /overlay -cvf - . | tar -C /mnt/sda1 -xf -
以上で現在の(標準状態の)”/overlay”領域の内容がUSBメモリ(USB-SSD)へ丸ごとコピーされました。
USBメモリの内容を確認しておきましょう。
## /overlayの内容を確認
root@OpenWrt:~# ls -l /overlay
drwxr-xr-x 9 root root 4096 Apr 9 23:43 upper
drwxr-xr-x 3 root root 4096 Jan 1 1970 work
## USBメモリ(/mnt/sda1)の内容を確認
root@OpenWrt:~# ls -l /mnt/sda1
drwx------ 2 root root 16384 Apr 9 19:33 lost+found
drwxr-xr-x 9 root root 4096 Apr 9 23:43 upper
drwxr-xr-x 3 root root 4096 Jan 1 1970 work
root@OpenWrt:~#
以上で必要なデータを丸ごとUSBメモリへコピーしました。
STEP③ 自動マウント(fstab)の設定
“/overlay”の内容をUSBメモリ(USB-SSD)へ丸ごとコピーしたので、次回のルーター起動時からは”/overlay”パーティションがUSBメモリ(/dev/sda1)に割り当てられて起動するよう、fstabファイルを編集します。
### fstabを作成
root@OpenWrt:~# block detect > /etc/config/fstab
## fstab内容を確認
root@OpenWrt:~# uci show fstab
fstab.@global[0]=global
fstab.@global[0].anon_swap='0'
fstab.@global[0].anon_mount='0'
fstab.@global[0].auto_swap='1'
fstab.@global[0].auto_mount='1'
fstab.@global[0].delay_root='5'
fstab.@global[0].check_fs='0'
fstab.@mount[0]=mount
fstab.@mount[0].target='/mnt/sda1'
fstab.@mount[0].uuid='8665d1d2-83e7-488b-b3d2-7fbba9c1ac9e'
fstab.@mount[0].enabled='0'
## fstabを修正
root@OpenWrt:~# uci set fstab.@mount[0].target='/overlay'
root@OpenWrt:~# uci set fstab.@mount[0].enabled='1'
## fstabの修正を確認
root@OpenWrt:~# uci show fstab
fstab.@global[0]=global
fstab.@global[0].anon_swap='0'
fstab.@global[0].anon_mount='0'
fstab.@global[0].auto_swap='1'
fstab.@global[0].auto_mount='1'
fstab.@global[0].delay_root='5'
fstab.@global[0].check_fs='0'
fstab.@mount[0]=mount
fstab.@mount[0].target='/overlay'
fstab.@mount[0].uuid='8665d1d2-83e7-488b-b3d2-7fbba9c1ac9e'
fstab.@mount[0].enabled='1'
## 修正を反映
root@OpenWrt:~# uci commit fstab
root@OpenWrt:~#
以上でfstabの設定が完了しました。
次回再起動時からはUSBメモリが”/overlay”にマウントされてルーター起動してくるはずです。
## ルーターを再起動
reboot
STEP④ ルーターの再起動とマウント確認
ルータが再起動したらディスク内容を確認してみます。
BusyBox v1.36.1 (2025-02-03 23:09:37 UTC) built-in shell (ash)
_______ ________ __
| |.-----.-----.-----.| | | |.----.| |_
| - || _ | -__| || | | || _|| _|
|_______|| __|_____|__|__||________||__| |____|
|__| W I R E L E S S F R E E D O M
-----------------------------------------------------
OpenWrt 24.10.0, r28427-6df0e3d02a
-----------------------------------------------------
=== WARNING! =====================================
There is no root password defined on this device!
Use the "passwd" command to set up a new password
in order to prevent unauthorized SSH logins.
--------------------------------------------------
root@OpenWrt:~# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/root 4352 4352 0 100% /rom
tmpfs 238204 272 237932 0% /tmp
/dev/sda1 14745944 11784 13963296 0% /overlay
overlayfs:/overlay 14745944 11784 13963296 0% /
tmpfs 512 0 512 0% /dev
root@OpenWrt:~#
上記の通り、”/overlay”にUSBメモリ(/dev/sda1)がマウントされ、”/”(ルート)容量は14GBに大きくなっています!
また、LuCI上からも以下のように14GBが割り当てられています。
以上でWXR-2533DHPの容量拡張(ExtRoot化)が完了です。
※どのルーターでも同じ手順です。
USBメモリ運用の注意点
USBメモリの運用を停止する場合
USBメモリを”/overlay”に割り当てることでUSBメモリの大容量ディスク領域をOpenWrtのシステム領域として使えるようになります。
これ以降、OpenWrtの各種設定やインストールしたソフトウェアはすべてUSBディスク上に記録されます。
なので、この状態でたとえば「USBメモリが壊れた!」「USBメモリを交換したい」などの場合には注意が必要です。
fstabファイルを削除する
USBメモリの運用を停止する場合(初期状態に戻す場合)、一番簡単なやり方は「fstabファイルを削除する」です。
ExtRoot化のキモはfstabファイルなのでルーター起動時にこのファイルが存在しなければシステム初期状態で起動されます。
ただし、この場合のシステム状態は本記事手順で「/overlay領域をUSBメモリへ全コピー」した時点の状態となります(当たり前ですね)。
ルーター本体のリセットボタンで初期化する
運用中にUSBメモリが故障したりしてOpenWrtルーターが起動しなくなった場合には、ルーター本体のリセットボタンでOpenWrt初期状態に戻すことができます。
リセットボタンで初期化した場合、fstabファイルも初期化(削除)されるので初期状態での起動となります。
USB3.0とWi-Fi(2.4GHz)の干渉
USB3.0とWi-Fi(2.4GHz)は干渉を起こす場合があります。
「Wi-Fi(2.4GHz)の通信が速度低下する/通信できなくなる」や「接続されたUSB3.0デバイス(本記事ではUSBメモリ)を見失う」が起こる場合がある、ということです。
上記のような干渉の現象が起きた場合、残念ながら「USB3.0の利用をやめる」「Wi-Fi(2.4GHz)の運用を止める」などの対応が必要です。
※USB2.0やWi-Fi(5GHz)では干渉が起きません。
USB3.0デバイスをUSB2.0として使う!?
USB3.0デバイスはUSB2.0デバイスとの互換性確保のために「USBコネクタ部分が3.0端子部分と2.0互換端子部分に分かれている」という構造になっています。
このため、本記事記載の利用方法に限らず、「USB3.0デバイスをゆっくり刺す/浅く差す」とUSB2.0と認識されてしまう場合があります。
※PCとUSB3.0ハードディスクなどで確認してみるとわかります。
つまり、USB3.0メモリを「USBポートに浅くさしておく」によりUSB2.0と認識するわけです。
これにより、USB3.0とWi-Fi(2.4GHz)の干渉を避けることができるかもしれません。
※我が家では干渉が起きていないので未確認ですが・・・
OpenWrtにdocker環境を構築
ディスク容量が14GBになったので、この領域へdockerをインストールしていきます。
STEP① 必要なパッケージのインストール
まず最初にdockerに必要なパッケージをインストールします。
## dockerパッケージをインストール
opkg update
opkg install dockerd luci-i18n-dockerman-ja
LuCIの英語環境が良い人は「luci-i18n-dockerman-ja」ではなくて「luci-app-dockerman」をインストールしてください。
関連するパッケージも同時にインストールされますし、docker-composeもインストールされます。
インストールが正常終了したらルーターを再起動しておきましょう。
## ルーターを再起動
reboot
STEP② docker環境の確認
docker管理機能
ルーターが再起動したらメニュー「docker」が利用できるようになっています。
一通りのdocker管理ができる機能があるようです。
インターフェース
docker用のネットワークインターフェースも構築されています。
メニュー「ネットワーク > インターフェース」は以下のようにdockerインターフェースが構築済です。
ファイアウォール
ファイアウォール・ゾーンも”docker”ゾーンが構築されています。
しかし・・・dockerゾーンが他のゾーンと接続されていません。
これではLAN側から通信できないかな??
“docker”ゾーンを「編集」で開き、以下の設定を行います。
宛先ゾーンへ転送を許可 | “lan”ゾーンと”wan”ゾーンを一覧追加 |
---|---|
送信元ゾーンからの転送を許可 | “lan”ゾーンを一覧追加 |
以上を設定したら「保存」ボタンで画面を閉じます。
ファイアウォール・ゾーンの一覧画面に戻ったら「保存&適用」ボタンでシステム反映させておきます。
これでOpenWrt上にdocker環境が構築できました。
STEP③ 動作確認!portainer-ceをインストール
では何かdockerイメージをインストールしてみましょう。
OpenWrtではdocker-manager(luci-i18n-dockerman-ja)がインストールしているので、一応のdocker管理はdocker-managerで行うことができます。
でもまぁ、動作確認としていつも使っている「portainer-ce」をインストールして使ってみましょう。
### Portainerをインストール ###
docker run -d \
--name portainer \
-p 9000:9000 \
-p 9443:9443 \
--restart unless-stopped \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce
ディスク領域がUSBメモリだからなのか、pullが遅いですがまぁちゃんと動いています。
完了後、ブラウザから「http://192.168.1.1:9000」でportainer-ce管理画面を開きます。
はい、portainer-ceの初期画面が正常に表示されました。
初期パスワードを設定すればPoetainer-ceでdocker管理が可能となります。
以上でいつも通りにOpenWrt上のdockerへportainer-ceをインストールすることができました。
dockerでWireGuard環境
WireGuardをdockerでインストールし、外出先からいつでも自宅ネットワークへVPN接続できる環境を構築します。
WG-EasyというWireGuardのdockerイメージがあるのですが、これがまたよくできてるんです!
WireGuardだとピア(接続先=クライアント)の管理(鍵管理/IPアドレス管理)がちょっと面倒なのですが、WG-Easyを使えば専用の管理画面が提供され利用者(ピア)を登録するだけで面倒なカギ管理・IPアドレス管理も自動でやってくれます。
今回はこのWG-Easyを使ってWireGuard環境を構築してみます。
STEP① OpenWrtでダイナミックDNSを設定
本記事ではWireGuard環境構築前にダイナミックDNS環境を構築してみます。
※不要な人は読み飛ばしてください。
OpenWrtにはダイナミックDNSのクライアントモジュールが提供されており、世界中のさまざまなダイナミックDNSサービスを利用できる仕組みが構築できます。
本記事では無料のダイナミックDNSサービス「DDNS Now!」を利用し、ダイナミックDNSクライアント環境を構築します。
※事前に「DDNS Now!」でダイナミックDNS利用登録を行っておいてください。
ダイナミックDNSクライアントパッケージのインストール
必要なパッケージをインストールします。
## ダイナミックDNSに必要なパッケージをインストール
opkg update
opkg install luci-i18n-ddns-ja
インストール後にLuCIへログインし直すとダイナミックDNS環境が利用可能となります。
メニュー「サービス > ダイナミックDNS」画面を開きます。
ダイナミックDNSモジュールの使い方
OpenWrtのダイナミックDNSクライアントパッケージ”luci-i18n-ddns-ja”をインストールすると、メニュー「サービス > ダイナミックDNS」が利用できるようになります。
このダイナミックDNSクライアントは非常に多くの世界中のダイナミックDNSサービス(有料/無料)に対応していますが、残念ながら「DDNS Now!」は標準対応していません。
よって、「新規サービスを追加」による設定の前に「DDNS Now」向けの設定がちょっと必要です。
カスタムDDNSクライアント定義
「DDNS Now」は本モジュールの標準対応のダイナミックDNSサービスではないので、「カスタムダイナミックDNS」として「DDNS Now」向けの定義ファイルを設定する必要があります。
具体的には「/usr/share/ddns/default/」ディレクトリに以下の定義ファイルを配置します。
{
"name": "ddnsnow",
"ipv4": {
"url": "http://f5.si/update.php?domain=[USERNAME]&password=[PASSWORD]&ip=[IP]"
},
"ipv6": {
"url": "http://v6.f5.si/update.php?domain=[USERNAME]&password=[PASSWORD]&ip=[IP]"
}
}
ファイル名は何でもよいのですが、本記事では「ddnsnow.json」というファイル名にします。
上記定義ファイルを見るとわかるように、「DDNS Now」のIPアドレス更新サイトへ問い合わせ(IPアドレスの通知)を行うだけの定義ファイルです。
上記ファイルを指定ディレクトリへ配置します。
配置後には以下のようになります。
root@OpenWrt:~#
root@OpenWrt:~# cd /usr/share/ddns/default/
root@OpenWrt:/usr/share/ddns/default# ls -l ddnsnow.json
-rw-r--r-- 1 root root 218 May 9 16:05 ddnsnow.json
root@OpenWrt:/usr/share/ddns/default#
以上で「DDNS Now」用のカスタム定義ファイルは完了です。
ダイナミックDNSの設定
最初にカスタム定義をシステム反映させるために「DDNSサービスリストを更新」ボタンを押下しておいてください。
ではメニュー「サービス > ダイナミックDNS」画面よりダイナミックDNSの設定を行っていきます。
画面「新規サービスを追加」ボタンを押下し、新しいダイナミックDNS登録を行います。
名前 | ご自由に ※本記事では”ddnsnow_ipv4″ |
---|---|
IPアドレスのバージョン | “IPv4アドレス”を一覧選択 |
DDNSサービス・プロバイダー | “ddnsnow”を一覧選択 |
以上を設定し「サービスを作成」ボタンを押下します。
ルックアップするホスト名 | 〇〇〇.f5.si ※利用登録したDDNS Nowのドメイン名 |
---|---|
DDNSサービスプロバイダー | ddnsnow |
ドメイン | 〇〇〇 ※DDNS Nowへ登録した時のサブドメイン名部分 |
ユーザー名 | 〇〇〇 ※DDNS Nowへ登録した時のサブドメイン名部分 |
パスワード | DDNS Nowへ登録した時のパスワード |
以上を設定したら「保存」ボタンで画面を閉じます。
サービス一覧画面に戻ったら「保存&適用」ボタン押下でシステム反映させます。
以上で設定は完了、しばらく放っておくと勝手に(定期的に)IPv4アドレスの問い合わせ(登録)が行われますが「リロード」ボタンを押下すると即時に問い合わせが行われます。
STEP② WG-Easyをdockerで構築
ではWireGuard環境をWG-Easyで構築していきます。
管理画面ログインパスワードハッシュの生成
WG-EasyをインストールするとWireGuardの通信機能と同時にピア(接続先=クライアント)の管理画面機能も同時にインストールされます。
そして、その管理画面へログインする場合には「パスワードあり」と「なし」の運用を選ぶことができます。
管理画面へのログインにパスワード運用を行う場合、WG-Easyインストールに先立ちパスワードハッシュを作成しておく必要があります。
※「パスワードなし」運用の場合は不要
パスワードハッシュの生成もWG-Easyのdocker機能にて生成します。
## WG-Easy管理画面用パスワードハッシュを生成
docker run --rm -it ghcr.io/wg-easy/wg-easy wgpw 'YOUR_PASSWORD'
上記のコマンドでパスワードハッシュが生成されます。
実行ログは以下になります。
root@v-sadoc01:~# docker run --rm -it ghcr.io/wg-easy/wg-easy wgpw 'mypass'
Unable to find image 'ghcr.io/wg-easy/wg-easy:latest' locally
latest: Pulling from wg-easy/wg-easy
c6a83fedfae6: Pull complete
731f5f878c76: Pull complete
17ea4cb95273: Pull complete
2ba186860f73: Pull complete
258f39275178: Pull complete
3700239fd420: Pull complete
360ff0804f5e: Pull complete
4f4fb700ef54: Pull complete
856d3d0ce412: Pull complete
b6e71ca6d913: Pull complete
Digest: sha256:66352ccb4b5095992550aa567df5118a5152b6ed31be34b0a8e118a3c3a35bf5
Status: Downloaded newer image for ghcr.io/wg-easy/wg-easy:latest
PASSWORD_HASH='$2a$12$Oh8jAx89xuK.KMaUB1dqc.*************************'
root@v-sadoc01:~#
「PASSWORD_HASHJ=”**********************”」部分がパスワードハッシュとなるので、コピペして保存しておきましょう。
WG-Easy Dockerイメージのインストール
ではWG-Easy本体をインストールしていきます。
WG-Easyのdockerコマンドは以下のようになります。
### WG-Easyをインストール ###
docker run -d \
--name=wg-easy \
-e LANG=en \
-e PORT=51821 \
-e PASSWORD_HASH='$2a$12*******' \
-e WG_HOST=YOUR_DOMAIN \
-e WG_PORT=51820 \
-e WG_PERSISTENT_KEEPALIVE=25 \
-e WG_DEFAULT_ADDRESS=10.8.0.x \
-v ~/.wg-easy:/etc/wireguard \
-p 51820:51820/udp \
-p 51821:51821/tcp \
--cap-add=NET_ADMIN \
--cap-add=SYS_MODULE \
--sysctl="net.ipv4.conf.all.src_valid_mark=1" \
--sysctl="net.ipv4.ip_forward=1" \
--restart unless-stopped \
ghcr.io/wg-easy/wg-easy
代表的なパラメーターは以下を参考にして環境に合わせて変更してください。
※初期値で良い場合はパラメーター不要
LANG | 管理画面(WebUI)の言語を指定します。 ※初期値は”en”(英語) |
---|---|
PORT | 管理画面(WebUI)のポート番号を指定します。 ※初期値は”51821″ |
PASSWORD_HASH | 生成したパスワード・ハッシュを指定する ※パスワード不要の場合は本パラメータは不要 |
WG_HOST | ダイナミックDNSによるドメイン名を指定します。 ※本記事では〇〇〇.f5.si ※グローバルIPアドレス直接指定でもOK |
WG_PORT | WireGuardの待ち受けポートを指定します。 ※WireGuard推奨値=51820 |
WG_DEFAULT_ADDRESS | WireGuardネットワークのIPアドレス範囲を指定します。 ※初期値は10.8.0.x |
WG_PERSISTENT_KEEPALIVE | WireGuard(クライアント側)のKEEP_ALIVE時間(秒)を指定します。 ※初期値は0(秒)ですがWireGuardの推奨値は25(秒) |
なお、WG-Easyの全パラメーターについての説明は以下のリンクにて確認することができます。
STEP③ WG-Easyへ利用者登録
WG-Easyのインストールは以上で完了です。
ブラウザから「http://OpenWrtIPアドレス:WG-Easyポート番号」へアクセスするとWG-Easyの管理画面が表示されます。
本記事ではOPenWrtIPアドレスは「192.168.1.1」であり、WG-EasyのWebUIポート番号は51821なので「http://192.168.1.1:51821」でアクセスします。
パスワード・ハッシュを設定している場合にはログイン画面が表示されるのでパスワードを入力しログインします。
パスワード・ハッシュを設定していない場合にはログイン画面は表示されません。
上記のようなWG-Easy管理画面の初期状態が表示されると、WG-Easyのインストールは完了です。
WG-Easy管理画面の操作
WG-EasyによるWireGuard環境の操作方法を簡単に説明しておきます。
管理画面は非常にシンプルで以下の画面構成となっています。
「+ New Client」ボタンを押下することで利用者(クライアント)を登録することができます。
利用者名を登録するだけで、WireGuard設定でちょっと面倒な鍵管理も自動的にやってくれます。
「Backup」ボタンを押下すると、登録されている利用者情報や各利用者のカギ情報がJSONファイルとしてダウンロード(バックアップ)できます。
「Restore」ボタンを押下すると、バックアップしたJSONファイルから利用者情報/カギ情報を復元することができます。
障害が起こっても、WG-Easy自体やdocker動作環境などは簡単に復元(再インストール)することができますが利用者情報(データ)の復元にはバックアップが必要です。
できれば新しい利用者を登録したタイミングで「Backup」を取得・保管しておくと良いでしょう。
WG-Easy利用者の管理
利用者を登録すると利用者ごとに機能ボタンが表示されます。
利用一時停止 | 利用者のWireGuard接続をオン/オフ(接続不可)することができます。 ※オフ(左へスライド)で一時的に接続不可 |
---|---|
設定ファイル(QRコード) | WireGuard接続情報のQRコードが表示されます。 ※スマホ利用の場合に利用 |
設定ファイル(ダウンロード) | WireGuard接続情報ファイルをダウンロードします。 ※PC利用の場合に利用 |
利用者削除 | 利用者の登録を削除します。 |
スマホから接続する場合はスマホ用WireGuardアプリから「設定ファイル(QRコード)」を読み取ってください。
パソコンから接続する場合は「設定ファイル(ダウンロード)」からダウンロードしたWireGuard定義ファイルをWireGuardクライアントのトンネルとしてインポートしてください。
以上でクライアント(スマホ/パソコン)からWireGuardで自宅ネットワークへ接続可能となります。
まとめ、OpenWrtでdocker動かしてもいいの?
以上、本記事ではWXR-2533DHPをUSBメモリで容量拡張(ExtRoot化)し、docker環境を構築してみました。
OpenWrtルーターでdocker環境を構築するためには、現実的にはUSBメモリによる容量拡張が必須となります。
USBポートがついたルーターはあまり多くなく、その中でWXR-2533DHPはUSB3.0が2ポート(DHP2は1ポート)ついており大容量化に最適です。
OpenWrt旧バージョンではWXR-2533DHPはなぜかExtRoot化ができませんでしたが、OpenWrt24.10ではこれもなぜか簡単にExtroot化できてしまいました。
WXR-2533DHPをお持ちの方はお手持ちのUSBメモリを使ってdockerで遊んでみてはどうでしょうか?
USBメモリだとちょっと遅い?
WXR-2533DHPにはUSB3.0ポートがついており、高速5Gbps通信が可能です。
しかし、いかんせんUSBメモリなのでアクセス速度は遅いです。
本記事のようにWireGuardなどでVPN環境程度なら良いのですがNextCloudなどでディスクアクセスの大きなものを動かすとやはり遅い・・・・
最近はUSBタイプのSSDも安くなってきており、次回は以下のようなコンパクトな(でっぱりのない)USB-SSDで試してみたいと思います。
NextCloudやsmbなどファイル共有機能を使う場合にはUSB-SSDでExtRoot化することをおすすめします。
WXR-2533DHPのすすめ
WXR-2533DHPはかつてのバッファローの旗艦モデルであり、今でも十分な高性能モデルです。
しかも、RAM/ROMも結構な大容量です。
OpenWrtルーターではUSBポートがあればスマホとのUSBテザリングや本記事のような大容量化ができるので、ルーター選びではUSBポートのあるモデルがおすすめ、その中でもUSB3.0ポートを持つWXR2533DHPはおすすめです。
後継機種としてWXR-2533DHP2という機種もあるのですが、こちらは全く同じ仕様/OpenWrtの構築法も同じなのですが、USB3.0ポートが1ポートになっています。
比較のためにOpenWrtのスタンダードとして人気のWZR-HP-AG300Hも比較のために乗せてみます。
製品名 | WXR-2533DHP | WXR-2533DHP2 | WZR-HP-AG300H |
---|---|---|---|
CPU | Qualcomm IPQ8064 |
Atheros AR7161 |
|
RAM | 512MB | 128MB | |
FLASH | 256MB | 32MB | |
WANポート | 10BASE/100BASE/1000BASE ※1ポート |
||
LANポート | 10BASE/100BASE/1000BASE ※4ポート |
||
Wi-Fi | 802.11b/g/n/ac | 802.11b/g/n | |
USBポート | USB3.0 × 2 | USB3.0 × 1 | USB2.0 × 1 |
このように、USBを使って遊べるルーターを選ぶならWXR-2533DHP/DHP2を選ぶとよいでしょう。
大ヒット商品だったのでメルカリなどでも出品されています。