この文章はgpt-5.2によって生成し、人間がレビューしました。
概要
この文書では、WireGuardを用いて「VPNネットワーク内のみ通信可能(インターネット経由はしない)」な環境を構築する方法を解説します。
本例では、サーバーと複数のクライアント(例:Raspberry Piを含む)がVPN内で相互通信可能な「ハブ&スポーク型」(全クライアントがサーバー経由で通信)を構築します。
前提
-
サーバー: Ubuntuサーバー(例:
vpnserver.example.com) - クライアント: Raspberry PiやPCなど
-
VPN内アドレス:
10.100.0.0/24 -
サーバーのグローバルIP/ドメイン:
vpnserver.example.com
1. 鍵の生成
各ノードで秘密鍵・公開鍵を生成する。
umask 077
wg genkey | tee privatekey | wg pubkey > publickey
備考:秘密鍵ファイル(privatekey)と公開鍵ファイル(publickey)は厳密な権限(600)で管理推奨。
2. サーバー側設定(例:/etc/wireguard/wg0.conf)
[Interface]
Address = 10.100.0.1/24
ListenPort = 51820
PrivateKey = <サーバーの秘密鍵>
# クライアント1
[Peer]
PublicKey = <クライアント1の公開鍵>
AllowedIPs = 10.100.0.2/32
# クライアント2
[Peer]
PublicKey = <クライアント2の公開鍵>
AllowedIPs = 10.100.0.3/32
# 追加のクライアントも同様...
3. クライアント側設定(例:/etc/wireguard/wg0.conf, クライアント1の場合)
[Interface]
PrivateKey = <クライアント1の秘密鍵>
Address = 10.100.0.2/24
[Peer]
PublicKey = <サーバーの公開鍵>
Endpoint = vpnserver.example.com:51820
AllowedIPs = 10.100.0.0/24
PersistentKeepalive = 25
- 他のクライアントも同様、Address/PrivateKey/公開鍵をそれぞれ変えて作成。
4. ポート開放
サーバーのUDP 51820ポートを必ず開放する(例: UFWの場合):
sudo ufw allow 51820/udp
5. サービス起動・自動起動設定
全ノードで下記のコマンドを実施。
sudo systemctl start wg-quick@wg0
sudo systemctl enable wg-quick@wg0
6. 接続テスト
- サーバー/クライアント間でVPN内アドレス宛に
pingを実行。- 例:
ping 10.100.0.1 - 例:
ping 10.100.0.2
- 例:
- すべてのクライアントがサーバーを経由して相互通信できることを確認。
7. サーバーの設定上の注意点
- サーバーの
[Peer]セクションには全クライアントのPublicKeyとIP(/32)を1エントリずつ追加すること。 - クライアントの設定
AllowedIPsはサブネット全体(例:10.100.0.0/24)を含めて、VPN内通信がサーバーへ流れるようにする。
8. ルーティング・フォワーディング設定
-
VPN内通信のみの場合、サーバーでの
net.ipv4.ip_forward等のパケット転送設定は不要。 - VPN経由でインターネット転送をしたい場合のみ、追加でiptables/NAT設定が必要となる(本例では不要)。
9. トラブルシューティング
- サーバー/クライアントとも
sudo wgでハンドシェイクや通信量が増えているかを確認。 - FirewallでVPNサブネットの通信がブロックされていないか注意。
- UFW等を使う場合は
sudo ufw allow from 10.100.0.0/24も忘れずに。
- UFW等を使う場合は