🌐

Raspberry PiでWireGuardサーバを立ててみた①

に公開
2025/12/10

きっかけ

家にあるPCで作業してたけど、出先でPCを操作したい!
そんな時ありますよね

私はいつも思っていて、半分あきらめていました。
しかし最近、Tailscaleとやらが出てきたではないですか!
これを使えば出先のノートPCから家のデスクトップを操作することができますね!

https://tailscale.com/

Tailscaleが便利なのは皆さんもご存じだと思いますが、この技術にはWireGuardが使われています。

WireGuard...?

WireGuardはVPNの一種です。
細かい説明はまた後日行いますが、コネクション確立から暗号通信までをUDP通信で行うプロトコルです。
鍵交換には楕円曲線暗号(Curve25519)を使用しており、パケットの送受信には認証付きストリーム暗号(ChaCha20-Poly1305)を使っています。

やりたいこと

最終的には自分専用のWireGuardサーバを構築して、Tailscaleを頼らずに自作VPNを実現したいと思っています。
ひとまずそれまでの前準備として、いろいろ試している最中です。

今回の記事

今回はRaspberry PiでWireGuardサーバを構築してみたいと思います。
クライアントやルーティングについてはまた後日行いたいと思います。
※備忘録が主な目的です。

構築

まずはRaspberry Piを用意します。
今回はRaspberry Pi 4を使っていますが、特にこだわりはありません。

初期設定など

OSはRaspberry Pi OSです。
https://www.raspberrypi.com/software/operating-systems/

OSのインストールはRaspberry Pi Imagerを使って行っていますが、今回は省略します。
一応リンクは残しておきます。
https://www.raspberrypi.com/software/

OSの準備が完了したらRaspberry PiにSDカードを差し込んで起動させます。
Wi-Fiの設定等はGUIで行えば簡単なので、モニターとキーボード・マウスを使って操作しちゃいましょう。
慣れてる人は最初からSSH接続して遠隔制御でもOKです。

環境インストール

今回使用するのはwireguardパッケージです。
先にインストールしましょう。

sudo apt update
sudo apt install -y wireguard

ネットワーク設定にはNetworkManagerを使います。
今回はルーティングまでは行いません。

設定を進めます

まずはIPフォワーディングを有効化します。

sudo nano /etc/sysctl.conf

これで以下の行のコメントを解除します。
もしなければ追加してください。

net.ipv4.ip_forward=1

WireGuardサーバの設定

次にWireGuard関連のファイルを格納するディレクトリを作成します。

sudo mkdir -p /etc/wireguard

ディレクトリに移動して、サーバ用の秘密鍵を作成します。

cd /etc/wireguard

wg genkey | sudo tee /etc/wireguard/server_private.key
sudo chmod 600 /etc/wireguard/server_private.key

秘密鍵をもとに公開鍵を作成します。

sudo cat /etc/wireguard/server_private.key | wg pubkey | sudo tee /etc/wireguard/server_public.key

ここで少しだけ解説します。
興味のある方だけ見てください。

サーバの秘密鍵は、楕円曲線Curve25519における秘密鍵です。
この鍵をもとに公開鍵を作成します。
秘密鍵をskとし、Curve25519における生成元をgとしたとき、以下の式で秘密鍵を生成します。

pk = sk \times g

このときの\timesは楕円曲線におけるスカラ倍算と呼ばれる処理になるので、通常の算術におけるかけ算とは異なります。
楕円曲線暗号において、公開鍵pkから秘密鍵skを算出することは難しいとされています(離散対数問題、計算量的安全性)。
これが安全性の根拠となっています。
※量子コンピュータが普及することで安全性が損なわれる可能性があるものです。いまは耐量子計算機暗号(PQC)の研究等が進められています。

次にサーバ設定を行います。

sudo nano /etc/wireguard/wg0.conf

この中に設定を記述します。
今回はサーバ設定のみを書きます。
クライアント設定はまた後日行います。

sudo nano /etc/wireguard/wg0.conf

設定ファイルを作成したら以下を書きます。
今回はWireGuardサーバのアドレスを10.0.100.1にしていますが、ご自由に変えてください。

[Interface]
Address = 10.0.100.1/24
PrivateKey = <サーバの秘密鍵>
ListenPort = 51820

サーバの秘密鍵はserver_private.keyファイルに書かれています。
分からない人はcatコマンド等で確認してください。

設定の反映

まずはWireGuardサーバを起動しましょう。

sudo wg-quick up wg0

接続状態は下記で確認できます。

sudo wg show

困ったときは

困ったときはログを確認しましょう。

sudo journalctl -u wg-quick@wg0 -f

もし修正等を行ったときは、サーバの再起動を忘れずに。

sudo wg-quick down wg0
sudo wg-quick up wg0

終わりに

今回はRaspberry PiでWireGuardサーバを立ててみました。
ただ、これだけだと誰が接続するの?状態ですよね…笑
ちなみに、クライアント情報をサーバ側に書いてあげないと接続できないようです。
※間違っていたらごめんなさい

次回はクライアント側を書いてみたいと思います。
もし待てない方はPCで接続してみるのもいいかもしれないですね。
https://www.wireguard.com/install/

それではまた次回、気が向いたら書きます。
気が向いたときは現実逃避したいときです。

↓続きを更新しました
https://zenn.dev/toryo/articles/2b336a4ed62971

Discussion