Raspberry PiでWireGuardサーバを立ててみた①
きっかけ
家にあるPCで作業してたけど、出先でPCを操作したい!
そんな時ありますよね
私はいつも思っていて、半分あきらめていました。
しかし最近、Tailscaleとやらが出てきたではないですか!
これを使えば出先のノートPCから家のデスクトップを操作することができますね!
Tailscaleが便利なのは皆さんもご存じだと思いますが、この技術にはWireGuardが使われています。
WireGuard...?
WireGuardはVPNの一種です。
細かい説明はまた後日行いますが、コネクション確立から暗号通信までをUDP通信で行うプロトコルです。
鍵交換には楕円曲線暗号(Curve25519)を使用しており、パケットの送受信には認証付きストリーム暗号(ChaCha20-Poly1305)を使っています。
やりたいこと
最終的には自分専用のWireGuardサーバを構築して、Tailscaleを頼らずに自作VPNを実現したいと思っています。
ひとまずそれまでの前準備として、いろいろ試している最中です。
今回の記事
今回はRaspberry PiでWireGuardサーバを構築してみたいと思います。
クライアントやルーティングについてはまた後日行いたいと思います。
※備忘録が主な目的です。
構築
まずはRaspberry Piを用意します。
今回はRaspberry Pi 4を使っていますが、特にこだわりはありません。
初期設定など
OSはRaspberry Pi OSです。
OSのインストールはRaspberry Pi Imagerを使って行っていますが、今回は省略します。
一応リンクは残しておきます。
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における秘密鍵です。
この鍵をもとに公開鍵を作成します。
秘密鍵を
このときの
楕円曲線暗号において、公開鍵
これが安全性の根拠となっています。
※量子コンピュータが普及することで安全性が損なわれる可能性があるものです。いまは耐量子計算機暗号(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で接続してみるのもいいかもしれないですね。
それではまた次回、気が向いたら書きます。
気が向いたときは現実逃避したいときです。
↓続きを更新しました
Discussion