Tech Note Plus

PC から Azure まで幅広い伝道を目指してます

OpenWrt で ASUS ルーターと Site to Site WireGuard VPN を構成する

この記事では OpenWrt と ASUS ルーター (ASUSWRT) を用いた WireGuard VPN に関する設定を記載しています。 OpenWrt を用いて実家ルーターも入れ替えるつもりで各種検証をしていたわけで、それがなぜ ASUSルーターに落ち着いたのかも併せて記載します。

実家のルーターに求めていた機能要件

細かく言えば DHCP サーバー機能とか DNS サーバー機能とかありますが大きくは以下の通りです。 NAS とか VPN に関しては以前の記事のように OpenWrt での実装検証も済んでおりました (T-T)

機能要件 内容
インターネット接続 V6 プラス (MAP-E) でのインターネット接続機能
無線アクセスポイント WiFi 6 の無線機能
簡易 NAS 外付け USB-HDD を用いてのファイルサーバー機能
VPN WireGuard を用いての Site to Site VPN 機能

なぜ OpenWrt ではなく ASUSルーターになったのか

インターネット接続

V6 プラス (いわゆる MAP-E) はその性質上、ユーザーが利用できるポートが動的に 225 個に限定されるわけですが、セッション確立時に用いるポートに偏りが発生するなどの問題があるようです。 もちろん OpenWrt では解決策もあるようですがそれのためにまた一工夫必要とのこと。

無線アクセスポイント

OpenWrt は無線関係の性能が割と追いついていないようで、海外のコミュニティなどを見ても WiFi 6 の構成は安定させるのが難しそうでした。(技適がない、構成できない、速度が落ちるなど。。。)

遠隔地故の安定性

以前の記事で触れましたが OpenWrt は割とアップデートが大ごとです。また、通常利用に関しても自力解決が基本の製品です。自宅のようにすぐにローカルアクセスできるわけでもなく、OpenWrt での運用継続は心配でした。遊び < 安定というわけです。

そんな時に見つけた WireGuard に対応した ASUSルーター

その名は TUF Gaming AX4200

未完成の WireGuard を採用している市販の VPN ルーターなど無いと先入観で思い込んでいましたが、ASUS は普通に対応していることを知り調査をした結果、 上記の要件 (やコストなども含めて) を満たしているルーターを発見して、それに乗り換えることにしたわけです。

www.asus.com

AX4200 の外観など

ASUSWRT って名前からしても OpenWrt の OEM みたいなもの?

ルーター OS のことを ASUSWRT と呼ぶ辺り、また、実際に触ってみた感覚からも中身は OpenWrt なんですかね。。。とすると、今までやってきたことも活きそうというのも採用した理由でした。

VPN に求める要件

やりたいこと

それまで利用していた Synology RT2600ac では OpenVPN サーバー機能は提供されていましたが、可変ポートで構成可能な Site to Site の VPN 機能はありませんでした。 どうせ最新のアーキテクチャーを採用するのであれば双方向で通信可能なように設定してみようと思います。

AX4200 における WireGuard 実装方法

特に機能追加などは必要なく、最新版のファームウェアにした状態であれば既定でメニューが存在するので設定するだけです。

やりようはあるのでしょうが手間を軽減する意味で、AX4200 → OpenWrt の順で設定するのがポイントとなります。AX4200 側で生成した公開鍵と秘密鍵を用いて OpenWrt の WireGuard を設定するわけです。

OpenWrt における WireGuard 実装方法

こちらは以前の記事を参照してください。 cube309b.hatenablog.com

AX4200 側の WireGuard 設定方法

インターネット接続や LAN 設定などの基本的な設定は済ませた状態で臨んでください。 押しやすいボタンの形状をしているのですが、一度 OpenWrt 側の設定を始めたら鍵の再生成などは行わないようにしてください。設定やり直しに。。。

  1. [VPN サーバー]-[WireGuard VPN]-[詳細設定] Pre-shared Key (Secret) を有効に変更し、残り 2 つを無効化します。

  2. [VPN サーバー]-[WireGuard VPN]-[全般] 以下の設定を行い、全ての設定を適用 を押します。

    設定項目 設定値
    Tunnel IPv4 and / or IPv6 Adress 重複しない任意のアドレス
    Listen Port V6 プラスで利用可能なポート番号 ※

    ※ [システムログ]-[IPv6] v6plus Usable Port Range: に表示される。便利や・・・

  3. [VPN サーバー]-[WireGuard VPN]-[全般]-[VPN クライアント] 追加 をし、以下の設定を行い、適用 を押します。

    設定項目 設定値
    Address 前項で作成した「重複しない任意のアドレス」のレンジ内の IP
    Allowed IPs (サーバー) OpenWrt 側の LAN のアドレス
    Allowed IPs (Client) AX4200 側の LAN のアドレス
  4. 作成が終わったクライアントのエクスポート画面から PrivateKey、PublicKey、PresharedKey を控えます。

