WireGuardでVPN構築

Server

VPN(Virtual Private Network:仮想プライベートネットワーク)とは、インターネット上に仮想的な専用回線を作る技術のことです

インターネット通信を暗号化し、第三者による盗聴やデータ改ざんを防ぎ、公共のWi-Fi(カフェ、ホテル、空港など)を安全に利用できるようになります

今回はWireGuardをConoHa VPSで構築する方法を説明します
WireGuardは高速かつシンプルなVPNプロトコルで、セットアップも比較的簡単です

Windows PCにWireGuardをインストールして、ConoHa VPSのWireGuardサーバーに接続する方法を説明します


1. WireGuardのインストール

① WireGuardの公式サイトからダウンロード

  1. WireGuard公式サイト にアクセス
  2. 「Windows」用のインストーラーをダウンロード
  3. ダウンロードした .exe ファイルを実行してインストール

② WireGuardを起動

インストール後、WireGuardアプリを開きます


2. クライアント(Windows)の鍵を作成

ローカルPCのWindowsで鍵を作成します

WindowsのWireGuardアプリで鍵を作成

  1. 「トンネルを追加」の横の矢印をクリック
  2. 「新しい空のトンネルを追加」を選択
  3. 自動生成された PrivateKey(秘密鍵)と PublicKey(公開鍵)をコピーしておく
  4. 秘密鍵はWindows側に保存、公開鍵はVPS側に登録します

3. WindowsのWireGuard設定ファイルを作成

WireGuardアプリで新しいトンネルを作成し、以下の内容を入力

[Interface]
PrivateKey = 先ほど生成した秘密鍵
Address = 10.0.0.2/24
DNS = 1.1.1.1

[Peer]
PublicKey = これから生成するサーバー側の公開鍵
AllowedIPs = 0.0.0.0/1, 128.0.0.0/1
Endpoint = xxx.xxx.xxx.xxx:51820
PersistentKeepalive = 25

PrivateKey にはWindows側の秘密鍵を入力し、PublicKey にはVPSの公開鍵を入力する予定です
Endpoint にはVPSのグローバルIPアドレスを入力


4.VPSの設定(サーバー側)

Ubuntu 20.04 または 24.04 を想定しています

  • WireGuard インストール(VPS側)
sudo apt update<br>sudo apt install wireguard
  • キーペア作成(サーバー用)
sudo wg genkey | tee /etc/wireguard/server_privatekey | sudo wg pubkey > /etc/wireguard/serverpublickey

# 権限を設定
sudo chmod 600 /etc/wireguard/server_privatekey
sudo chmod 644 /etc/wireguard/server_publickey

privatekey と publickey が生成されます

鍵の内容を見るコマンドは以下の通りです

sudo cat /etc/wireguard/server_privatekey
sudo cat /etc/wireguard/server_publickey

ここで確認したserver_publickeyをWindows側で作成した設定ファイルに入力します

  • wg0.conf を作成、編集
sudo nano /etc/wireguard/wg0.conf

以下のように入力

[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = サーバーの秘密鍵

# IPマスカレードでインターネットアクセスを有効化
PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT

# --- クライアント(Windows) ---
[Peer]
PublicKey = Windowsの公開鍵
AllowedIPs = 10.0.0.2/32

5.VPSでのWireGuard起動・転送設定

IP転送を有効にする

sudo nano /etc/sysctl.conf

以下の行のコメントを外す(# を削除)

net.ipv4.ip_forward=1

変更を適用

sudo sysctl -p

Firewall(UFWなど)設定(必要に応じて)

sudo ufw allow 51820/udp

NAT設定(IPマスカレード)

sudo iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE

ここのコード内の eth0 はインターフェース名です
違う方もいると思うので以下に確認方法を書きます

ip a

たとえばこう表示されます

2: eth0: …

→ eth0 がインターフェース名

NAT設定を「永続化」する

再起動すると iptables の設定はリセットされるため、「保存」しておく必要があります

  1. iptables-persistent をインストール
sudo apt install iptables-persistent

途中で「保存しますか?」と聞かれたら「Yes」を選んでください

  1. 設定を保存
sudo netfilter-persistent save
  1. 次回起動時にも有効化されることを確認
sudo netfilter-persistent reload

6. VPNの起動

以下のコマンドでVPNを起動します

# 起動
sudo systemctl start wg-quick@wg0
# 有効化
sudo systemctl enable wg-quick@wg0

ステータスを確認するコマンド

sudo systemctl status wg-quick@wg0

以下のようにアクティブになっていれば正常です

[email protected] - WireGuard via wg-quick(8) for wg0
     Loaded: loaded (/usr/lib/systemd/system/[email protected]; enabled; preset: enabled)
     Active: active (exited) since Thu 2025-04-24 05:23:03 JST; 22s ago
       Docs: man:wg-quick(8)

WireGuardは「必要なときだけ自動で通信する」軽量VPNなので、待ち受け状態でもリソースをほとんど使いません


7. クライアントから接続、確認

Windows側のwireguardから 有効化 をクリック

サーバー側で以下のコマンドで接続状態を確認します

sudo wg show

正常に接続できていれば以下のような表示がされます

interface: wg0
  public key: サーバーの公開鍵
  private key: (hidden)
  listening port: 51820

peer: Windowsの公開鍵
  endpoint: xxx.xxx.xxx.xxx:ポート番号
  allowed ips: 10.0.0.2/32
  latest handshake: 1 minute, 17 seconds ago
  transfer: 812.90 KiB received, 1.06 MiB sent

実際にインターネットサイトに接続してみて自分のIPアドレスを確認してみます

確認くん

自分のIPアドレスがサーバーのIPアドレスになっていると思います


以上の内容で、自前のサーバーのでVPNを構築して安全に公衆のWi-Fiを使用することができます

コメント