WSR-2533DHP2 を OpenWrt で汎用サーバーにしてみた (WireGuard編)

備忘録です。
ブリッジモードにして汎用サーバーとして運用できるようになった後の続きの話となります。

外出時にもローカルネットワークにアクセスしたいと思うことが多々あるため、VPN サーバーを本機で構築していこうと思います。
設定方法を考えていたところ、*寝草須乃介氏*に「**今の時代にVPN構築するなら、WireGuard使った方が快適では？**」と言われ、調べたところ良さそうに感じたので、今回はこちらで構築していきます。

>**2023年6月 追記**
現在は WireGuard を利用している Tailscale で運用を行っています。
このルーター、わりと性能高いので、半年ほど常時稼働させてもド安定しています。
面倒なので記事は書きませんが、OpenWrt 23.02 入れて、バイナリ落として、``--accept-routes --netfilter-mode=off --advertise-routes=***.***.***.*** --advertise-exit-node`` あたりを含めて起動すればいいだけですので、このイケてない記事など参考にせず、Tailscale 入れてくださいな

## 1. WireGuard のインストール
言うまでもないことですが、順を追って説明していきます。
LuCI が使えるので、そちらでインストールしても構いませんが、コンソールでサクッと入れてしまう方が簡単でしょう。
設定自体は LuCI で行う方が簡単なので、そちらや日本語化も含めインストールしておきます。

    opkg update
    opkg install wireguard-tools luci-app-wireguard luci-i18n-wireguard-ja


## 2. サーバー側の設定
LuCI にて `ネットワーク > インターフェース` にアクセスします。
`インターフェースを新規作成...` から以下の設定で作成します。

| 項目　　　 | 入力　　　　　 |
| --------- | ------------- |
| 名前　　　 | WG0           |
| プロトコル | WireGuard VPN |

続いて、`一般設定` で以下の通りに設定。

| 項目 | 入力 |
| - | - |
| リッスンポート | 51820 |
| IPアドレス | 192.168.12.1（任意） |

ここで、キーを生成ボタンをクリックして、秘密鍵や公開鍵を作ります。
公開鍵は**クライアント側**で利用するため、控えておきます。


## 3. クライアント側の設定
まず、空のトンネルを作成します。
インターフェースの設定は以下の通りです。

| 項目　　　　　 | 入力         |
| ------------- | ------------ |
| 名前 | WSR-2533DHP2（任意） |
| IPアドレス | 192.168.12.2（サーバー側と被らなければOK） |
| DNS サーバ | 8.8.8.8（任意） |

こちらもキーを生成しておいてください。
こちらの公開鍵は**サーバー側**で利用するため、控えておきます。


## 4. ピアの設定
接続するために、サーバーとクライアントを認識しあわせるための設定です。

まずは、クライアント側から。
先ほどのインターフェース設定画面（wg0）から `ピア` のタブを開き、`ピアを追加` から以下の設定で追加する。

| 項目　　　　　 | 入力         |
| ------------- | ------------ |
| 説明 | iPhone 13 mini（デバイス名などを入れて識別すると良い） |
| 公開鍵 | **3. クライアント側の設定** で生成した公開鍵を入力 |
| 許可されたIP | 192.168.12.2（**3. クライアント側の設定** で入力したIPアドレス） |
| 許可されたIPのルート | 有効（チェック） |
| 永続的なキープアライブ | 25（任意） |

続いて、クライアント側。
ピアを追加から、以下の通り設定する。

| 項目　　　　　 | 入力         |
| ------------- | ------------ |
| 公開鍵 | **2. サーバー側の設定** で生成した公開鍵を入力 |
| エンドポイント | 外部IPアドレス：開放中のポート番号 |
| Allowed IPs | 192.168.0.0/16（トンネルを通すアドレス範囲を指定） |

:::note
**エンドポイントについて**
例）123.456.789.012:50920
ポート番号は、**7. ルーターの設定** の **静的IPマスカレード設定** の **公開対象ポート** がそれに当たります。
:::

## 5. トラフィックルールの作成
`ネットワーク > Firewall` ページの `一般設定` タブの下部にある `Zones` に以下の設定を追加。

| 項目 | 入力 |
| - | - |
| 名前 | wgwan |
| Input | reject |
| Output | accept |
| Forward | reject |
| Masquerading | 有効（チェック） |

::: note
**WSR-2533DHP2 ではない機器で、この記事を参考にされている方へ**
Input / Output / Forward については、wan の設定と同じにしてください。
:::

続いて、`Traffic Rules` タブに移動し、以下の設定を追加。

**`一般設定` タブ**
| 項目 | 入力 |
| - | - |
| 名前 | Allow-WireGuard |
| プロトコル | UDP |
| Source zone | wgwan |
| 宛先ゾーン | デバイス（入力） |
| 宛先ポート | 51820 |

**`詳細設定` タブ**
| 項目 | 入力 |
| - | - |
| Restrict to address family | IPv4のみ |


## 6. NATインタフェースの作成
`ネットワーク > インターフェース` に戻り、`インターフェースを新規作成...` から以下の設定で作成。

| 項目 | 入力 |
| - | - |
| 名前 | WGNAT |
| プロトコル | 静的アドレス |
| デバイス | br-lan |

引き続き、以下の通り設定を行います。

**`一般設定` タブ**
| 項目 | 入力 |
| - | - |
| IPv4アドレス | 192.168.12.1（wg0 の IP アドレス） |
| IPv4ネットマスク | 255.255.255.0 |

**`DHCPサーバー` タブ > `一般設定` タブ**
| 項目 | 入力 |
| - | - |
| 開始 | 2 |
| 制限 | 16（1～254 の間で任意） |

**`DHCPサーバー` タブ > `詳細設定` タブ**
| 項目 | 入力 |
| - | - |
| 動的DHCP | 無効（チェックを外す） |


## 7. ルーターの設定
サーバーとクライアントの設定はこれで完了したので、後はルーター側の設定となります。
前回紹介した通り、私の光回線の接続方式は **MAP-E** なので、それに合わせた設定をしていきます。

::: note warn
NTT **PR-500MI** での説明となりますので、機種によって表記に違いや設定方法が異なります。
また、利用可能ポートの選定等、ご利用の環境に合わせて設定してください。
:::

### LAN側静的ルーティング設定
WireGuard 用にセグメントを分けて設定したので、アクセスできるように設定しておきます。
| 項目 | 入力 |
| - | - |
| 宛先IPアドレス/マスク長 | 192.168.12.0/24（wg0 のセグメント） |
| ゲートウェイ | 192.168.1.4（サーバーの IP アドレス） |

### 静的IPマスカレード設定
| 項目 | 入力 |
| - | - |
| 対象プロトコル | UDP |
| 公開対象ポート | 50920（任意の利用可能ポート） |
| LAN側宛先IPアドレス | 192.168.1.4（サーバーの IP アドレス） |
| LAN側宛先ポート | 51820 |


## 8. おわりに
クライアント側でトンネルを有効化し、ローカルに問題なくアクセスできることが確認できたら完成です。

こういった設定は不慣れなものなので、しっかりと理解せずにやってる部分がいくつかあります。
間違っている箇所や、指摘すべき場所がございましたらコメントにてお伝えいただければ幸いです。（気づくのに時間がかかるとは思います）


## 参考文献
https://openwrt.org/docs/guide-user/services/vpn/wireguard/server
https://yassi.hatenablog.com/entry/2021/12/25/011106 （めちゃ参考になりました。ありがとうございました。）
https://www.infrastudy.com/?p=1065