OpenWrt 側の WireGuard 設定方法

以前の記事で GUI 設定手法はお伝えしたので今回は CLI での設定方法で記載します。なお、設定自体はコマンドで実際に行ったのですが、ブログ掲載用に中身を修正した後の実行はしていません。

  1. SSH で OpenWrt に接続し、変数を定義します。

    VPN_DEF="定義の全体的な名称 (任意)"
    VPN_S1N="OpenWrt 側の定義の名称 (任意)"
    VPN_S1G="OpenWrt 側のグローバル IP アドレス"
    VPN_S1L="OpenWrt 側の LAN 内のアドレス (前項で指定した値)"
    VPN_S1P="OpenWrt 側の待ち受けポート"
    VPN_S2N="AX4200 側の定義の名称 (任意)"
    VPN_S2G="AX4200 側のグローバル IP アドレス"
    VPN_S2L="AX4200 側の LAN 内のアドレス (前項で指定した値)"
    VPN_S2P="AX4200 側の待ち受けポート (前項で指定した値)"
  2. 続けて、鍵情報をファイルに出力します。

    echo 前項でエクスポートした PrivateKey の文字列 > ${VPN_S1N}.key
    echo 前項でエクスポートした PublicKey の文字列 > ${VPN_S2N}.pub
    echo 前項でエクスポートした PresharedKey の文字列 > ${VPN_DEF}.psk
  3. 最後に、実行コマンドを入力します。

    uci set network.wg0=interface
    uci set network.wg0.proto="wireguard"
    uci set network.wg0.private_key="$(cat ${VPN_S1N}.key)"
    uci set network.wg0.listen_port=${VPN_S1P}
    uci set network.wg0${VPN_S2N}=wireguard_wg0
    uci set network.wg0${VPN_S2N}.description=${VPN_S2N}
    uci set network.wg0${VPN_S2N}.public_key="$(cat ${VPN_S2N}.pub)"
    uci set network.wg0${VPN_S2N}.preshared_key="$(cat ${VPN_DEF}.psk)"
    uci add_list network.wg0${VPN_S2N}.allowed_ips=${VPN_S2L}
    uci set network.wg0${VPN_S2N}.route_allowed_ips="1"
    uci set network.wg0${VPN_S2N}.persistent_keepalive="25"
    uci set network.wg0${VPN_S2N}.endpoint_host="${VPN_S2G}"
    uci set network.wg0${VPN_S2N}.endpoint_port="${VPN_S2P}"
    uci commit network
    uci add_list firewall.@zone[0].network="wg0"
    uci add firewall rule
    uci set firewall.@rule[-1].family="ipv4"
    uci set firewall.@rule[-1].proto="udp"
    uci set firewall.@rule[-1].src="wan"
    uci set firewall.@rule[-1].target="ACCEPT"
    uci set firewall.@rule[-1].name="Allow-WireGuard(${VPN_DEF})"
    uci set firewall.@rule[-1].dest_port=${VPN_S1P}
    uci commit firewall
    /etc/init.d/network restart
  4. これで接続可能になるので動作確認を行ってください。

加えて外部からモバイル等で接続する

もちろん可能でして、私は 外部 → 自宅 ⇔ 実家の Hub 型で構成しました。 この構成のポイントは、両端は直接つながっていないため、外部側にも実家側にもお互いのアドレスを Allowed IPs に含める必要があるというのがポイントです。

Point to Site の接続方法は以下を参考にしてください。 cube309b.hatenablog.com

おまけ (Samba に WireGuard 越しで接続できない)

AX4200 上に簡易 NAS の機能を構成したわけですが、WireGuard VPN 越しだと一切つながりません。LAN 内からは接続できます。 これは、Samba が既定で WireGuard VPN インターフェースでリッスンしていないことによるものです。そのため、以下の対応が必要となります。

  1. [管理]-[システム]-[サービス] SSH を有効にするを選択してください。

  2. SSH で AX4200 に接続し、/tmp/etc/smb.conf ファイル内の interfaces 行と hosts allow 行にアクセスさせたいセグメントを追加します。

  3. smbd nmbd のサービスを再起動させます。

設定のための参考サイト

設定に当たっては、以下の情報を参考にしました。が、正直意味が分からなかったので自分で試しました。。。当然ですが、ASUSASUS の想定ですし。

www.asus.com

実家のルーター入れ替えを終えて

ついに OpenVPN を止めて WireGuard に乗り換えることに成功しました。次回はちょっと現状を振り返る会にしてみたいなと。


Note
・ 当ブログは個人主催であり、ブログ中のすべての情報は個人的な観点となります。
・ 情報については正確な内容となるよう努めますが、完全性や正確性、有用性、安全性、最新性について一切保証できかねます。