Raspberry Pi4にUbuntu 24.04入れてPiVPNを使って簡単にWireGuardを導入する

この記事は約9分で読めます。

今回は Raspberry Pi4Ubuntu 24.04 をインストールし、 PiVPN を使ってVPNを構築する方法を紹介します。

PiVPNを使えば、手軽に自宅サーバーVPN接続が可能になります。
今回は CLI(コマンドライン)を使って、インストールから設定、そして動作確認までの手順を一気に解説していきます。

1. Raspberry Pi4にUbuntu 24.04をインストールする

まず最初に、 Ubuntu 24.04 をRaspberry Pi4にインストールします。

この手順は簡単で、以下のステップに従って進めてください。

ステップ1:Raspberry Pi Imagerのダウンロード

Raspberry Piの公式サイトからRaspberry Piの起動メディアを作成するためのツールをダウンロードします。

Raspberry Pi Imager

ステップ2:SDカードにイメージを書き込む

Raspberry Pi Imager を使って microSDカード に書き込みます。

ここではユーザー、Wi-Fi設定やSSHの有効化もしておくと便利です。

まずは「デバイスを選択」をクリック。

今回はraspberry Pi 4を選択。

次に「OSを選択」をクリック。
少しスクロールして、『Other general-purpose OS』をクリックします。

「Ubuntu」を選択。

現時点で最新のLTSを選択します。
今回は『Ubuntu Server 24.04.1 LTS(64-bit)』を選択。

「ストレージを選択」をクリック。
PCに接続している外部ストレージが表示されるので、ラズベリーパイのOSを書き込むメディアを選択します。

OSのカスタマイズをするか聞かれるので、「設定を編集する」をクリック。

カスタマイズでは、ホスト名、OSで使用するユーザーの作成やSSH接続の設定ができます。
お好みで設定してください。

SSHの公開鍵の生成などに関してはこちらをご参照ください。

SSH設定

ステップ3:Raspberry Piを起動

イメージが書き込まれたmicroSDカードを Raspberry Pi4 に挿入し、電源を入れます。

設定したユーザーでログインできればOSの準備は完了です。


2. PiVPNのインストール

次に、Raspberry Pi上に PiVPN をインストールしていきます。

PiVPNはOpenVPNやWireGuardのようなVPNサーバーのセットアップを簡単にしてくれるツールです。

今回はWireGuardを使用した例を紹介しますが、OpenVPNも選べます。

ステップ1:PiVPNのインストール

まずはUbuntuのパッケージを最新にしておきましょう。

sudo apt update && sudo apt upgrade -y

次に、PiVPNのインストールスクリプトを実行します。

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

ステップ2:PiVPNのセットアップ

インストールスクリプトが走った後、 PiVPNのセットアップウィザード が表示されます。
以下の手順に沿って進めていきます。

Screenshot

WireGuard を選択(Tabキーでカーソルを<OK>に合わせてスペースキー)

Screenshot

インストールするユーザーを指定

Tabキーでカーソルを<OK>に合わせてスペースキー

IPアドレスが固定になってないぞ!って注意されますが我が家ではルーター側でMACアドレスとIPを紐づけているので一旦無視します。

Screenshot

ポート番号の設定

デフォルトは51820。必要に応じて変更可能です。
変更する場合は設定したいポートを入力します。

v6プラスなどを契約している場合は外部からアクセスできるポートが決まっているため、現在のアドレスから利用可能なポート番号を調べた上でポート番号を変更しましょう。

