さくらのクラウド VPNルータ入門 6. WireGuardによるリモートアクセスで接続しよう

公開:最終更新日:

さくらのクラウドの「VPNルータ」をこれまで5回にわたって紹介してきました。第4回までは、さくらのクラウド上でVPN(仮想プライベートネットワーク)を構築する際に必要となるDHCPなどさまざまな機能を紹介し、前回記事で「L2TP/IPSec」によるリモートアクセス機能をまとめました。

そして今回は、さくらのクラウドの「VPNルータ」が対応している、より新しいVPNプロトコルの「WireGuard」による接続についてまとめていきます。

WireGuard とは

WireGuard(ワイヤーガード)は、軽量かつ高速なVPNプロトコルであり、シンプルな設計と高いセキュリティを特徴とし、次世代VPN技術としてよく紹介されます。Linuxカーネルへの標準統合をはじめ、Windows・macOS・iOS・Androidなど幅広いプラットフォームで利用でき、従来のIPsecやOpenVPNに代わるVPNとして注目されています。

👉 WireGuard: fast, modern, secure VPN tunnel

とくにLinuxではカーネルレベルで動作する実装により、OpenVPNなどのユーザー空間VPNよりも低レイテンシかつ高スループットが実現でき、クラウド環境やコンテナ基盤、リモートアクセス用途でも高いパフォーマンスを発揮するため、クラウドネイティブアプリケーションやゼロトラスト系セキュリティサービスなどでよく採用されています。

従来のVPNは設定の複雑さやパフォーマンスの課題がありましたが、WireGuardは「シンプル」「高速」「安全」を設計思想としており、数千行程度のコンパクトなコードベースによって実装されており、設定ミスや脆弱性のリスクを減らしつつ、高速な通信性能が実現できます。

設定項目が非常に少なく、VPN構築に必要な情報は主に「公開鍵」「通信先」「許可するネットワーク」のみです。従来のVPNに見られる証明書管理や複雑な暗号スイート選択が不要で、短時間で構築できます。歴史のあるVPNと異なり、WireGuardは新しい暗号アルゴリズムのみを採用しており、以下のようなアルゴリズムが固定で使用されます。これにより暗号方式の選択ミスを防ぎ、安全な通信をデフォルトで提供します。

  • ChaCha20(暗号化)
  • Poly1305(認証)
  • Curve25519(鍵交換)
  • BLAKE2s(ハッシュ)

認証方式はユーザーIDやパスワードではなく、公開鍵暗号方式で通信相手を識別します。あらかじめ登録した公開鍵を持つ端末のみ通信を許可するため、コンセプトとしてゼロトラストに近しいアクセス制御が行われます。

InterfaceとPeer

WireGuardは、2つの概念で構成されます。

  • Interface:自分自身の設定(秘密鍵・VPN内IPアドレスなど)
  • Peer:通信相手の設定(公開鍵・接続先・許可ネットワークなど)

VPN接続時は、双方が互いの公開鍵を登録することで通信が成立します。これは従来の認証サーバ型VPNとは異なり、事前に許可された端末のみ接続できる仕組みです。慣れるまでは違和感があるかもしれませんが、WireGuardのサーバ(今回の例でいえばさくらのクラウドの「VPNルータ」)と接続を行うクライアントPCは、Peerとしてあらかじめサーバ側に公開鍵が登録されている必要があります。

前提とするVPNルータの設定環境をおさらい

前回のL2TP/IPSecで接続した「VPNルータ」と同様のネットワークを引き続き操作していきます。設定環境をおさらいしておきましょう。

まず「VPNルータ」には「グローバル」と「プライベート1」のインターフェースがあり、このうち「グローバル」には共有セグメントとして、インターネットと接続されたグローバルIPアドレスが割り当てられています。

また「プライベート1」には192.168.0.0/24のIPアドレスブロックが割り当てられています。

