Raspberry Pi WireGuard VPNサーバー構築手順
背景
今後自己研鑽のために自宅でサーバ環境を構築したいと思いましたが、自宅にいる機会が少なく外出先からでもアクセスできるようにしたいと考えました。
解決策は以下の2点
- グローバルIPアドレスを設定
- VPNサーバを構築
1つ目の選択肢の固定IPにするには現在のインターネット回線の契約にさらに料金がかかってくる。かつ、誰でもアクセス出来るため、セキュリティ面でも不安がある。
2点目のメリットはVPNサーバを構築するだけで、ランニングコストは特にないこと。デメリットは今後Webサイトなどを作成した時にローカル環境の人でないとアクセスできないことぐらい、、、?
私の環境であれば、学習用のため、第三者にアクセスしてもらう必要はないので、2つ目のVPNサーバの構築で問題ないかと思います。
概要
Raspberry Pi(Fedora 41)を使用してWireGuard VPNサーバーを構築し、外出先からアクセス可能にする手順。
前提条件
- Raspberry Pi 4 (Fedora 41インストール済み)
- 有線LANでルーターに接続
- ルーターの管理権限
- 光回線などのブロードバンド環境
- クライアントPC (Mac OS)
Phase 1: 基盤整備
1.1 システムアップデート
# システム全体を最新状態に更新
sudo dnf update -y
# WireGuardとファイアウォール管理ツールのインストール
sudo dnf install -y wireguard-tools firewalld
# ファイアウォールサービスの開始・自動起動設定
sudo systemctl enable --now firewalld
1.2 カーネルモジュールの確認
# WireGuardモジュールを読み込み
sudo modprobe wireguard
# モジュールが読み込まれたか確認
lsmod | grep wireguard
1.3 IPフォワーディングの有効化
# 永続的にIPフォワーディングを有効化
echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.conf
echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.conf
# 設定を即座に適用
sudo sysctl -p
Phase 2: WireGuard設定
2.1 ディレクトリと鍵の作成
# 設定ディレクトリの作成(root以外アクセス不可)
sudo mkdir -p /etc/wireguard
sudo chmod 700 /etc/wireguard
# サーバー用の秘密鍵と公開鍵を生成
wg genkey | sudo tee /etc/wireguard/server_private.key
sudo cat /etc/wireguard/server_private.key | wg pubkey | sudo tee /etc/wireguard/server_public.key
# 秘密鍵の権限を制限
sudo chmod 600 /etc/wireguard/server_private.key
2.2 クライアント用の鍵生成
# クライアント用の鍵ペア生成
wg genkey | sudo tee /etc/wireguard/client_private.key
sudo cat /etc/wireguard/client_private.key | wg pubkey | sudo tee /etc/wireguard/client_public.key
# 権限設定
sudo chmod 600 /etc/wireguard/client_private.key
Phase 3: 設定ファイル作成
3.1 ネットワーク情報の確認
# 現在のIPアドレスとインターフェースを確認
ip addr show
# 外部IPアドレスを確認
curl -4 ifconfig.me
3.2 サーバー設定ファイル作成
# サーバー設定ファイルを作成
sudo nano /etc/wireguard/wg0.conf
設定内容:
[Interface]
PrivateKey = [サーバーの秘密鍵]
Address = 10.0.0.1/24
ListenPort = 50592
PostUp = firewall-cmd --add-port=50592/udp
PostDown = firewall-cmd --remove-port=50592/udp
PostUp = firewall-cmd --add-masquerade
PostDown = firewall-cmd --remove-masquerade
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o end0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o end0 -j MASQUERADE
[Peer]
PublicKey = [クライアントの公開鍵]
AllowedIPs = 10.0.0.2/32
3.3 クライアント設定ファイル作成
# クライアント設定ファイルを作成
sudo nano /etc/wireguard/client.conf
設定内容:
[Interface]
PrivateKey = [クライアントの秘密鍵]
Address = 10.0.0.2/24
DNS = 8.8.8.8
[Peer]
PublicKey = [サーバーの公開鍵]
Endpoint = [外部IPアドレス]:50592
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
Phase 4: 静的IPアドレス設定
4.1 現在の接続確認
# NetworkManager接続一覧を確認
nmcli connection show
4.2 固定IPアドレス設定
# 固定IPアドレス設定(接続名は環境に応じて変更)
sudo nmcli connection modify "Wired connection 1" ipv4.addresses 192.168.11.17/24
sudo nmcli connection modify "Wired connection 1" ipv4.gateway 192.168.11.1
sudo nmcli connection modify "Wired connection 1" ipv4.dns 8.8.8.8
sudo nmcli connection modify "Wired connection 1" ipv4.method manual
# 接続を再起動して設定適用
sudo nmcli connection down "Wired connection 1"
sudo nmcli connection up "Wired connection 1"
4.3 設定確認
# IPアドレスが固定されたか確認
ip addr show end0
Phase 5: WireGuardサーバー起動
5.1 サーバー起動とテスト
# WireGuardインターフェースを起動
sudo wg-quick up wg0
# 状態確認
sudo wg show
# ポートがリッスンしているか確認
sudo ss -ulnp | grep 50592
# ファイアウォール設定確認
sudo firewall-cmd --list-all
5.2 自動起動設定
# システム起動時の自動起動を有効化
sudo systemctl enable wg-quick@wg0
# 設定確認
sudo systemctl status wg-quick@wg0
Phase 6: ルーター設定
6.1 ポートフォワーディング設定
- ブラウザで
http://192.168.11.1にアクセス - 管理者でログイン
- ポートフォワーディング設定:
- プロトコル: UDP
- 外部ポート: 50592
- 内部IPアドレス: 192.168.11.17
- 内部ポート: 50592
- 設定を保存・適用
Phase 7: クライアント設定(Mac OS)
7.1 WireGuardクライアントインストール
- App Storeで「WireGuard」をインストール
7.2 設定ファイル転送
方法1: SCP
# Macのターミナルで実行
scp root@192.168.11.17:/etc/wireguard/client.conf ~/Desktop/wireguard-vpn.conf
方法2: 手動コピー
- Raspberry Pi側で
sudo cat /etc/wireguard/client.confを実行 - 出力内容をコピーしてMacで
.confファイルとして保存
7.3 WireGuardアプリ設定
- WireGuardアプリを起動
- 「+」ボタン → 「Import Tunnel(s) from File...」
- 設定ファイルを選択
- 「Save」をクリック
Phase 8: 接続テスト
8.1 VPN接続前の確認
# MacのターミナルでVPN接続前のIPアドレス確認
curl ifconfig.me
8.2 VPN接続
- WireGuardアプリでトンネルを「Activate」
- 接続成功を確認
8.3 接続後の確認
# VPN接続後のIPアドレス確認(Raspberry Piの外部IPになるはず)
curl ifconfig.me
# VPNトンネル内での通信確認
ping 10.0.0.1 # Raspberry PiのVPN内IPアドレス
8.4 Raspberry Pi側での接続確認
# クライアントの接続状況確認
sudo wg show
トラブルシューティング
よくある問題と対処法
-
接続できない
- ルーターのポートフォワーディング設定確認
- ファイアウォール設定確認:
sudo firewall-cmd --list-all - WireGuardサービス状態確認:
sudo wg show
-
IPアドレスが変わってしまう
- 固定IP設定の再確認
- NetworkManager設定確認:
nmcli connection show
-
外部からアクセスできない
- 外部IPアドレスの変更確認:
curl -4 ifconfig.me - ISPのポート制限確認
- 外部IPアドレスの変更確認:
便利なコマンド集
# WireGuard関連
sudo wg-quick up wg0 # VPN開始
sudo wg-quick down wg0 # VPN停止
sudo wg show # 接続状況確認
# ネットワーク確認
ip addr show # IPアドレス確認
ip route show # ルーティングテーブル確認
ss -ulnp | grep 50592 # ポート使用状況確認
# ファイアウォール確認
sudo firewall-cmd --list-all # 設定一覧
sudo firewall-cmd --add-port=50592/udp # ポート開放
sudo firewall-cmd --remove-port=50592/udp # ポート閉鎖
セキュリティ考慮事項
- 定期的な鍵の更新
- ファイアウォール設定の見直し
- システムアップデートの実施
- 不要なサービスの停止
- ログの監視
参考情報
- WireGuard公式サイト: https://www.wireguard.com/
- Fedoraドキュメント: https://docs.fedoraproject.org/
- NetworkManager設定:
man nmcli