Goolgeで「IPv6 ポート確認」などで調べると使えるポートを調べられるサイトがありますので利用しましょう。

    Screenshot
    Screenshot

    DNSプロバイダー を選択します。

    私はGoogleを選択しました。

      Screenshot

      VPNサーバーのIPアドレス、またはホスト名を入力します。

      外部からアクセスする場合、グローバルIPか事前にDDNSサービスを利用して名前解決できる用にしておく必要があります。

      わからない方はDDNSで調べてみてください。

      クライアントの設定でサーバーを指定する方法を選択します。グローバルIP or DNS名。

      <OK>で進みます。

      Screenshot

      再起動するか聞かれるので<OK>を選択して再起動します。

      セットアップが完了すると、PiVPNが正常に動作するための WireGuard の設定ファイルが自動で作成されます。

      このウィザードで設定した内容は、/etc/pivpn/wireguard/setupVars.confに記述されています。

      /etc/pivpn/wireguard/setupVars.conf

      このconfファイルを手動で変更も可能です。ただ、ポートの指定を間違えた場合に修正する程度にしておいた方がいいかと思います。

      設定を書き換えた後に再起動すると反映されます。


      3. PiVPNの設定とクライアント追加

      ステップ1:クライアント端末にWireGuardクライアントをインストール

      WireGuardの公式サイトから、クラアントアプリのインストールをしてください。

      Installation - WireGuard

      ステップ1:WireGuardクライアント設定の作成

      PiVPNをセットアップした後、VPNに接続するためのクライアント設定を作成します。
      これを使って、スマホやPCからVPN接続を行います。

      pivpn add

      コマンドを実行すると、クライアント名やキーの生成が始まります。
      クライアント名は自分でわかりやすい名前をつけてください。
      設定が完了すると、.confファイル が生成されます。

      ステップ2:設定ファイルの確認

      生成された設定ファイルは次のディレクトリに保存されています。

      /home/<インストール時に指定したユーザー>/configs/<クライアント名>.conf

      この .confファイル をクライアントデバイス(スマホやPC)に転送します。
      PCに転送する場合はSSHやSCP、スマホに転送する場合はQRコードを利用して転送が可能です。

      QRコードで転送する場合

      pivpn -qr

      作成済みのクライアントリストが表示されるので、QRコードを生成したいクラアント番号を指定します。

      1) iPhone
      2) MacBook
      3) iPad
      Please enter the Index/Name of the Client to show:

      動作確認する

      QRコードが表示されますので、WireGuardのスマホアプリで読み取ってください。

      スマホのWi-Fiを切り、モバイル回線の状態でVPNを有効にした状態で、SSHクライアントアプリ等で自宅のPCなどにアクセスしてみましょう。

      もしくはPCをスマホのテザリングで繋いで試す方が楽かもしれません。


      自宅経由でインターネット接続できるVPNにする

      ここまででは、外部から自宅のVPNサーバーまでしかアクセスできず、VPNを使ったインターネットはできません。

      ここからの手順を踏むことで、自宅回線を経由したインターネット接続が可能になります。

      ステップ1:IPフォワーディングの有効化

      まず IPフォワーディング を有効にします。
      これを行うことで、VPNクライアントのトラフィックがVPNサーバー経由でインターネットにルーティングすることを許可します。

      1. /etc/sysctl.conf ファイルを編集します。
      sudo vi /etc/sysctl.conf
      1. ファイル内で、次の行を見つけてコメントを解除します(先頭の # を削除します)。
      net.ipv4.ip_forward=1
      1. ファイルを保存して閉じた後、次のコマンドで設定を反映します。
      sudo sysctl -p

      これで、Raspberry Piがパケットをフォワード(転送)できるようになります。


      ステップ2:iptablesでNATを有効化する

      WireGuardのプロセスが起動している時だけ、IPフォワーディングする設定にします。

      WireGuardのインストール時に生成されたゲートウェイの設定ファイルを編集します。

      sudo vi /etc/wireguard/wg0.conf

      ListenPortの下に下記を追記します。

        PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; iptables -t nat -A POSTROUTING -s <クライアントに割り当てるIPセグメント>/24 -j MASQUERADE
        PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; iptables -t nat -D POSTROUTING -s <クライアントに割り当てるIPセグメント>/24 -j MASQUERADE

        PostUpはプロセス起動時、PostDownはプロセス停止時に実行されます。

        <クライアントに割り当てるIPセグメント>の部分は下記の部分のIPセグメントに置き換えてください

        cat /etc/pivpn/wireguard/setupVars.conf
        pivpnNET=ここのIP
        subnetClass=24

        動作確認する

        VPNをONにして普通にインターネットができればOKです!

        お疲れ様でした。

        コメント