RaspberryPiでVPNサーバー構築RTA

PC/デジモノ

最近流行り(?)のWireGuardでVPNサーバーを立ててみました。

これまではSoftEtherを使用していたのですが、設定が複雑で難儀をしていました。しかし、WireGuardであれば10分以内にすべての設定が完了してしまいます。今回はその手順を紹介します。

VPNサーバーとは?

VPNとはVirtualPrivateNetworkのことで、ある場所から、仮想的に別のネットワーク内にいるかのように振る舞うための仕組みです。難しいことはさておき、VPNサーバーを利用する利点は主に以下の2つです。

  1. 外出時に家庭内のネットワークの中にアクセスできる
  2. 接続先のネットワークまでは暗号化されるため公衆Wifi利用時のセキュリティが高まる

これらの目的のために最近では利用が増えており、有料のVPNサービスなども普及しているようです。有料のVPNサービスを利用した場合は、基本的に上記2の目的しか達成されません。自宅に置いてあるNASにアクセスする用途には使用できません。

上記2つのメリットを得るには自宅にVPNサーバーを設置する必要があります。

国によってはVPNの使用や頒布が禁止されているようです。理由はお察しですね。幸い、日本でこのような目的でVPNを使う必要はありませんが、海外から日本限定サービスを利用する際にもVPNは活用できます。
例えば、ビデオ配信サービスなどは日本国内IPからしか利用できないものも多いです。私も海外出張時に出先から自宅VPNに接続してこのようなサービスを利用していました。

WireGuardとは?

ここ数年とみに話題となっているVPNソフトウェアです。オープンソースで開発が進められていて機能を絞ることで高速性と安全性を両立しているのが特徴のようです。
Linuxのカーネルにも組み込まれているそうで、RaspberryPi向けには専用のセットアッププログラムまで用意されているので複雑な操作なしにセットアップすることができます。

VPNサーバー構築RTA(タイムアタック競技)

こんな競技はないのですが、WireGuardではあまりにもインストール・設定が早いのでセルフでタイムアタックを行いました。その結果、驚異の8分42秒で設定~接続確認まで完了しました。しかも半分以上はただの待ち時間です。手を動かす作業時間としては2~3分です。辛酸を舐めたSoftEtherの設定は何だったんでしょうか。

ちなみに今回の条件は以下の通りです。

  • RaspberryPi3A+(RaspberryPiOS 64bit Lite)
  • 事前にsudo apt update&upgradeまで完了させておく
  • 自宅ルーターには固定のグローバルIPアドレスが割り振られているとする
  • ルーターのポートマッピングの設定はタイムアタックの時間に含める
  • クライアント側WireGuardアプリのインストールはタイムアタックの時間に含めない

