清水理史の「イニシャルB」

M.2スロット×6搭載のミニPC「Beelink ME mini」で、1台5役の自宅クラウドを作ってみた

Beelink ME miniを自宅クラウド化した

 BeelinkからM.2スロット×6を搭載したミニPC「ME mini」が登場した。先日、同じくN150搭載のToptonのミニPCを買ったばかりだったのだが、どうしても欲しくなって買ってしまった。そして、欲望のままに、アレコレとインストールした結果、結構いい感じの自宅クラウドができたので、ご紹介する。

N150でM.2×6の個性派ミニPC

 海外の自宅サーバー愛好家の動画や、僚誌PC Watchの記事「次世代NASのあるべき姿?手のひらサイズにSSDを6基積める「Beelink ME Mini」」と関連動画を見ていたら、どうしても欲しくなったので、BeelinkのME miniをついつい買ってしまった。

正面
背面
上面

 いわゆるミニPCで、CPUはN150、メモリ12GB固定という製品なのだが、2.5Gbps(Intel I226-V)の有線LANポートが2つ搭載されているうえ、M.2スロットが内部に6つも用意されており、まさに「小型省電力の自宅サーバーにしてくれ」と言わんばかりの構成になっている。

▼製品情報(Beelink)
Beelink ME mini

 ハードウェアの詳細は、上記のPC Watchの記事がわかりやすいので、参照してもらうとして、今回は主にソフトウェア面について解説する。一般的には、NASとして利用するケースが多いかもしれないが、今回は、もう一歩進んだ「自宅クラウド」として構成してみた。

 IPv6でサーバーを公開して運用してみる、という実験も兼ねているのだが、悪くない環境になったので、ご紹介したいと思う。

1台5役のサーバーにする

 今回のサーバーの構成は以下のようになる。1台に「有線ルーター」「リバースプロキシ」「フィルタ付DNS」「パーソナルクラウド」「ファイルサーバー」という5つの機能を詰め込んで、自宅で使う環境をまとめてしまおうという構想だ。

 前述したように、ME miniにはM.2スロットが6つあるので、順当に考えるならTrueNAS Scaleあたりをインストールするのが実用的に思えるが、もうちょっと遊びたいという気持ちが強く、今回は、いろいろ欲張ってみた。

 ハードウェア的には、ME miniにSSDを追加しただけで、今回は、別の検証で使って余っていた500GBのNVMe SSD 4本に加え、急遽購入した同じブランドの500GBのSSD 2本を追加した6本を搭載している。

内部に縦型にNVMe SSDを6本搭載できる。写真撮影時は一部異なるブランドのSSDだが、実際には全て同じブランド、容量のものを6本搭載した

 同梱のマニュアルにも記載されているが、本製品のM.2スロットは1スロット(4番スロット)のみがPCIe 3.0×2構成で、あとの5スロットはPCIe 3.0×1構成になっている。なので、さほど高性能かつ高価なSSDを買わずに済むのがメリットとなる。

 500GBだと、現状5000円前後で購入できるので、6本そろえると3万円。本体と合わせて6万円前後となる。あまり欲張らず、これくらいの容量で遊ぶのがよさそうだ。

 構成をもう少し詳しく展開すると、以下のようになる。

 ベースとなるOSは、もちろんProxmox VEで、そこにVM(仮想マシン)1台、CT(コンテナ)4台を稼働させる。

 通信系のメインになるのは、有線ルーターのOpenWrtで、現状はフレッツ 光クロス(ASAHIネットのDS-Lite環境)でインターネットに接続している。ルーターなので、もちろんME miniのLAN側ポートに接続したPCからインターネットに接続できるが、このとき参照するDNSサーバーとして「AdGuard」を利用する。

 そして、パーソナルクラウドのNextcloudで使って、内部からはもちろんのこと、外部からもファイルを共有できるようにし、ついでにSMB共有用にSambaもインストールしてNextcloudと連携させている。これにより、Nextcloudのウェブインターフェースからも共有フォルダーにアクセスできるようになっている。

 で、肝心なのは、外部公開のしくみだ。

 今回の回線はIPv6 IPoEのDS-Liteの環境なので、基本的にIPv4でサーバーを公開することはできない。DS-Liteの場合、VNE側でNATがかかるCG-NATなので、IPアドレスが共有されるうえ、ポートの解放などもユーザー側では操作できない。

 こうした環境では、これまでCloudflare TunnelやTailscaleなどが使われるのが一般的だったが、今回はPangolinを利用することにした。

