こんにちは💩うんちです。
今回は自宅に Raspberry Pi 4 で WireGuard のVPNサーバーを構築してみたので手順をまとめました。
WireGuard は公式のアプリが良くできていて、WindowsやMac、iPhoneなど、あらゆるプラットフォームで簡単に設定が行えます。そのため管理コストがとても低いのでおすすめです。
サーバー構築も驚くほど簡単でクライアントの設定まで終わらせるのに10分かかりません。気になった方は是非試してみてください。
なお WireGuard は P2P で通信するためサーバーやクライアントという概念ではないようですが、わかりやすくするためにこの記事ではRaspberry Pi側をサーバー、MacやiPhone側をクライアントという言葉を使います。
目次
Raspberry Pi の選び方
今回 Raspberry Pi 4 Model B / 8GB と Raspberry Pi Zero W で検証してみました。
VPN接続した状態でどちらもYouTubeで4k動画を3本同時に再生してみましたが安定して稼働します。
Raspberry Pi Zero WはCPU使用率が100%に張り付き、速度は少し遅くなりました。それでも2.5MB/s以上でたので一人で使う分には十分機能します。
速度を十分出したい場合は Raspberry Pi 4 Model B / 2GB あたりがコスパ良さそうです。
VPNサーバー構築手順
VPNサーバー構築は質問に答えていくだけで完了します。およそ3分くらいで終わります。
まず、Raspberry Pi のターミナルでインストールスクリプトを実行します。SSH経由でも問題ありません。
$ curl -L https://install.pivpn.io | bash
しばらくすると青い画面に切り替わります。画像つきですすめます。
Enterを押して次へ。
これはグローバルの固定IPなどの話ではなく、ローカルの静的IPのことを指しています。お使いのルーターのDHCP機能に対する設定になります。
Enterを押して次へ。
最新の64bit版 Raspberry Pi OSだとうまく認識していないのか、「Raspbianではないので静的IPの設定は行なえません」と出てしまいます。
この場合はルーター側で静的IPを割当ていれば、無視してEnterキーを押して進めて問題ありません。
通常であればこのように現在割り当てられているIPを静的IPに設定していいか聞かれます。
問題なければEnterを押して次へ。
Enterを押して次へ。
今回はデフォルトの pi
ユーザーしかいない状態だったのでこのままEnterを押して進めます。
検証だけならこれでいいかもしれませんが、できれば専用のユーザーを作ったほうがいいですね。
今回は WireGuard を使用したいので、このままEnterを押して次へ。
デフォルトでは 51820
ですが、気分で 51829
にしてみました。5桁の数字で他に使っていないポートなら何でも大丈夫です。このポートをルーター側で開放してあげる必要があります。
Yesを選択してEnterを押して次へ。
こだわりがなければ何でも大丈夫です。今回は匿名性が高く高速な CloudFlare
を選択してみました。
固定IPが割り当てられた回線であれば固定IPで問題ありません。そうでない場合はDDNSサービスなどを使う必要があると思います。
Enterを押して次へ
unattended-upgrades
はDebianやUbuntuなどのパッケージを自動でアップデートしてくれるものです。次のセクションで有効にするかどうか聞かれるのでこのままEnterを押して次へ。
Yesを選んでEnterを押して次へ。
プロファイル追加の方法が書いてありますが、後で詳しく解説するのでEnterを押して次へ。
Yesを選択してEnterを押して次へ。
Enterを押してRaspberry Piを再起動させます。
これでVPNサーバーの構築は完了です。かんたんですね。
クライアント用のプロファイルを作成
VPNサーバーは構築できたので、次は接続するクライアント側のプロファイルを作成します。
クライアントの設定はMacとiPhoneの手順を紹介します。WindowsやAndroid、Linuxなどでもだいたい同じになるかと思います。
まずはサーバー側で端末(クライアント)に設定するためのプロファイルを作成しましょう。このプロファイルというのはクライアントごとに作る認証情報のカタマリです。
プロファイルの作成は pivpn add
コマンドを使用します。
$ pivpn add
クライアントに名前をつけるように言われるので自分がわかりやすい名前をつけましょう。
今回は「UnchiDevice」としました。
これだけで必要なプロファイル情報が生成されます。
プロファイルは /home/pi/configs
に設置されます。
$ ls -la /home/pi/configs
このように UnchiDevice.conf
という名前でプロファイルが作成されているのがわかります。
中身は大事な情報が含まれているので漏洩しないように気をつけましょう。
Macの設定
まずサーバー側で作成したプロファイルをMac側に保存してください。場所はどこでも大丈夫です。
続いてクライアントアプリのインストールですが、MacのクライアントアプリはAppStoreからインストールします。
起動するとこのような画面になっています。
プロファイルを読み込むために真ん中の「Import tunnel(s) from file」をクリックします。
サーバーで生成したプロファイルを選択して「Import」をクリック。
WireGuardがVPN設定を追加することを許可するか聞かれているので、「Allow」をクリックします(日本語環境だと「許可」などになっているかと思います)。
これだけで設定は完了です。
真ん中らへんにある「Activate」ボタンをクリックするとVPN接続が確立します。
Statusが緑のランプになれば接続成功です。
接続を切るには「Deactivate」ボタンをクリックします。
これだけでです!
iPhoneの設定
続いてiPhoneの設定方法です。
まずはApp StoreでWireGuardをインストールします。
アプリの画面はこんな感じです。
右上の「+」をタップすると取り込み方法をきかれます。
一番かんたんなQRコードを選択します。
するとカメラが立ち上がります。
QRコードはサーバー側でターミナル上で表示させます。
$ pivpn -qr <プロファイル名>
このようにQRコードがでかでかと出力されるのでカメラをかざしましょう。
読み取りに成功すると名前をつけるように言われるので自分がわかりやすい名前をつけましょう。
ここでは「自宅」としています。
そうするとWireGuardがVPN設定を追加することを許可しますかと聞かれるので「Allow」を選択します(日本語環境だと「許可」など)。
iOSのVPN設定画面に飛ぶので、認証をします。
設定が完了するとWireGuardアプリに戻ってきます。
新しく「自宅」というプロファイルが登録されました。
右側のスイッチを押すとVPN接続を開始します。
VPN接続に成功すると上の方に「VPN」の文字が表示されます。
以上です!
驚くほど簡単にVPN環境が構築できてしまいました。
会社で導入する際もWireGuardのシンプルな仕組みのおかげで端末設定が非常にスムーズに行えそうですね。