先ほども述べたように、ほぼダウンロードとインストールの待ち時間なので、Pi4Bなど高性能なモデルを使えばもっと時間は短くなると思います。試してみた方はぜひコメント欄に記録を書き込んでみてください(笑

インストール&設定方法

RTAは半分冗談なのですが、それだけ早く・簡単に済むというです。ここからはセットアップの具体的な方法を説明します。

今回はRaspberryPiOS 64bit Liteを使用しました。32bit版では途中の固定IPの設定でこけてしまうため、64bit版を設定しています。自身で固定IPの設定まで行うのであれば32bitでも問題ないはずです。

今回はルーターにグローバルIPが割り振られている状態での設定方法を説明します。幸運なことに我が家は実質固定のグローバルIPが割り振られているため、DDNSなどのサービスへの登録も省いています。
また、マンションなどでグローバルIPが割り当てられていない場合も今回の操作では有効なVPNサービスを構成することができませんのでご注意ください。

WireGuardのインストール

RaspberryPiOS64bitLiteをmicroSDカードに差し込み、初期設定(ネットワークへの接続等)を済ませ、apt update&upgradeまで完了したところからスタートします。

$curl -L https://install.pivpn.io | bash

これでインストールが始まります。apt update&upgradeを事前に済ませておかなかったとしてもインストール中に勝手に行ってくれるようです。ここで5分程度かかりますので少し待ちます。その後、ウィザードが表示されますので、順に必要な項目を入力していきます。OKを選択して次に進むしかない画面、入力内容を確認するだけの画面は省いています。


標準ではDHCPによりIPの割り当てが行われています。固定IPに変更するため<NO>を選択

WireGuardセットアップ画面


現在の割り当て設定をそのまま使うか聞かれるので<No>を選択

WireGuardセットアップ画面


固定IPとして割り当てたいアドレスを入力して<Ok>

WireGuardセットアップ画面


デフォルトゲートウェイとして割り当てたいアドレスを入力して<Ok>

WireGuardセットアップ画面


ユーザーを選択

WireGuardセットアップ画面


今回はもちろんWireGuardを選択して<Ok>

WireGuardセットアップ画面


使用するポート番号を入力してください。標準では51820のようですが他と被らなければなんでもOKです。
ルーター側のポートマッピングでも使用しますので覚えておいてください。

WireGuardセットアップ画面


DNSアドレスを指定します。ここでは<Custom>を選択。

WireGuardセットアップ画面


DNSアドレスを入力します。各自の環境に合わせて入力してください。

WireGuardセットアップ画面


現在のグローバルIPを使うかDNSサービスを使うか聞かれます。
固定されたIPを持っているので上の選択肢を選んで<Ok>
(ぼかしを入れた部分にグローバルIPが表示されています。)

WireGuardセットアップ画面


セキュリティパッチを自動で更新するか聞かれるので<Yes>

WireGuardセットアップ画面


いわれるがままに再起動します。

WireGuardセットアップ画面

再起動後、次のコマンドで設定を追加します。識別のための名前を聞かれるので適当に設定します。
ここではhogeDevとしています。

$ pivpn add
Enter a Name for the Client: hogeDev
この時点でhomeディレクトリにconfigsディレクトリが作成され、その中に****.confというファイルが作られています。Windows側で設定を行う場合はこのファイルを接続したいPCにコピーしておいてください。

以下のコマンドで画面にQRコードが表示されます。このQRコードをアプリで読み込めば設定が完了する算段です。

ちなみに、ターミナルソフトとしてTeraTerm(ver4,ver5)を使用していますが、TeraTermでは表示が崩れてしまい、QRコードがうまく表示できませんでした。この部分の操作については実機で行う必要があります。もしくは先に説明したconfファイルを読み込ませてもOKです。

$pivpn -qr

ルーターの設定

各自のルーターの設定が異なると思いますのでポイントのみ説明しますが、WireGuardセットアップ時に設定したポートへのアクセスを固定したLAN側IPアドレス(WireGuardを設定したRaspberryPiのIPアドレス)へ転送するように設定してください。プロトコルはUDPのみでOKです。

WireGuardで使うのは1ポートのみで、プロトコルもUDPしか使いません。

スマートフォンの設定

AndroidならPlayStore、iPhoneならAppStoreからWireGuardのアプリをインストールしてください。

WireGuard - Google Play のアプリ
VPNトンネルをセキュアWireGuard
‎WireGuard
‎WireGuard is a fast, modern, and secure VPN tunnel. This app allows users to manage and use WireGuard tunnels. The app ...

それぞれアプリを起動したら、+ボタンもしくはトンネルの追加をタップしてQRコードから読み取りを選択します。カメラが起動するので先に表示させておいたQRコードを読み込み、自分が識別するための名前を設定すれば完了です。

設定後、接続できるか確認してみてください。なお、モバイル端末がVPNサーバーと同じネットワーク内にいる場合は正常に接続ができませんので、Wifiは切断してモバイルネットワークから試してください。

WindowsPCの設定

接続用アプリを公式ページからダウンロードしてください。

Installation - WireGuard

このアプリの設定で先に説明したconfファイルを読み込ませれば設定は完了します。

まとめ

いかがだったでしょうか?SoftEtherやOpenVPNは設定がとにかく大変で挫折した人もいるかもしれません。(私も今でもすんなり構築できる自信はありません)

しかし、WireGuardは下馬評の通り設定は簡単です。自宅にグローバルIPが割り当てられている人は試す価値アリです。RaspberryPi3Bの有線接続であれば少なくとも数十Mbps程度の速度がでることは確認できていますので有料VPNサービスを使うよりは格段に安上がりに済みます。

次はRaspberryPiのモデルごとに速度検証を行う予定です。

コメント

  1. こんにちは。
    この記事を見て、Raspberry Pi3BでVPNサーバを構築してみた者です。

    前回の記事の速度比較の下部に記載のある共立エレショップで購入しました。
    大変安く購入できて嬉しく思います。有益な情報をありがとうございます!

    実際に記事と同じようにVPNサーバを構築してみたのですが、上り下り共に15Mbps程度しか出ません。前回の記事では、3Bでも80Mbps程出ているように見受けられます。
    接続状況は、au光⇒Raspberry Pi⇒iPhoneです。au光は500Mbps程度、iPhoneは楽天回線で100Mbps程度出ています。
    スループットに関して、特別な設定等ありましたか?

    もしよろしければ情報をいただけますと幸いです!

  2. コメントありがとうございます。
    スループットなどここで取り上げた以外の設定は特にしていません。

    あくまで個人的な感覚なのですが、モバイル回線の場合は回線速度計測の結果が不安定であてにならない気がしています。モバイル回線での計測もしてみたのですが、振れ幅が大きすぎてデータとして掲載できませんでした。
    もしかするとこの辺りが影響しているのかなという気がします。
    ちなみに、当時のメモを確認してみたのですが
    ・サーバー側が3B
    ・UQモバイル回線のAndroid端末
    ・VPNを通さない状態で下りが約80Mbps、上りが約40Mbps
    の条件で試したときの速度は、下りが15~60Mbps、上りが7~30Mbpsという結果でした。

    これだ!という解決の情報がなく申し訳ないです。

    • ご返信ありがとうございます!

      モバイル回線だから安定していないのかもしれませんね。
      近々、光回線でテスト出来る環境があれば試してみようと思います!