Pangolinを使って外部に公開する

 Pangolinは、Cloudflare TunnelやTailscaleほど高機能ではないが、同様のしくみを自分で構築できるオープンソース版の認証機能付きリバースプロキシだ。

 一般的には、AzureやAWSなどのクラウド上のVPSにインストールし、自宅からVPSまでをWireguardで接続して外部からのアクセスをVPS→自宅へと転送する。今回もこの方式を検討したのだが、「VPSの費用がかかる」「内部からのアクセスが面倒くさい(工夫しないと外部経由になる)」という2つの理由であきらめた。

 その代わり、自宅側にPangolinを設置し、IPv6でのみ接続を受け付けることにした。要するに、外部に公開するのはPangolinに限定し、これを盾のように使おうというわけだ。

 リバースプロキシなので、厳密なセキュリティ対策とは言えないが、一応、Pangolinは認証機能付きなので、許可されたユーザーしか転送されないように設定できる。

 また、Pangolinには、内部で使われているTraefik(リバースプロキシ本体)用の「Crowdsec」モジュールがオプションとして提供されており、Pangolinと一緒に簡単にインストールできる。

 Crowdsecは、「Collaborative IPS」と紹介されている通り、世界中のCrowdsecユーザーから報告された情報をもとに、通信を監視して通過の可否を制御できるセキュリティモジュールだ。

PangolinではCrowdsecを追加可能

 Pangolinからインストールできるのは最低限の機能を持ったモジュールで、Traefikのログを参照して、CVEに登録されている脆弱性を狙った攻撃やSSHへのブルートフォースなど、よくある攻撃を遮断できるようになっている。本格的な利用には有料版を利用する必要があるが、これでどこまで自宅サーバーを保護できるかが気になったので、しばらく運用してみることにした。

インストールや設定のポイント

 さすがにProxmox VEを含めて全ての設定を紹介するのは不可能なので、今回は重要なポイントのみ紹介する。

事前準備

 外部からのアクセスを可能にするために独自ドメインを取得。DNS設定で、PangolinをインストールしたサーバーのIPv6アドレス(グローバルアドレス)に対して、AAAAレコードを設定しておいた(このドメインは検証用なので、本記事の掲載時には無効になっている)。

ドメインを取得し、AAAAレコードを登録しておく

Proxmox VE

 今回は、インストーラーをカスタマイズして64GBのeMMCにインストールした。また、別途、USBストレージ(256GB)を装着し、そこにISOファイルなどを保管。さらに、前述したように今回はSSDを6本搭載しているので、これをZFSのRAIDZ2で構成した。

Proxmox VEの構成。ZFSのRAIDZ2で6本のSSDを構成している

OpenWrt(プロセッサー4/メモリ1GB)

 Proxmox Helper Scriptを利用してインストールした。IPv6 IPoEやDS-Liteの設定をし、ファイアウォールでPangolinのIPv6アドレスに対してアクセスを許可しておいた。また、LAN側のPCに配布するDNSサーバーのアドレスをAdGuardのアドレスに設定しておいた。

Pangolinへの転送を許可

AdGuard(プロセッサー2/メモリ1GB)

 Proxmox Helper Scriptを利用してインストールした。

LAN側にDNSを提供

Pangolin(プロセッサー2/メモリ2GB)

 Ubuntu 24.04のCTを用意し、公式のインストールスクリプトを利用してインストールした。インストール時にCrowdsecをインストールするのを忘れずに。

 インストール後、いったんコンテナを停止し(docker compose down)、IPv6を有効化するために以下の設定を作成。