このインターフェースのプライベートネットワークに対して、DHCPサーバがIPアドレスを指定した範囲で割り当てます。

実際に1台の仮想サーバーが起動しており、ここでは192.168.0.206が割り当てられています。

この記事で実現すること

今回の記事では、Windows PCにWireGuardクライアントをインストールし、さくらのクラウドの「VPNルータ」で稼働するWireGuardにリモートネットワーク接続してみます。

クライアントIPの静的な割り当て

前回のL2TP/IPSecではプライベートインターフェース1のIPアドレスブロック(192.168.0.0/24)から一部を指定しましたが、WireGuardの場合は異なるIPアドレスブロックを指定する必要があります。今回は、WireGuardに10.0.0.0/24のアドレスブロックを使用します。

また、通常のVPNはクライアントに動的なIPアドレスを割り当てることが一般的ですが、WireGuardではそれは通常行われません。これはゼロトラスト的な考え方に基づいており、IPアドレスの許可リストを管理する設計思想であるためです。

このため、接続先となる「VPNルータ」のWireGuardサーバーと、接続元になるWireGuardクライアントには、それぞれ次のIPアドレスを静的に使用します。

  • WireGuardサーバー … 10.0.0.1/24
  • WireGuardクライアント … 10.0.0.2/24

以降の設定例でもこのIPアドレスを入力します。

VPNルータ側の設定1. WireGuardの設定

最初に「VPNルータ」側で、「WireGuardサーバ」機能を有効にしましょう。コントロールパネルの「リモートアクセス」タブを開き、さらに「WireGuardサーバ」タブを選択します。

右下の「編集」をクリックして「編集: WireGuardサーバ設定」ウィンドウを開きます。

ラジオボタンの「有効」を選択すると、WireGuardのネットワークに与えるIPアドレスレンジを指定できます。前述のように10.0.0.1/24を入力します。右下の「更新」をクリックして編集を終了し、上部の「反映」をクリックします。

なお「WireGuardサーバ」タブで表示されている「公開鍵」欄の文字列は、この後でクライアント側の設定に使用します。

WireGuardクライアントのインストールとピア設定

続いてクライアントPCにWireGuardのクライアントアプリケーションをインストールします。公式サイトから、OSにあわせたインストール方法が紹介されています。今回はWindowsを使用するので、インストーラーをダウンロードして、起動します。

👉 Installation – WireGuard

インストールが完了するとWireGuardクライアントを起動し、次のような設定ダイアログが開きます。

設定画面の下部にある「トンネルの追加」をクリックします。設定をファイルからもインポートできますが、ここでは「空のトンネルを追加」を選択します。

手動で設定を記述する「トンネルの編集」ウィンドウが開きます。区別しやすい「名前」を記入してください。また「公開鍵」は、この後で「VPNルータ」側の設定で使用します。

WireGuardクライアントの設定内容

編集画面にある設定内容のうち、あらかじめ表示されている「PrivateKey」はそのまま修正しないで残してください。それ以外を以下のように編集します。

[Interface]
PrivateKey = wxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ← あらかじめ表示されている秘密鍵をそのまま残す
Address = 10.0.0.2/24

[Peer]
PublicKey = wxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ← VPNルータの公開鍵を記入する
Endpoint = 133.125.238.37:51820
AllowedIPs = 10.0.0.0/24,192.168.0.0/24
PersistentKeepalive = 25

「Address」には、クライアント自身に割り当てるIPアドレスを記載します。上記「クライアントIPの静的な割り当て」に示した通りです。

「PublicKey」には、先ほど「WireGuardサーバ」タブに表示されていた「公開鍵」欄の文字列を記載します。

「Endpoint」には、さくらのクラウドの「VPNルータ」で外向けIPアドレス(共有セグメント)に割り当てられているIPアドレスに、WireGuardのポート番号(51820番)を付けて指定します。

