一世を風靡したVPNプロトコル「OpenVPN」をすっかり過去のものとしてしまった最新のVPNプロトコルが「WireGuard」です。
軽量・高速で高セキュリティのVPN「WireGuard」はOpenWrtルーターで簡単に利用することができます。
OpenWrtルーターでWireGuardを使うことで、「外出先のパソコンから本店へ接続する」「本店ネットワークと実家(帰省先)ネットワークを拠点間接続する」というVPN環境を構築することができます。
本記事ではOpenWrtルーター2台を使い「拠点間VPN」環境を構築してみます。
本記事では2台のOpenWrtルーターを使い、それぞれ「本店ルーター」「支店ルーター」を想定して「本店・支店間の拠点間VPN環境」を構築していきます。
拠点間接続したい!
WireGuardは軽量・高速・高セキュリティで現在もっとも注目されているVPNプロトコルです。
「軽量・高速・高セキュリティ」に加えて「簡単につながる」という点も魅力と言われていますが、これが結構難しくて簡単につながらなかったりします。
本記事ではOpenWrtルーターを2台使って「本店ルーター」「支店ルーター」と位置づけ、WireGuardによる拠点間VPN接続を行っていきます。
本記事での拠点間接続図
本記事では現状での「本店」「支店」のネットワークを以下のように想定します。
現状では本店ネットワークと支店ネットワークはそれぞれ独立したネットワークを構築し、インターネットに接続されています。
この状態では(当然ながら)本店ネットワークと支店ネットワークの間は相互に通信することができません。
WireGuardによる拠点間接続
本店ルーター(OpenWrt1)および支店ルーター(OpenWrt2)の間をWireGuardネットワーク(10.0.1.0/24)で結びます。
WireGuardネットワークにおける本店ルーターのIPアドレスは「10.0.1.1」とし、支店ルーターのIPアドレスは「10.0.1.2」とします。
このWireGuardネットワークで本店・支店ルーターがWireGuard拠点間接続されることで、それぞれの本店ネットワーク・支店ネットワークはWireGuardネットワークを通じて相互に通信可能となります。
拠点間VPN接続の目的
今回構築する拠点間VPN接続の目的は本店・支店ネットワークの統合です。
具体的には以下のことができること、ということになります。
- 本店ネットワークのPCから支店ネットワークのファイルサーバー(192.168.1.40)を利用できること
- 支店ネットワークのPCから本店ネットワークのファイルサーバー(192.168.13.12)を利用できること
WireGuardによる拠点間接続の前提
WireGuardは通信の仕組み上は「Peer-to-Peer」型のVPNであり、「サーバー」「クライアント」といった上下関係はありません。
しかし、構築手順上、運用手順上、そしてネットワーク構成上においては明確に「サーバー」「クライアント」という位置づけて設計する必要があります。
WireGuardサーバーの条件
WireGuardの通信の仕組み自体は「Peer-to-Peer」型なのでどちらがサーバー・クライアントという分け方はないのですが、回線環境の構成上およびVPN環境の管理上どこか一か所をサーバーとする必要があります。
具体的には以下の条件により「サーバー」が決まります。
サーバー側にはグローバルIPアドレスが必要
WireGuardの通信はPeer-to-Peer型の仕組みですが、拠点間VPNの場合はどちらか一方がVPN接続を待ち受ける側となり、もう一方がVPN接続要求を行う側となります。
このため、「接続を待ち受ける側=サーバー」となり「接続要求を行う側=クライアント」と考えると良いでしょう。
そして、「接続を待ち受ける側=サーバー」側の回線環境として「グローバルIPアドレスが付与されている」という条件があります。
現在、フレッツ光回線を中心にグローバルIPアドレスを利用しない「IPv4 over IPv6」通信が主流ですが、WireGuardに限らずVPN通信で待ち受けする側の回線環境にはグローバルIPアドレスが必要です。
つまり、WireGuardで拠点間(複数の拠点含む)接続を行う場合には最低でもどこか一つの回線はグローバルIPアドレスである必要があり、この「グローバルIPアドレスが付与された回線側がサーバー」となります。
サーバー側では暗号鍵の管理を行う
WireGuardは2つのピア間(サーバーとクライアント)で暗号鍵の交換により通信を確立させます。
この暗号鍵は拠点間の両方(サーバー/クライアント)の暗号鍵をどちらか一方のOpenWrtルーター上で作成・管理する必要があります。
この「どちらか一方のOpenWrtルーター」はサーバー側でもクライアント側でもかまいませんが、本記事ではサーバー側での作業とします。
本記事の前提環境
本記事では拠点間接続の環境として以下を想定します。
サーバー | クライアント | |
---|---|---|
拠点の想定 | 本店 | 支店 |
ネットワーク セグメント | 192.168.13.0/24 | 192.168.1.0/24 |
ルーターIPアドレス | 192.168.13.1 | 192.168.1.1 |
WireGuard ネットワーク環境 | 10.0.1.1/24 | 10.0.1.2/24 |
回線環境 | 楽天ひかり ※PPPoE接続(グローバルアドレス) | NTTドコモhome5G ※SPモード(プライベートアドレス) |
「本店」と「支店」
これは「本店と支店」でなくても「自宅と実家(帰省先)」でも「自宅と仕事場」でも構いません。
本記事では「本店と支店」と想定し「本店側がサーバー」「支店側がクライアント」と想定して環境構築していきます。
本店と支店のネットワークIPアドレス
拠点間接続の場合は2拠点のネットワークをVPNを通じて同じネットワークとします。
これにより、どちらのネットワークからも対向ネットワークのサーバーが利用可能となります。
このため、本店側ネットワークと支店側ネットワークに同一IPアドレスのサーバーが存在するとよろしくありません。
よって「本店側は192.168.13.0/24ネットワーク」「支店側は192.168.1.0/24ネットワーク」とします。
WireGuardネットワークのIPアドレス
本店ネットワークや支店ネットワークのIPアドレスとは別にWireGuardのVPN確立のためのIPアドレスが必要です。
本店側のWireGuard IPアドレスは「10.0.1.1/24」とし、支店側のWireGuard IPアドレスは「10.0.1.2/24」とします。
本店ネットワークの環境
WireGuardは通信の仕組み上はPeer-to-Peerでありサーバー・クライアントの関係はありませんが、構築上はサーバー・クライアントを意識する必要があります。
そのひとつに「サーバー側の回線はグローバルIPアドレスであること」という条件があります。
これはVPN確立時にクライアントがサーバーへVPN接続しに行くわけですが、サーバー側回線がグローバルIPアドレスでなければ接続できないからです。
今回の環境では本店側(サーバー側)の回線環境は「楽天ひかりのPPPoE接続(グローバルIPアドレス/可変)」とします。
支店側(クライアント側)の回線は「NTTドコモhome5G(プライベートIPアドレス/可変)」を想定します。
ダイナミックDNSの利用
拠点間VPN接続を行うためにはサーバー側(本記事では本店)にはグローバルIPアドレスが付与されている必要があります。
また、WireGuardによる接続はクライアント側(本記事では支店)からサーバーへ接続する形態となるため、クライアントからはサーバー側IPアドレスの名前解決できる仕組みが必要です。
本記事では本店ネットワークは楽天ひかりのPPPoE接続(変動グローバルIPアドレス)であるため、DDNSNowというダイナミックDNSサービスを利用させていただきました。
よって、本記事の前提として「本店回線のIPアドレスは〇〇〇.f5.siで名前解決」という仕組みです。
なお、ダイナミックDNSについては本記事では触れません。
IPv6通信は使用しない
本記事ではIPv6通信は行わないものとします。
想定する環境のサーバー側回線(楽天ひかりのPPPoE接続)もクライアント側回線(NTTドコモhome5G)も、IPv6通信に対応していません。
※home5Gは気分次第でIPv6アドレスが付与されたりしますが・・・
また、IPv6通信を前提としてVPN環境を構築する場合には経路設定(ルーティング)の漏れなどを考慮する必要があり面倒だから、という理由もあります。
本記事の目標(ゴール)
本記事では本店と支店を2台のOpenWrtルーターでVPN接続します(拠点間VPN)。
これにより、本店ネットワークと支店ネットワークが相互に通信できる環境を目指します。
具体的には「本店から支店のNASへ接続できる」「支店から本店のNASへ接続できる」「本店と支店のNAS間でファイルコピーができる」という点を確認し、本記事の目的・ゴールとします。
WireGuardサーバー環境(本店ルーター)の構築
では、サーバー側(本店ルーター)での作業および環境構築を行っていきます。
この章では「サーバー側環境構築」に加えて「サーバー側でやるべきこと」も含めて記述していきます。
サーバー側作業の大きな手順としては以下のようになります。
- STEP1暗号鍵ファイルの作成
サーバーとなるOpenWrt上でWireGuardネットワークに参加するデバイス用の暗号鍵ファイルを作成します。ここで作成した暗号鍵ファイルはクライアント(支店)側環境構築でも使用します。
- STEP2WireGuardモジュールのインストール
OpenWrtルーターにWireGuardモジュールをインストールします。インストール後、OpenWrtルーターの再起動が必要です。
- STEP3インターフェース(自分自身)の定義
本店側ルーターのWireGuard通信インターフェースを定義します。 - STEP4ピア(通信相手)の定義
ピア(通信相手=支店)の定義を行います。 - STEP5ファイアウォールの設定
ファイアウォール・ゾーンの作成および修正を行います。また、サーバー側はクライアント側からの通信を待ち受けするためのトラフィックルールの設定変更を行います。
STEP① 暗号鍵ファイルの作成
まずはサーバー側で鍵ファイルを作成します。
最新版のOpenWrtでは鍵ファイルもWebUI(LuCI)上で作成することができるようになりましたが、本記事ではOpenWrtルーターにSSHクライアントで接続しコマンドにて鍵ファイルを作成していきます。
以下のコマンド操作で拠点間接続に必要な鍵ファイルを作成します。
root@OpenWrt:~# umask go=
## サーバー側キーの作成 ##
root@OpenWrt:~# wg genkey | tee wgserver.key | wg pubkey > wgserver.pub
## クライアント側キーの作成 ##
root@OpenWrt:~# wg genkey | tee wgclient.key | wg pubkey > wgclient.pub
## クライアントとの事前共有鍵の作成 ##
root@OpenWrt:~# wg genpsk > wgclient.psk
## キーファイルの確認 ##
root@OpenWrt:~# ls -l
-rw------- 1 root root 45 Sep 6 11:59 wgclient.key
-rw------- 1 root root 45 Sep 6 12:00 wgclient.psk
-rw------- 1 root root 45 Sep 6 11:59 wgclient.pub
-rw------- 1 root root 45 Sep 6 11:59 wgserver.key
-rw------- 1 root root 45 Sep 6 11:59 wgserver.pub
root@OpenWrt:~#
作成した暗号鍵ファイルは以下の5つです。
WireGuard サーバー | WireGuard クライアント | |
---|---|---|
公開鍵 | wgserver.pub | wgclient.pub |
秘密鍵 | wgserver.key | wgclient.key |
事前共有鍵 | wgclient.psk |
STEP② WireGuardモジュールのインストール
まずOpenWrtルーターにWireGuard関連モジュールをインストールしていきます。
リスト更新
メニュー「システム > ソフトウェア」からソフトウェアへ移動します。
ソフトウェア画面に移動したら、まずは「リストを更新」ボタン押下して更新可能な拡張モジュールリストを更新します。
WireGuardモジュールのインストール
「リストを更新」で更新可能な拡張モジュールリストを更新したら、WireGuard関連モジュールをインストールします。
「フィルタ」欄にモジュール名を入れると画面のモジュール一覧が絞り込まれます。
以下のモジュールを絞り込み、一覧画面右の「インストール」ボタンよりインストールします。
※OpenWrtのバージョンによりインストールモジュールが異なります。
インストール モジュール | 23.0.5より前のバージョン | luci-i18n-wireguard-ja |
---|---|---|
qrencode | ||
23.0.5 | luci-proto-wireguard | |
qrencode |
「luci-i18n-wireguard-ja」または「luci-proto-wireguard」モジュールをインストールすることで、WireGuardに関連するすべてのモジュールが一括インストールされます。
また、必須ではありませんが「qrencode」も同時にインストールしておくと良いでしょう。
「qrencode」はOpenWrtルーターでQRコードを作成してくれる拡張モジュールであり、WireGuardのクライアント向けプロファイルの作成時にスマホで読み取り可能なQRコードによるプロファイルを作成してくれます。
ルーターの再起動
WireGuard関連モジュールはインストールしただけではシステム反映されません。
ルーターを再起動してあげる必要があります。
メニュー「システム > 再起動」からOpenWrtルーターを再起動してください。
STEP③ WireGuardインターフェースの作成
WireGuardサーバー側のインターフェースを新規作成していきます。
メニュー「ネットワーク > インターフェース」からインターフェース画面へ移動します。
皆さんの環境で「WAN6」インターフェースが存在していてもかまいません。
インターフェース画面の「インターフェースを新規作成」ボタンよりインターフェース定義画面を開きます。
新規インターフェースを以下のように定義します。
名前 | ご自由に ※本記事では”wg0″としました |
---|---|
プロトコル | “WireGuard VPN”を一覧選択 |
上記入力後、「インターフェースを作成」ボタンを押下します。
インターフェースの詳細定義画面に遷移します。
以下の項目を設定します。
秘密鍵 | “wgserver.key”の内容をコピー |
---|---|
公開鍵 | “wgserver.pub”の内容をコピー |
リッスンポート | “51820”を入力 |
IPアドレス | WireGuardネットワークにおけるサーバー(本店)のIPアドレス ※本記事では”10.0.1.1/24″ |
特に「秘密鍵」「公開鍵」はファイルを間違えないように、気を付けてコピペしてください。
設定したら「保存」ボタンを押下してインターフェース一覧画面へ戻ります。
インターフェース一覧画面から「保存&適用」ボタンを押下して、定義したインターフェースをシステム反映させておきます。
以上でサーバー側(自分=本店)のWireGuardインターフェース定義は完了です。
STEP④ ピア(通信相手=クライアント)の定義
作成したサーバー(本店)側インターフェース「wg0」について、ピア(通信相手=クライアント側)の設定を行います。
たったいま作成したWireGuardインターフェース(本記事では「wg0」)の「編集」ボタンを押下し、インターフェース編集画面へ入ります。
インターフェース編集画面の「ピア」タブ画面から「ピアを追加」ボタンを押下します。
ピア(通信相手=クライアント)の定義画面より以下の情報を設定します。
説明 | ご自由に ※本記事では”wgclient”と定義 |
---|---|
公開鍵 | “wgclient.pub”の内容をコピー |
事前共有鍵 | “wgclient.psk”の内容をコピー |
許可されたIP | クライアント(支店ルーター)のWireGuardIPアドレス ※本記事の環境では”10.0.1.2/24″ |
クライアント(支店)のネットワークセグメント ※本記事の環境では”192.168.1.0/24″ | |
許可されたIPのルート | チェックする |
- 公開鍵・事前共有鍵の設定は暗号鍵ファイルを間違えないよう、またコピペミスのないように十分注意してください。
- 「許可されたIP」は自分(サーバー)ではなく通信相手(クライアント)の環境を設定します。
以上を入力したら画面右下の「保存」ボタンを押下して設定を保存します。
ピアの定義「wgclient」が作成されていることを確認し、画面右下の「保存」ボタンで終了します。
インターフェース一覧画面に戻りました。
画面右下の「保存&適用」ボタンを押下して作成したピア定義をシステムに反映させます。
以上でピア(通信相手=クライアント)の定義は完了です。
STEP⑤ ファイアウォールの設定
最後にファイアウォールを定義していきます。
ファイアウォールは「ファイアウォール・ゾーン」および「トラフィック・ルール」の設定を行います。
「ファイアウォールゾーン」の設定
OpenWrtではインストール時に「lan」「wan」の2つのファイアウォール・ゾーンが定義されています。
今回、WireGuardを導入するにあたり、この2つのファイアウォールゾーンを変更してもいいのですが、本記事では独立性確保のためにWireGuard専用のファイアウォールゾーンを新規作成します。
「ネットワーク > ファイアウォール」から「一般設定」タブ画面を開きます。
画面下の「追加」ボタン押下で新規ファイアウォール・ゾーン設定の「一般設定」タブ画面を開きます。
以下の項目を設定します。
名前 | ご自由に ※本記事では”wg0″と定義 |
---|---|
受信(Input) | 許可(Accept) |
送信(Output) | 許可(Accept) ※初期値 |
転送(Forward) | 拒否(Reject) ※初期値 |
マスカレード | チェックする |
MSSクランプ | チェックする |
対象ネットワーク | 一覧からWireGuard用インターフェースを選択 ※本記事では”wg0″ |
宛先ゾーンへの転送を許可する | 一覧から”lan”と”wan”をチェック(選択) |
送信元ゾーンからの転送を許可する | 一覧から”lan”をチェック(選択) |
上記項目を設定したら「保存」ボタンを押下してファイアウォール設定画面へ戻ります。
ファイアウォール設定画面に戻ったら次の確認・設定を行います。
まず、作成した「wg0」ゾーンが作成されていることを確認します。
次にすでにある「lan」ゾーンの「マスカレード」をチェックします。
以上2点の確認・設定が完了したら画面右下の「保存&適用」ボタンを押下して設定をシステム反映させておきます。
以上でファイアウォール・ゾーンの設定は完了です。
「トラフィックルール」の設定
次にファイアウォール・トラフィック・ルールの設定を行います。
「ネットワーク > ファイアウォール」から「トラフィック・ルール」タブ画面を開きます。
画面下の「追加」ボタンを押下して「ファイアウォール・トラフィック・ルール」追加画面を開きます。
以下の項目を設定します。
名前 | ご自由に ※本記事では”Allow_wgserver” |
---|---|
プロトコル | “UDP”を一覧選択 ※”TPC”のチェックを外す |
送信元ゾーン | “wan”を一覧選択 |
宛先ゾーン | “デバイス(入力)”を一覧選択 |
宛先ポート | インターフェース定義で設定したWireGuardポート番号 ※本記事では「51820」(WireGuard標準値) |
設定したら「保存」ボタンを押下して一覧画面へ戻ります。
ルーターの再起動
以上でファイアウォール設定が完了です。
「インターフェースの定義」「ファイアウォールの定義」が完了したら、ルーターを再起動してください。
以上でWireGuardサーバー側の定義は(一応)完成です。
引き続き、このサーバー環境をベースとしたクライアント環境を構築していきます。
WireGuardクライアント環境(支店ルーター)の構築
ここからはクライアント(支店)側のOpenWrtルーターの環境構築を行っていきます。
作業の対象はクライアント(支店)側のOpenWrtルーターです。
クライアント(支店)側作業の大きな手順としては以下のようになります。
- STEP1WireGuardモジュールのインストール
OpenWrtルーターにWireGuardモジュールをインストールします。インストール後、OpenWrtルーターの再起動が必要です。
- STEP2インターフェース(自分自身)の定義
支店側ルーターのWireGuard通信インターフェースを定義します。 - STEP3ピア(通信相手)の定義
ピア(通信相手=本店)の定義を行います。 - STEP4ファイアウォールの設定
ファイアウォール・ゾーンの作成および修正を行います。
STEP① WireGuardモジュールのインストール
まずクライアント(支店)側のOpenWrtルーターにWireGuard関連モジュールをインストールしていきます。
リスト更新
メニュー「システム > ソフトウェア」からソフトウェアへ移動します。
ソフトウェア画面に移動したら、まずは「リストを更新」ボタン押下して更新可能な拡張モジュールリストを更新します。
WireGuardモジュールのインストール
「リストを更新」で更新可能な拡張モジュールリストを更新したら、WireGuard関連モジュールをインストールします。
「フィルタ」欄にモジュール名を入れると画面のモジュール一覧が絞り込まれます。
以下のモジュールを絞り込み、一覧画面右の「インストール」ボタンよりインストールします。
※OpenWrtのバージョンによりインストールモジュールが異なります。
インストール モジュール | 23.0.5より前のバージョン | luci-i18n-wireguard-ja |
---|---|---|
qrencode | ||
23.0.5 | luci-proto-wireguard | |
qrencode |
「luci-i18n-wireguard-ja」または「luci-proto-wireguard」モジュールをインストールすることで、WireGuardに関連するすべてのモジュールが一括インストールされます。
また、必須ではありませんが「qrencode」も同時にインストールしておくと良いでしょう。
「qrencode」はOpenWrtルーターでQRコードを作成してくれる拡張モジュールであり、WireGuardのクライアント向けプロファイルの作成時にスマホで読み取り可能なQRコードによるプロファイルを作成してくれます。
ルーターの再起動
WireGuard関連モジュールはインストールしただけではシステム反映されません。
ルーターを再起動してあげる必要があります。
メニュー「システム > 再起動」からOpenWrtルーターを再起動してください。
STEP② WireGuardインターフェースの作成
WireGuardクライアント側のインターフェースを新規作成していきます。
メニュー「ネットワーク > インターフェース」からインターフェース画面へ移動します。
皆さんの環境で「WAN6」インターフェースが存在していてもかまいません。
インターフェース画面の「インターフェースを新規作成」ボタンよりインターフェース定義画面を開きます。
新規インターフェースを以下のように定義します。
名前 | ご自由に ※本記事では”wg0″としました |
---|---|
プロトコル | “WireGuard VPN”を一覧選択 |
上記入力後、「インターフェースを作成」ボタンを押下します。
インターフェースの詳細定義画面に遷移します。
以下の項目を設定します。
秘密鍵 | “wgclient.key”の内容をコピー |
---|---|
公開鍵 | “wgclient.pub”の内容をコピー |
IPアドレス | WireGuardネットワークにおけるクライアント(支店)側のIPアドレス ※本記事では”10.0.1.2/24″ |
特に「秘密鍵」「公開鍵」はファイルを間違えないように、気を付けてコピペしてください。
設定したら「保存」ボタンを押下してインターフェース一覧画面へ戻ります。
インターフェース一覧画面から「保存&適用」ボタンを押下して、定義したインターフェースをシステム反映させておきます。
以上でクライアント側(自分=支店)のWireGuardインターフェース定義は完了です。
STEP③ ピア(通信相手=サーバー)の定義
作成したクライアント(支店)側インターフェース「wg0」について、ピア(通信相手=サーバー側)の設定を行います。
たったいま作成したWireGuardインターフェース(本記事では「wg0」)の「編集」ボタンを押下し、インターフェース編集画面へ入ります。
インターフェース編集画面の「ピア」タブ画面から「ピアを追加」ボタンを押下します。
ピア(通信相手=サーバー)の定義画面より以下の情報を設定します。
説明 | ご自由に ※本記事では”wgclient”と定義 |
---|---|
公開鍵 | サーバー側の公開鍵 “wgserver.pub”の内容をコピー |
事前共有鍵 | “wgclient.psk”の内容をコピー |
許可されたIP | サーバー(本店ルーター)のWireGuardIPアドレス ※本記事の環境では”10.0.1.1/24″ |
サーバー(本店)のネットワークセグメント ※本記事の環境では”192.168.13.0/24″ | |
許可されたIPのルート | チェックする |
エンドポイントホスト | サーバー(本店)側OpenWrtルーターのドメイン名 ※本記事ではダイナミックDNSによる「〇〇〇.f5.si」を指定 |
エンドポイントポート | サーバー(本店)側で定義したリッスンポート ※本記事では”51820″と定義 |
永続的なキープアライブ | “25”(秒)を入力 |
※「許可されたIP」には自分(クライアント)ではなく通信相手(サーバー)のWireGuard IPアドレスおよびネットワークセグメントを定義します。
以上を入力したら画面右下の「保存」ボタンを押下して設定を保存します。
ピア(通信相手=サーバー)の定義が作成されていることを確認し、画面右下の「保存」ボタンを押下します。
インターフェース一覧に戻ったら画面右下の「保存&適用」ボタンを押下してピア定義をシステム反映させます。
以上でピア(通信相手=サーバー)の定義は完了です。
STEP④ ファイアウォールの設定
最後にファイアウォールを定義していきます。
ファイアウォールは「ファイアウォール・ゾーン」および「トラフィック・ルール」の設定を行います。
「ファイアウォールゾーン」の設定
OpenWrtではインストール時に「lan」「wan」の2つのファイアウォール・ゾーンが定義されています。
今回、WireGuardを導入するにあたり、この2つのファイアウォールゾーンを変更してもいいのですが、本記事では独立性確保のためにWireGuard専用のファイアウォールゾーンを新規作成します。
「ネットワーク > ファイアウォール」から「一般設定」タブ画面を開きます。
画面下の「追加」ボタン押下で新規ファイアウォール・ゾーン設定の「一般設定」タブ画面を開きます。
以下の項目を設定します。
名前 | ご自由に ※本記事では”wg0″と定義 |
---|---|
受信(Input) | 許可(Accept) |
送信(Output) | 許可(Accept) ※初期値 |
転送(Forward) | 拒否(Reject) ※初期値 |
マスカレード | チェックする |
MSSクランプ | チェックする |
対象ネットワーク | 一覧からWireGuard用インターフェースを選択 ※本記事では”wg0″ |
宛先ゾーンへの転送を許可する | 一覧から”lan”と”wan”をチェック(選択) |
送信元ゾーンからの転送を許可する | 一覧から”lan”をチェック(選択) |
上記項目を設定したら「保存」ボタンを押下してファイアウォール設定画面へ戻ります。
ファイアウォール設定画面に戻ったら次の確認・設定を行います。
まず、作成した「wg0」ゾーンが作成されていることを確認します。
次にすでにある「lan」ゾーンの「マスカレード」をチェックします。
以上2点の確認・設定が完了したら画面右下の「保存&適用」ボタンを押下して設定をシステム反映させておきます。
以上でファイアウォール・ゾーンの設定は完了です。
ルーターの再起動
「インターフェースの定義」「ファイアウォールの定義」が完了したら、ルーターを再起動してください。
拠点間VPN接続の動作確認
ここまでの手順でうまく設定できていれば2台のOpenWrtルーターはWireGuardによる拠点間VPN接続が確立しています。
WireGuard接続状態(WireGuardステータス)の確認
メニュー「ステータス > WireGuard」からWireGuard接続状態を確認することができます。
接続しているピア(通信相手)の名前や「最新のハンドシェイク」などの接続状態が表示されます。
WireGuardが正しく通信できている状態であれば、ブラウザ画面を更新することで「最新のハンドシェイク」の時間(〇〇秒前)が更新されるはずです。
ピア(接続相手)が表示されてない??
ピアの情報が表示されない場合にはWireGuardの通信が確立できていません。
「IPアドレスが間違っている」「リッスンポートが合ってない」など、根本的にクライアントからサーバーへの接続ができていない状態です。
また、ファイアウォールの設定見直しも必要です。
ピア(接続相手)が表示されるけどハンドシェイクが更新されない??
ピアの情報が表示されているけど、「最新のハンドシェイク」欄が更新されないという場合もあります。
この場合はクライアントからサーバーへのIP通信はできているけど、WireGuardの認証のための暗号鍵交換ができていない状態が多いです。
この場合、サーバー・クライアントのインターフェース定義で秘密鍵・公開鍵・事前共有鍵に間違いがないか確認してみてください。
WireGuardネットワークでの接続確認
本記事ではサーバー(本店)側のWireGuard IPアドレスは「10.0.1.1」であり、クライアント(支店)側のWireGuard IPアドレスは「10.0.1.2」です。
サーバー側・クライアント側から通信相手のWireGuard IPアドレスでOpenWrtルーターの管理画面が表示されることを確認します。
本店・支店ネットワークでの接続確認
WireGuard IPアドレスでピア(通信相手)のOpenWrtルーターまでは通信できることが確認できましたが、拠点間VPNにおいて通常利用ではこのWireGuard IPアドレスは使用しません。
通常の利用ではいつも使っている「本店ネットワークのIPアドレス」「支店ネットワークのIPアドレス」で利用できなければ拠点間接続の意味がありません。
ここからは、「本店から支店ネットワークを利用する」「支店から本店ネットワークを利用する」を検証していきます。
支店から本店のサーバーへ接続
我が家の本店ではオープンソースの「OpenMediaVault」によるファイルサーバー(NAS)を運用しています。
本店のOpenWrtルーター | 192.168.13.1 |
---|---|
ファイルサーバー(NAS) OpenMediaVault | 192.168.13.12 |
では、支店ルーター側のPC(192.168.1.0/24)からこの「本店ネットワークのOpenMediaVault(NAS)へ接続」して動作確認してみます。
上記は支店ルーター配下のパソコン(192.168.1.0/24ネットワーク)から本店ルーター配下のファイルサーバー(192.168.13.12/24)へ接続した様子です。
以上のように、支店(クライアント)から本店(サーバー)へWireGuard接続し、本店ネットワークのファイルサーバー(OpenMediaVault)に接続することができました。
本店から支店のサーバーへ接続
支店ルーターのネットワーク(192.168.1.0/24)にオープンソース「TrueNAS Scale」によるファイルサーバー(NAS)を接続してみました。
本店ルーター側のPCからこの「支店ネットワークのTrueNAS Scale(NAS)へ接続」して動作確認してみます。
支店のOpenWrtルーター | 192.168.1.1 |
---|---|
ファイルサーバー(NAS) TrueNAS Scale | 192.168.1.40 |
では、本店ルーター側のPC(192.168.13.0/24)からこの「支店ネットワークのTrueNAS Scale(NAS)へ接続」して動作確認してみます。
上記は本店ルーター配下のパソコン(192.168.13.0/24ネットワーク)から支店ルーター配下のファイルサーバー(192.168.1.40/24)へ接続した様子です。
以上のように、本店(サーバー)から支店(クライアント)へWireGuard接続し、支店ネットワークのファイルサーバー(TrueNAS Scale)に接続することができました。
つながらない!?
WireGuard IPアドレスではピア(通信相手)のOpenWrtルーター管理画面につながるのに、いつものIPアドレスだとつながらない、という場合はOpenWrtルーターの経路情報を確認してみてください。
メニュー「ステータス > ルーティング」から「アクティブなIPv4ルーティング」を確認します。
上記は本店ルーターでの「アクティブなIPv4ルーティング」情報です。
「wg0」は本記事で作成したWireGuardインターフェースであり、本店ルーターではWireGuardネットワーク(10.0.1.0/24)と支店ネットワーク(192.168.1.0/24)が「wg0」インターフェースへルーティングされています。
また、下図は支店ルーターでの「アクティブなIPv4ルーティング」情報です。
支店ルーターではWireGuardネットワーク(10.0.1.0/24)と本店ネットワーク(192.168.13.0/24)が「wg0」インターフェースへルーティングされています。
つまり、ピア(通信相手)のネットワークセグメントがルーティングされていなければ本店・支店間での通信はできません。
この状態が正しくない場合には、本店・支店ルーターのピア設定を見直してください。
下図は本店ルーターのピア設定です。
ピア(通信相手)の定義画面の以下の部分がルーティング定義に影響を与える要素です。
許可されたIP | クライアント(支店ルーター)のWireGuardIPアドレス ※本記事の環境では”10.0.1.2/24″ |
---|---|
クライアント(支店)のネットワークセグメント ※本記事の環境では”192.168.1.0/24″ | |
許可されたIPのルート | チェックする |
本店・支店の各ルーターの「ピアの設定」で上記が正しく設定されていれば、「アクティブなIPv4ルーティング」にルーティング情報が反映されます。
まとめ
以上のように、2台のOpenWrtルーターを使ってWireGuardによる拠点間VPN接続環境を構築し、動作確認を行ってきました。
拠点間VPNはルーター同士をWireGuardネットワークで接続するだけで、それぞれのルーター配下のネットワーク同士もつながる、というのがポイントです。
サーバーやネットワーク機器の置き場所を意識することなく、複数拠点からサーバー・ネットワーク機器を利用することができるようになります。
2か所以上の拠点間接続もできる
本記事では「本店と支店」を想定した二か所の拠点間接続を説明してきました。
WireGuardではさらに多くの拠点と拠点間接続の環境を構築することができます。
WireGuardはいわゆるクライアント/サーバー型のVPNではないため(Peer-to-Peer型)、拠点の数が増えることでサーバーの通信負荷が高くなる、という問題もありません。
拠点を増やすのは本記事で紹介している「ピアの設定」を拠点に応じて増やしていくだけです。
ファイルサーバー(NAS)の遠隔地バックアップ
QNAPやSynologyといった高性能なNASの登場により、本店で「プライベートクラウド」などとして運用されている方も多くなってきたようです。
WireGuardによる拠点間VPN接続を使えば本店と支店のNASをどちらも使えたり、自動的に同期をとったり(バックアップ運用)できます。
また、地震・災害などへの対応として、遠隔地の親戚宅などと拠点間接続することで、大切なデータの遠隔地バックアップとなる仕組みとしても使うことができます。
WOL(Wake On LAN)と合わせて使う
ネットワークがつながっても実際に使いたいときにピアのサーバーの電源が落ちていた・・・という場合もあります。
こんなときはお手上げですが、Wake On LANと組み合わせて使えば遠隔地からでもサーバーの電源を入れることができます。
OpenWrtではWOL(Wake On LAN)のモジュールが提供されているのでピアのOpenWrtルーターにログイン後、OpenWrtルーターのWOL機能によりピアのサーバーの電源を投入する仕組みを作ることができます。
詳しくは以下の記事にて説明しています。