/etc/docker/daemon.json
{
  "log-driver": "journald",
  "default-network-opts": {"bridge":{"com.docker.network.enable_ipv6":"true"}}
}

 また、TraefikでのIPv6の転送とCrowdsecのIPv6対応のために以下のファイルに設定を追記した。

~/docker-compose.yaml(traefik:の項目の中。image:の下あたりでOK)
    sysctls:
      net.ipv6.conf.all.disable_ipv6: 0
      net.ipv6.conf.all.forwarding: 1

 インストール完了後に、Pangolinの設定画面からNextcloudへの転送設定を登録した。

PangolinでIPv6で受けた通信をLAN側のNextcloudに転送する

Nextcloud(プロセッサー4/メモリ4GB/ストレージZFSに1TB)

 Ubuntu 24.04のCTを用意し、Docker Composeを使える状態にしてから、公式が用意しているNextcloud AIOのDockerイメージを利用してインストールした。事前に、ドメインのDNS設定、Pangolinでの転送設定が必要(ドメイン認識できないとセットアップできない)。

 構築後、「外部ストレージ」アプリを有効化し、Sambaの共有フォルダーをマウントしておいた。

Nextcloudでファイル共有や同期

Samba(プロセッサー2/メモリ1GB/ストレージZFSに1TB)

 Proxmox VEのコンテナテンプレートからTurnkey Fileserverをインストール。ユーザー登録と共有フォルダーを作成して使える状態にしておいた。

 一応、構築時のメモを頼りにポイントを記載したが、なにぶん設定が多いため、何か抜けがあるかもしれないがご容赦いただきたい。あっさり、動いたら趣味としての楽しみも半減するので……。

Turnkey Fileserver(Samba)を利用してファイル共有も可能にした

楽しいがIPv6なので注意

 というわけで、BeelinkのME miniを使った自宅クラウドを作ってみたのだが、今のところいい感じに動いている。PCからのファイル共有も快適だし、外出先でもスマホならIPv6が使えるので、Nextcloudへのアクセスも問題なくできる。Pangolinが何度か無反応になって、コンテナを再起動することがあったが、現状は問題なく使えている。

 今回は、VMやコンテナに余裕をもってリソースを割り当てたが、アイドル時でCPU負荷は2~4%、RAM使用状況は46%ほど(11.45GBの5.34GB使用)なので、まだ余裕がある。消費電力は18W前後で、普段はファンも静かでまったく気にならない。ハードウェアの完成度は高く、サーバーとしての使い勝手はよさそうだ。

全ての機能を実装した状態のリソース

 ちなみに、Pangolinで有効化したCrowdsecの状況だが、そもそもIPv6しか許可していないので、アラートはほとんどない。海外から「http-bad-user-agent」が数件表示されるくらいとなっている。現状は、主にCensysからのスキャンだ。Censysについては、そのうち取り上げたいと思うが、NASなどを使っている場合も、同様にスキャンされてリストに公開されてしまうので、対策を考えたいところではある。

公式が用意しているクラウドサービスのCrowdsec Consoleに登録するとGUIで状態を確認できる

 注意点としては、IPv6を利用している点だ。LAN側のPCにもグローバルアドレスが割り当てられるので、フィルタの設定をミスすると、LAN側のPCなどが公開される危険もある。OpenWrtのフィルタの設定は慎重に設定する必要がある。

 また、外出先の場合、IPv6が使えない環境だと当然アクセスできない。公衆Wi-Fi、組織のネットワークなど、IPv6のアドレスが割り当てられないと使えないので注意が必要だ。自宅サーバーなので、あくまでも自己責任で楽しんでほしい。

 いろいろ欠点や注意点はあるが、とりあえず楽しいので試してみるといいだろう。なお、筆者も試行錯誤しながら稼働させたうえ、現状もまだテスト段階なので、質問には答えられない可能性がある。苦労を楽しむのも自宅サーバーなので、いろいろ試してほしい。

清水 理史

製品レビューなど幅広く執筆しているが、実際に大手企業でネットワーク管理者をしていたこともあり、Windowsのネットワーク全般が得意ジャンル。「できるWindows 11」ほか多数の著書がある。YouTube「清水理史の『イニシャルB』チャンネル」で動画も配信中