OpenMediaVaultはTrueNASと並ぶ(?)NASソリューションとして人気がありますが、TrueNASよりも軽量・サクサクなのが良いです。
軽量・サクサクなのは仕組みがシンプルだからなのですが、機能がないわけではありません。
標準機能に加えて多くの機能がプラグインとして提供されており、必要な機能だけをプラグインとして導入できるわけです。
本記事ではOpenMediaVautlの拡張プラグイン(OMV-Extras)に含まれる「OMV-wireguard」を使い、OpenMediaVaultをWireGuardサーバーとして構築し外出先から自宅ネットワークへ接続できる環境を構築していきます。
前書き
本記事ではOpenMediaValutの拡張プラグイン(OMV-Extras)に含まれるWireGuardプラグイン「OMV-wireguard」を使ってWireGuardサーバー環境を構築していきます。
当然ながらWireGuardサーバー環境だけでは機能しないので不随する環境として「ダイナミックDNS」「ルーターのポート転送」についても説明していきます。
本記事での環境構築手順概要
本記事では以下の手順にてWireGuardサーバー環境を構築していきます。
- STEP1ダイナミックDNSの設定
WireGuard構築以前に自宅ルーターのIPアドレスをダイナミックDNSサービスに登録できる仕組みを構築します。本記事では今回「DuckDNS」を使ってみます。
すでにダイナミックDNSをお使いの方、または他のダイナミックDNSサービスを使いたい方は読み飛ばしてください。
- STEP2WireGuardの設定(OMV)
OMV-wireguardプラグインを使ってOpenMediaVault上にWireGuard環境を構築します。「トンネル(サーバー側)」と「ピア(Clients)」の2つを構築します。
- STEP3自宅ルーターの設定(ポート転送)
自宅ルーターのポート転送設定を行います。外出先から自宅(ルーター)へ接続したときに「この接続要求はOMVへ転送する」という設定です。
本記事の前提
本記事の前提を書いておきます。
すでにOpenMediaVault環境を持っている
本記事ではすでにOpenMediaVault環境を構築・運用している方を想定しています。
「OpenMediaVaultのインストール方法」「基本的な使い方」などの内容には触れません。
自宅回線にグローバルIPv4が付与されている
WireGuardに限らず「外出先から自宅ネットワークへ接続する」場合には自宅回線にグローバルIPアドレスが必要です。
グローバルIPアドレスが付与されない回線サービスをご利用の場合、自宅内にサーバー環境を構築することは(基本的に)できません。
MA-e(v6プラス/OCNバーチャルコネクト)環境をご利用の方
v6プラスやOCNバーチャルコネクトなどのMAP-eの回線をご利用の場合、制限付きながらもグローバルIPアドレスが使えます。
「制限」とは「使えるポート番号が限られている」という点です。
WireGuardが通信で使うポート番号は標準で「51820」なので本記事ではそれで構築しますが、MAP-e回線ご利用の方は自分の回線で使えるポート番号に置き換えてください。
なお、MAP-e環境で使えるポート番号の確認方法は以下の記事を参考にしてみてください。
DS-Lite(クロスパス/Transix)環境をご利用の方
クロスパスやTransixなどのDS-Lite回線をご利用の場合、自宅回線にグローバルIPアドレスは付与されません。
なので本記事手順によるWireGuardサーバー環境を構築しても外出先からつながりません。
ホームルーターサービス環境をご利用の方
WiMAX/Softbank Air/NTTドコモhome5GなどのホームルーターサービスもグローバルIPアドレスが付与されません。
これもダメ。
※楽天モバイルの「Rakuten Turbo」はグローバルIPアドレスが付与されているようですが・・・
STEP① 超簡単にダイナミックDNS環境
自宅機器をインターネット側(外出先)からアクセスするためにダイナミックDNSサービスを利用します。
多くの無料で使えるダイナミックDNSサービスがあるのでお好きなサービスを使って構いません。
一例として本記事では「DuckDNS」を使っての仕組みを構築します。
DuckDNS利用者登録とドメイン取得
DuckDNSは無料で使えるダイナミックDNSサービスであり、一つのアカウントで複数のサブドメインを取得/登録することができます。
他の大手のダイナミックDNSサービス(no-ipとか)と違い迷惑なメールなどもなく、また定期的なログインなども強要しない使い勝手の良いフリーのダイナミックDNSサービスです。
利用者登録
DuckDNS公式サイトから利用者登録を行います。
新規アカウント登録は以下のような手段で登録できます、googleアカウントなどで簡単に利用者登録できます。
- 通常のメールで登録
- X(旧Twitter)アカウントで登録
- Githubアカウントで登録
- Reditアカウントで登録
- Googleアカウントで登録
ドメイン登録
利用者登録が完了するとトップページでドメインの登録を行います。
提供されるドメインは「〇〇〇.duckdns.org」となり、〇〇〇部分をお好きな名前にすることができます。
使いたい名前を登録し「add domain」ボタン押下でドメインが利用可能となります(すでに利用されているドメイン名は登録不可)。
また、一つのアカウントで複数のドメインを登録することもできます。
ダイナミックDNS登録スクリプト
DuckDNSはメジャーなダイナミックDNSサービスなのでさまざまなダイナミックDNSクライアントが標準対応しています。
また、DuckDNSの良い点として利用環境ごとにドメイン更新(IPアドレスの登録)スクリプトが自動で作成/提供される点が挙げられます。
本記事では「Linuxのcronを使ってダイナミックDNSを利用する」という方法を使いDuckDNSにIPアドレスを登録/更新していきます。
マイページのメニュー「install」を選びます。
「Linux Cron」を選び、下部の「choose domain」で登録した自分のドメインを選択します。
echo url="https://www.duckdns.org/update?domains=mydomain&token=18****d8-0**e-4**7-9**c-25********57&ip=" | curl -k -o ~/duckdns/duck.log -K -
すると上記のようなLinuxのcronを使ってDuckDNSへIPアドレスを登録/更新する設定手順が表示されます。
OpenMediaValutの場合、すでに基本的なcronの仕組みは組み込まれているので、上図赤枠部分のスクリプトをコピーして控えておきます。
以上でDuckDNS上での作業は完了です。
OpenMediaValutへのスクリプト登録
ここからの作業はOpenMediaVaultへ戻ります。
さきほどコピーしたスクリプトをOpenMediaVaultのスケジュールタスク(cron)へ登録していきます。
“curl”のインストール
まず、コピーしたDuckDNSの更新スクリプトでは”curl”というプログラムが使われていますが、これはOpenMediaVaultでは標準ではインストールされていません。
なのでインストールしておきます。
## curlインストール
apt update
apt install -y curl
ログフォルダの作成
また、DuckDNS更新スクリプトはその実行結果をログとして出力しますが、このログファイル用のディレクトリが指定されているので作成しておきます。
## ログフォルダの作成
## rootディレクトリ配下に"duckdns"サブディレクトリを作成
cd
mkdir duckdns
スケジュールタスクの登録
ではDuckDNS更新スクリプトを自動実行される仕組みを構築します。
今回は10分間隔でDuckDNS更新スクリプトを自動実行する仕組みとします。
OpenMediaVaultのメニュー「システム > スケジュールされたタスク」からタスクを新規作成(+ボタン)します。
以下の設定を行います。
有効 | チェックする |
---|---|
実行時間 | “特定の日時”を一覧選択 |
分 | “10”を一覧選択(チェック) ※それ以外はすべてチェックを外す |
毎N分 | チェックする |
時 | “*”を一覧選択 すべてチェックを外す |
毎N時 | チェックを外す |
月の日 | “*”を一覧選択 すべてチェックを外す |
毎月N日 | チェックを外す |
月 | “*”を一覧選択 すべてチェックを外す |
曜日 | “*”を一覧選択 すべてチェックを外す |
コマンド | duckdnsの更新スクリプトをコピペする |
設定が終わったら「保存」ボタンで画面を閉じます。
一覧画面で「スケジューリング=10分ごと」となっていることを確認してください。
以上でDuckDNSによるダイナミックDNSの仕組みを使って「10分間隔でグローバルIPアドレスを自動更新」する仕組みが出来上がりました。
STEP② 超簡単にWireGuardサーバー構築
では、OpenMediaVault上にWireGuard環境を構築していきます。
拡張プラグイン「OMV-Extras」のリポジトリ登録
本記事ではWireGuard環境は拡張プラグイン「OMV-Extras」に含まれるOMV-wireguardプラグインを利用して構築していきます。
まず、拡張プラグイン「OMV-Extras」のリポジトリ登録が必要です。
## OMV Extrasリポジトリ登録
wget -O - https://github.com/OpenMediaVault-Plugin-Developers/packages/raw/master/install | bash
WireGuardプラグインのインストール
OMV-Extrasリポジトリが登録完了すれば、メニュー「システム > プラグイン」からOMV-WireGuardを選択・インストールできるようになります。
「wireguard」でプラグインを絞り込み、インストールボタン(↓)でインストールします。
WireGuardサーバーの設定(トンネル設定)
OMV-wireguardプラグインがインストールされると、メニュー「サービス > wireguard」が出現します。
サブメニュー「Tunnnels」を選びサーバー側の設定を登録します。
以下の内容を設定します。
Enable | チェックする |
---|---|
Tunnel number | “1” |
名前 | お好きに ※本記事では”wg1″ |
Network adapter | あなたの環境のネットワークアダプタを一覧選択 ※多くの場合”ens**”みたいな名前 |
Endpoint | ダイナミックDNSに登録したドメイン名 ※”〇〇〇.duckdns.org”を入力 ※グローバルIPv4直打ちでも良い |
ポート | WireGuard標準値”51820″を設定 ※MAP-e環境の方は使えるポート番号を指定 |
以上を設定したら「保存」ボタンで画面を閉じます。
以上でトンネル(サーバー側の設定)作成は完了です、簡単ですね。
WireGuardピアの設定
次にサブメニュー「Clients」からピア(通信相手)の設定を登録していきます。
以下の内容を設定します。
Enable | チェックする |
---|---|
Client number | “1”から連番で設定 |
Tunnnel number | 作成したトンネルを一覧選択 |
名前 | お好きな名前 ※本記事では”WGClient1″ |
Persistent keepalive | 推奨値”25″を設定 |
DNS Servers | 自分の環境のDNSを設定 ※最初は8.8.8.8などのパブリックDNSが良いです ※DNS原因で接続できない場合があるので |
DNS |
以上でピア(クライアント側の設定)作成は完了です、簡単ですね。
ピア定義ファイル(コンフィグ)のダウンロード
ここまでの設定でトンネル(サーバー側)とピア(クライアント側=スマホやPC)の定義が完了しています。
あとはピアの定義をクライアント(スマホやPC)のアプリに読み込めばWireGuardによるリモートVPN接続が利用可能となります。
クライアントがPCの場合には定義ファイルをダウンロードし、クライアントアプリに読み込みます。
クライアントがスマホの場合には定義情報のQRコードをスマホアプリで読み込みます。
QRコードの作成
クライアントがスマホの場合にはピアの定義情報をQRコードで読み込むことができます。
ピアの一覧画面から「QRコード生成」を押下し、QRコードを生成します。
なお、ピアの設定内容を変更した場合にはその都度QRコードは再度生成しなおしてください。
生成したQRコードをスマホのWireGuardクライアントアプリから読み込めばピアの接続情報が設定されます。
ピア定義ファイル(コンフィグ)のダウンロード
クライアントがPCの場合にはピアの定義ファイル(コンフィグ)をファイルとしてダウンロードし、PCのWireGuardアプリに「トンネルを読み込む」としてファイルを読み込みます。
ピア定義ファイル(コンフィグ)の内容
自動作成されたピアの定義ファイル(コンフィグ)は以下のような内容になっています。
[Interface]
Address = 10.192.1.1/24
PrivateKey = *******************************************=
DNS = 8.8.8.8
[Peer]
PublicKey = *******************************************=
PresharedKey = *******************************************=
Endpoint = *******.duckdns.org:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
Interface | Address | WireGuardプラグインが自動採番します |
---|---|---|
PrivateKey | WireGuardプラグインが自動生成します | |
DNS | ピア定義画面でせていしたDNS | |
Peer | PublicKey | WireGuardプラグインが自動生成します |
Endpoint | 自宅回線のドメイン名 トンネル定義で設定したドメイン名 |
|
AllowedIPs | “すべての通信をWireGuardサーバーへ流す”という設定になっている ピア定義の”アドバンスド”定義で変更可能 |
|
PersistentKeepalive | ピア定義で設定した”Persistent keepalive”が設定 |
STEP③ ルーターの設定/ポート転送設定
以上で自宅内のWireGuardサーバー(OMV)環境ができあがりましたが、まだ外出先から自宅(WireGuard)への接続はできません。
外出先から自宅回線(ルーター)へ接続したときに「この接続要求はWireGuardサーバー(OMV)へ転送する」というルーターの設定(ポート転送設定)が必要です。
ここからはルーターのポート転送設定を説明していきます。
OpenWrtルーターでのポート転送設定
我が家で使っているルーター「OpenWrtルーター」でのポート転送設定を行います。
管理メニュー「ネットワーク > ファイアウォール」画面から「ポートフォワーディング」タブ画面を開きます。
「追加」ボタンから新規のポート転送(ポートフォワーディング)設定を行っていきます。
以下の内容で設定します。
名前 | ご自由に ※本記事では”UDP51820″と設定 |
---|---|
プロトコル | “UDP”を選択設定 ※”TCP”のチェックを外す |
外部ポート | “51820”を設定 ※トンネルに設定したWireGuardの待ち受けポート |
内部IPアドレス | “192.168.11.4/24″を選択設定 ※OpenMediaVaultのIPアドレスを設定 |
内部ポート | “51820”を設定 ※トンネルに設定したWireGuardの待ち受けポート |
設定後、「保存」ボタンで設定を保存します。
一覧画面で内容を確認し「保存&適用」ボタンを押下してシステム反映します。
以上でOpenWrtルーターでのポート転送(ポートフォアーディング)設定は完了です。
バッファロールーターでのポート転送設定
市販ルーターでのポート転送設定として、バッファロールーター(WXR-6000AX12S)でのポート転送設定を説明します。
なお、市販ルーターの比較的低価格帯のものにはポート転送機能のない機種も多いですが、この場合はポート転送できない(つまり、WireGuardによるVPNが利用できない)ということになります。
ここからはバッファロー「WXR-6000AX12S」の管理画面を例に説明していきます。
メニュー「ルーターセキュリティ > ポート変換」画面を開きます。
「ポート変換の新規追加」画面より以下の設定を行います。
プロトコル | TCP/UDP | 任意のUDPポート:51820 ※トンネルに設定したWireGuard待ち受けポート |
---|---|---|
LAN側IPアドレス | 192.168.11.4 ※OpenMediaVaultのIPアドレス |
|
LAN側ポート | 51820 ※トンネルに設定した待ち受けポート番号 |
上記設定し「新規追加」ボタンを押下します。
上記の設定により「自宅ルーターでのUDP:51820の着信(WireGuard)は192.168.11.4(OpenMediaVault)のポート番号51820へ転送」という設定になります。
以上がバッファロールーターでのポート転送設定となりますが、機種によりメニューや手順が異なるので詳細はお手持ちのマニュアルを参考にしてください。
まとめ、OpenMediaVaultで超簡単にWireGuard VPN
私のサイト、自分の作業メモ的に記事を書いています。
もう一度自分が同じ作業(構築)をやるときに記事通りにやればできる、という内容を目指しており、画像だの注意書きだの設定値の表だのくどいので、結構評判悪いです(笑)
そういうのもあって、本記事も長くなりましたがやってることは全然大したことやってません。
OpemMediaVaultのWireGuardプラグインを使えばボタン4つくらい押せば環境構築できてしまいます。
※OpenWrtのWireGuardパッケージ(luci-proto-wireguard)よりよっぽど簡単・確実に構築できます
OMV-wireguardプラグインの良いところ
WireGuardは簡単につながるVPNという点も魅力の一つです。
ただ、バニラなLinuxなどで構築・運用するとピアの鍵やIPアドレスの管理が面倒なんです。
OMV-wireguardプラグインを使えば、その面倒な鍵管理・IPアドレス管理もプラグインが自動的にやってくれる点が良いです。
自分だけが使うならまだしも、「家族/友人も使う」「パソコンでもスマホでも使う」となるとピアがどんどん増えていきます。
こんな時でもOMV-wireguardならピア(Clients)を増やしていくだけで鍵ペアもIPアドレスも意識する必要がありません。
OpenMediaVaultをお使いで、「外出先からも自宅へ接続したい!」と思っているならOpenMediaVaultをプラットフォームとすると良いと思います。
VPN環境ならTailscaleもオススメ
本記事ではWireGuardを使って「外出先から自宅ネットワークへ接続できる環境」を構築しました。
この環境構築の前提として「自宅回線にグローバルIPアドレスが付与されていること」という条件があり、グローバルIPアドレスのない回線環境(DS-Liteやホームルーターなど)ではできません。
この場合はTailscaleによるVPN環境がおすすめです。
TailscaleはグローバルIPアドレスのない回線環境でも外出先のデバイスと自宅ネットワークを接続することができます。
※当然、ダイナミックDNS環境も不要です
そして、OpenMediaVaultなら拡張プラグイン「OMV-compose」を使いdocker環境として簡単にtailscaleサーバーを構築することができます。
余談ですが、DuckDNSについて
一般的に外出先から自宅へ接続する場合には自宅回線にグローバルIPアドレスが必要です。
そして、ダイナミックDNSサービスを使うのも一般的です。
本記事では使い勝手の良いダイナミックDNSサービスとしてDuckDNSを使ってみました。
他の大手ダイナミックDNSサービスみたいな広告メール/定期的なログイン強制/あの手この手の有料プラン誘導などもなく、非常に使い勝手の良いダイナミックDNSサービスでおすすめです。
フィッシング詐欺でよく使われる?
使い勝手が良いからでしょうが、DuckDNSはフィッシング詐欺のメール/SMS/SNSに良く使われているようです。
「ドメインがduckdns.orgなら詐欺サイトだ!」みたいな風潮もあります。
DuckDNSが悪いわけではないのですが、世間ではあまり評判が良くないようです。
まぁ、個人的に使う分には使い勝手が良いですが、友人・知人と共有する場合にはduckdns.orgドメインはちょっと取り扱い注意かな?と思います。
※いや、DuckDNSが悪いわけじゃありませんよ