「AllowedIPs」は、ルーティングテーブルのような役割を果たします。WireGuardに割り当てられたネットワーク(10.0.0.0/24)へ接続を確立したのち、「VPNルータ」の「プライベート1」のネットワーク(192.168.0.0/24)へのルーティングを行うために必要な設定です。

編集できたら設定を「保存」します。

VPNルータ側の設定2. WireGuardクライアントのピア設定

次に「VPNルータ」側でこのクライアントをピアとして設定します。先ほどの「WireGuardサーバ」タブの下半分にある「WireGuardピア」に追加します。

右下の「追加」をクリックして「WireGuardピア追加」画面を開きます。

適当な「名前」を付けて、前述のように「IPアドレス」にはクライアントに割り当てる10.0.0.2を設定します。その下の「公開鍵」には、WireGuardクライアントの「トンネルの編集」ウィンドウで表示されている公開鍵を入力します。

入力できたら「追加」をクリックして、上部の「反映」をクリックします。

なお「VPNルータ」の「WireGuardサーバ」機能には、ピアの登録数や同時接続数に上限があります。目安としては、マニュアルの「VPNルータとは」のリモートアクセスクライアント数をご参照ください。

接続と確認

ここまででサーバー側とクライアント側の設定がそれぞれ完了しています。実際に接続してみましょう。WireGuardクライアントで「有効化」をクリックします。

送受信ともにいくらかのデータが流れていれば接続は完了しています(ピアの設定に失敗していると、送信は行いますが受信は行われません)。

疎通しているかをPingコマンドで確認してみましょう。

C:\Users\h-kameda>ping 192.168.0.206

192.168.0.206 に ping を送信しています 32 バイトのデータ:
192.168.0.206 からの応答: バイト数 =32 時間 =43ms TTL=63
192.168.0.206 からの応答: バイト数 =32 時間 =26ms TTL=63
192.168.0.206 からの応答: バイト数 =32 時間 =33ms TTL=63
192.168.0.206 からの応答: バイト数 =32 時間 =35ms TTL=63

192.168.0.206 の ping 統計:
    パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 26ms、最大 = 43ms、平均 = 34ms

C:\Users\h-kameda>ping 10.0.0.1

10.0.0.1 に ping を送信しています 32 バイトのデータ:
10.0.0.1 からの応答: バイト数 =32 時間 =25ms TTL=64
10.0.0.1 からの応答: バイト数 =32 時間 =33ms TTL=64
10.0.0.1 からの応答: バイト数 =32 時間 =26ms TTL=64
10.0.0.1 からの応答: バイト数 =32 時間 =26ms TTL=64

10.0.0.1 の ping 統計:
    パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 25ms、最大 = 33ms、平均 = 27ms

上記のように表示されれば、疎通が完了しています。

注意点として、WireGuardではトンネルが確立していても、必ずしも通信できる状態とは限りません。送受信バイト数が増加しているにもかかわらずサーバーにアクセスできない場合は、WireGuardクライアントの「AllowedIPs」の設定や、VPNルータ側のピア設定、接続先となる仮想サーバーのファイアウォール設定を確認してみてください。

参考リンク

本記事では、さくらのクラウドのマニュアルから以下のページを参照しています。

また、WireGuardの公式サイトを参照しています。

VPNルータの料金については以下サイトをご確認ください。評価・検証で利用した場合、作業終了後に速やかにサービスを削除することでコストを抑制できます。

※プレミアムプラン以上をご利用の場合、上位に「ルータ+スイッチ」が必要となるため「ルータ+スイッチ」の料金も発生いたします。

亀田治伸
制作者

クラウド事業本部

亀田治伸

兵庫県伊丹市出身、米国州立南イリノイ大学卒業。認証系独立ASP、 動画・音楽配信システム構築、決済代行事業者、外資クラウドエバンジェリスト数社を経て現職。得意領域は、認証、暗号、ネットワークを中心としたセキュリティ、 映像配信、開発手法に見る組織論、クラウドアーキテクチャ、プレゼンテーション。