🌐

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 クライアント側接続

  1. WireGuardアプリを起動
  2. 「トンネルの追加」をクリック
  3. 作成した設定ファイルを読み込み
  4. 接続を有効化

📋 接続後の確認チェックリスト

🔍 基本接続確認

  • サーバ側で 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