🌐
WireGuard VPNによるVPS接続構築手順メモ
📋 設定値一覧
| 項目 | 設定値 | 備考 |
|---|---|---|
| VPNプロトコル | WireGuard | |
| VPNポート | 51820/UDP | 外部公開ポート |
| SSHポート | 22/TCP | VPN内部のみ |
| サーバ仮想IP | 10.66.66.1/24 | VPN内部IP |
| クライアント仮想IP | 10.66.66.2/24 | VPN内部IP |
| サーバ秘密鍵 | (生成して設定) |
wg genkeyで生成 |
| サーバ公開鍵 | (生成して設定) | 秘密鍵から生成 |
| クライアント秘密鍵 | (生成して設定) |
wg genkeyで生成 |
| クライアント公開鍵 | (生成して設定) | 秘密鍵から生成 |
🔍 VPN経由のSSH通信構造(WireGuard使用時)
💡 補足ポイント
| 項目 | 内容 |
|---|---|
| WireGuard | 通信を暗号化してVPNトンネルを確立(UDP 51820使用) |
| VPNトンネル | 仮想ネットワーク(10.66.66.0/24)を経由して通信可能に |
| SSHサービス | VPN経由後に接続される別サービス(TCP、ポート番号は任意) |
| VPNありのメリット | SSHポート(22など)を外部非公開にできる(VPN内だけで開く) |
✅ VPN経由SSHの接続イメージ(コマンド)
# VPNトンネルを確立後に以下でSSH接続
ssh -p 22 user@10.66.66.1
🔒 セキュリティ的に強い構成
- VPNポート(51820/UDP)だけ外部公開
- SSHポート(22/TCP)はVPNトンネル内IPだけ許可(iptablesやfirewalldで制限)
🔄 作業フロー概要
実装手順
1.事前準備:セキュリティグループ設定
クラウドサービス(AWS、GCP等)を利用している場合は、コントロールパネルでセキュリティグループの設定が必要です。
OSレベルのファイアウォール設定とは別レイヤーのため、両方の設定が必要になります。
2.サーバ側の設定(Linux)
2.1 WireGuardのインストール(CentOS/RHEL)
# システム更新とリポジトリ追加
dnf upgrade -y
dnf install epel-release -y
dnf install https://www.elrepo.org/elrepo-release-9.el9.elrepo.noarch.rpm -y
# WireGuardインストール
dnf --enablerepo=elrepo-kernel install kmod-wireguard wireguard-tools -y
インストール確認:
lsmod | grep wireguard
# wireguard関連のモジュールが表示されればOK
2.2 サーバ用キーペアの生成
# セキュリティ強化
umask 077
# キー生成(秘密鍵と公開鍵を同時作成)
wg genkey | tee /etc/wireguard/server_private.key | wg pubkey > /etc/wireguard/server_public.key
2.3 サーバ設定ファイルの作成
vi /etc/wireguard/wg0.conf
[Interface]
PrivateKey = サーバの秘密鍵をここに入力
Address = 10.66.66.1/24
ListenPort = 51820
SaveConfig = true
2.4 ファイアウォール設定とサービス起動
# VPNポート開放
firewall-cmd --permanent --add-port=51820/udp
firewall-cmd --reload
# WireGuardサービス起動・自動起動設定
systemctl start wg-quick@wg0
systemctl enable wg-quick@wg0
3.クライアント側の設定(Windows)
3.1 WireGuardクライアントのインストール
<a href="https://www.wireguard.com/install/" target="_blank">公式サイトからWireGuardクライアントをダウンロード</a>
3.2 クライアント用キーペアの生成
PowerShellで以下を実行:
# 秘密鍵を生成してファイルに保存
$privateKey = & 'C:\Program Files\WireGuard\wg.exe' genkey
$privateKey | Out-File -Encoding ascii .\client_private.key
# 公開鍵を生成してファイルに保存
echo $privateKey | & 'C:\Program Files\WireGuard\wg.exe' pubkey | Out-File -Encoding ascii .\client_public.key
3.3 クライアント設定ファイルの作成
WireGuard設定ファイル(.conf)を作成:
[Interface]
PrivateKey = クライアントの秘密鍵をここに入力
Address = 10.66.66.2/24
DNS = 8.8.8.8
[Peer]
PublicKey = サーバの公開鍵をここに入力
Endpoint = サーバのパブリックIP:51820
AllowedIPs = 10.66.66.1/32
PersistentKeepalive = 25
4.相互接続設定
4.1 サーバ側の最終設定
設定ファイルにクライアント情報を追加:
vi /etc/wireguard/wg0.conf
[Interface]
PrivateKey = サーバの秘密鍵をここに入力
Address = 10.66.66.1/24
ListenPort = 51820
[Peer]
PublicKey = クライアントの公開鍵をここに入力
AllowedIPs = 10.66.66.2/32
PersistentKeepalive = 25
SSH設定の強化(オプション):
sudo vi /etc/ssh/sshd_config
Port 22
PermitRootLogin prohibit-password
PasswordAuthentication no
サービスの再起動:
systemctl restart sshd
sudo systemctl restart wg-quick@wg0
sudo wg show
4.2 クライアント側接続
- WireGuardアプリを起動
- 「トンネルの追加」をクリック
- 作成した設定ファイルを読み込み
- 接続を有効化
📋 接続後の確認チェックリスト
🔍 基本接続確認
-
サーバ側で
sudo wgを実行してlatest handshakeが表示される -
ping 10.66.66.1(クライアント → サーバ)で応答がある -
クライアントの
curl ifconfig.meでIPがサーバ側に変わっている
⚠️ トラブル時の確認項目
-
サーバの
51820/udpが開放されている(firewall-cmd --list-ports) -
クライアント側で
netstat -ano | findstr 51820でポートがLISTEN中 - サーバとクライアントの時刻が大幅にズレていない
- Windows Defenderで「ファイルとプリンターの共有(ICMPv4)」が有効
💡 重要なポイント
sudo wgの handshake で接続判断するのが最も正確-
AllowedIPs = 0.0.0.0/0の場合、全通信がVPN経由になる - セキュリティグループ設定(クラウド側)がある場合は併せて設定が必要
設定のポイント:
- セキュリティ: SSH等のサービスをVPN内部のみに制限
- シンプル: WireGuardの軽量で高速な特性を活用
- 管理性: 設定ファイルベースで設定が分かりやすい
まとめ
WireGuard VPNを使用することで、VPSへのセキュアな接続環境を構築できます。外部からのSSH直接接続を避け、VPNトンネル経由でのアクセスにより、セキュリティを大幅に向上させることが可能です。
Discussion