# 5 分で VPN サーバーを構築! wg-easy の使い方
wg-easy は、WireGuard VPN サーバーの構築と管理を簡単にする Docker コンテナです。この記事では、Docker を使用して 5 分で VPN サーバーを構築する方法を解説します。
# この記事の対象読者
- VPS サーバーを所有している方
- Docker の基本的な使い方を理解している方
- 簡単に VPN サーバーを構築したい方
- WireGuard を使った VPN サーバーに興味がある方
# VPN とは
VPN(Virtual Private Network) は、仮想のプライベートネットワークを構築することで、よりセキュアな通信を確立できる技術です。
VPN サーバー は、セキュアな通信を暗号化・転送するためのサーバーで、クライアントとサーバー間の通信を暗号化して保護します。
# WireGuard とは
WireGuard は、モダンで高速な VPN プロトコルです。以下の特徴があります:
- 高速: 最新の暗号化技術により、従来の VPN プロトコルより高速
- 軽量: コードベースが小さく、リソース消費が少ない
- セキュア: 最新の暗号化アルゴリズムを使用
- シンプル: 設定が簡単で、管理が容易
# wg-easy とは
wg-easy は、WireGuard の設定と管理を簡素化する Web UI を提供する Docker コンテナです。以下の機能があります:
- Web UI: ブラウザから簡単に設定・管理
- QR コード生成: モバイルデバイスへの接続設定が簡単
- クライアント管理: クライアントの追加・削除・有効化・無効化が簡単
- 自動設定: 複雑な設定を自動化
注意事項
この記事は教育目的で提供されています。VPN サーバーの構築と利用は、利用する地域の法律と規制を遵守してください。違法な用途での使用は禁止されています。
# VPN を使うメリット
# セキュリティ
- データの暗号化: パブリック Wi-Fi などの安全でないネットワークでも、データが暗号化されて保護される
- 中間者攻撃の防止: 通信が暗号化されるため、中間者攻撃から保護される
# プライバシー
- IP アドレスの隠蔽: 通信元のユーザーの IP アドレスが検知されにくくなる
- トラッキングの回避: トラッキングやターゲット広告の追跡を回避できる
- 匿名性の向上: インターネット上の活動をより匿名で行える
# 地域制限回避
- コンテンツへのアクセス: 海外のサーバーを使用することで、地域特有の閲覧制限を回避できる
- グローバルなサービス利用: 地域制限のあるサービスやコンテンツにアクセス可能
# その他のメリット
- リモートアクセス: 自宅やオフィスのネットワークに安全にアクセス
- 企業ネットワークへの接続: リモートワーク時に企業ネットワークに安全に接続
# 前提条件
- OS: Ubuntu 18.04+ / Debian 10+ / CentOS 7+(Docker が動作する OS)
- 権限: root ユーザーまたは sudo 権限
- Docker: Docker がインストールされていること
- ネットワーク: サーバーがインターネットに接続されていること
- ポート: 使用するポートがファイアウォールで開放されていること
# インストール手順
# 1. Docker のインストール
Docker がインストールされていない場合、以下のコマンドでインストールします:
curl -sSL https://get.docker.com | sh
sudo usermod -aG docker $(whoami)
インストール後、ログアウトして再ログインするか、以下のコマンドでグループを反映します:
newgrp docker
# 2. Docker の動作確認
Docker が正しくインストールされたか確認します:
docker --version
docker ps
# 3. サーバーの IP アドレスを確認
VPN サーバーのパブリック IP アドレスを確認します:
curl -4 ifconfig.me
# または
hostname -I
# 4. パスワードハッシュの生成
Web UI の管理画面にログインするためのパスワードハッシュを生成します:
docker run -it ghcr.io/wg-easy/wg-easy wgpw YOUR_PASSWORD
出力例:
PASSWORD_HASH='$2b$12$coPqCsPtcFO.Ab99xylBNOW4.Iu7OOA2/ZIboHN6/oyxca3MWo7fW'
セキュリティの推奨事項
- 強力なパスワードを使用(12 文字以上、英数字・記号を含む)
- 生成されたハッシュ値を安全に保管
- 定期的にパスワードを変更
# 5. wg-easy コンテナの起動
以下のコマンドで wg-easy コンテナを起動します。環境に合わせて値を変更してください:
docker run --detach \
--name wg-easy \
--env WG_HOST=YOUR_SERVER_IP \
--env PASSWORD_HASH='YOUR_PASSWORD_HASH' \
--env PORT=51821 \
--env WG_PORT=51820 \
--volume ~/.wg-easy:/etc/wireguard \
--publish 51820:51820/udp \
--publish 51821:51821/tcp \
--cap-add NET_ADMIN \
--cap-add SYS_MODULE \
--sysctl 'net.ipv4.conf.all.src_valid_mark=1' \
--sysctl 'net.ipv4.ip_forward=1' \
--restart unless-stopped \
ghcr.io/wg-easy/wg-easy
# 環境変数の説明
| 環境変数 | 説明 | 例 |
|---|---|---|
WG_HOST | サーバーのパブリック IP アドレス | 1.2.3.4 |
PASSWORD_HASH | Web UI ログイン用のパスワードハッシュ | $2b$12$... |
PORT | Web UI のポート番号 | 51821 |
WG_PORT | WireGuard のポート番号 | 51820 |
重要な設定
WG_HOST: サーバーの実際のパブリック IP アドレスに変更してくださいPASSWORD_HASH: 上記で生成したハッシュ値を使用してくださいPORTとWG_PORT: 使用可能なポート番号に変更してください(デフォルトの 51820/51821 が使用できない場合)
# 6. コンテナの状態確認
コンテナが正常に起動したか確認します:
docker ps
出力例:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3cff4e63bdab ghcr.io/wg-easy/wg-easy "docker-entrypoint.s…" 6 seconds ago Up 6 seconds (health: starting) 0.0.0.0:51820->51820/udp, :::51820->51820/udp, 0.0.0.0:51821->51821/tcp, :::51821->51821/tcp wg-easy
コンテナのログを確認する場合:
docker logs wg-easy
# 7. ファイアウォールの設定
サーバーのファイアウォールで必要なポートを開放します:
ufw を使用する場合(Debian/Ubuntu):
sudo ufw allow 51820/udp
sudo ufw allow 51821/tcp
sudo ufw reload
firewalld を使用する場合(CentOS/RHEL):
sudo firewall-cmd --permanent --add-port=51820/udp
sudo firewall-cmd --permanent --add-port=51821/tcp
sudo firewall-cmd --reload
iptables を使用する場合:
sudo iptables -A INPUT -p udp --dport 51820 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 51821 -j ACCEPT
# Web UI での管理
# アクセス方法
- ブラウザで
http://YOUR_SERVER_IP:51821にアクセス - パスワードハッシュを生成する際に使用した元のパスワード(ハッシュ化する前のパスワード)でログイン
# クライアントの追加
- ログイン後、
+ Newボタンをクリック - クライアント名を入力(例:
my-phone,laptop) - 作成されたクライアントの設定を確認
# クライアント設定の取得
各クライアントには以下の方法で設定を取得できます:
- QR コード: モバイルデバイス用(WireGuard アプリでスキャン)
- 設定ファイルのダウンロード: デスクトップ用(
.confファイル)
# クライアントの管理
- 有効化/無効化: クライアントを一時的に無効化可能
- 削除: 不要なクライアントを削除
- 統計情報: データ転送量を確認
# クライアント側の設定
# モバイルデバイス(iOS/Android)
- App Store または Google Play で「WireGuard」アプリをインストール
- Web UI で生成した QR コードをスキャン
- 接続を有効化
# デスクトップ(Windows/macOS/Linux)
- WireGuard 公式サイト (opens new window)からクライアントをインストール
- Web UI から設定ファイル(
.conf)をダウンロード - WireGuard クライアントに設定ファイルをインポート
- 接続を有効化
# セキュリティのベストプラクティス
# 1. 強力なパスワードの使用
- Web UI のログインパスワードは 12 文字以上
- 英数字・記号を含む複雑なパスワードを使用
- 定期的にパスワードを変更
# 2. ファイアウォールの設定
- 必要なポートのみを開放
- 不要なポートは閉じる
- 可能であれば、特定の IP アドレスからのみアクセスを許可
# 3. 定期的な更新
Docker イメージを定期的に更新:
docker pull ghcr.io/wg-easy/wg-easy
docker stop wg-easy
docker rm wg-easy
# 上記の docker run コマンドを再実行
# 4. ログの監視
コンテナのログを定期的に確認:
docker logs wg-easy
# 5. HTTPS の使用(推奨)
本番環境では、リバースプロキシ(Nginx など)を使用して HTTPS を有効化することを推奨します。
# トラブルシューティング
# 接続できない場合
コンテナの状態確認
docker ps docker logs wg-easyファイアウォールの確認
sudo ufw status # または sudo firewall-cmd --list-portsポートの確認
netstat -tuln | grep 51820 netstat -tuln | grep 51821IP 転送の有効化確認
sysctl net.ipv4.ip_forward # 出力が 1 であることを確認
# Web UI にアクセスできない場合
コンテナが起動しているか確認
docker ps | grep wg-easyポートが正しく公開されているか確認
docker port wg-easyログを確認
docker logs wg-easy
# クライアントが接続できない場合
サーバーの IP アドレスが正しいか確認
WG_HOST環境変数が正しい IP アドレスに設定されているか
ファイアウォールでポートが開放されているか確認
- UDP ポート 51820 が開放されているか
クライアント設定を再生成
- Web UI でクライアントを削除して再作成
# コンテナの再起動
docker restart wg-easy
# コンテナの停止と削除
docker stop wg-easy
docker rm wg-easy
# まとめ
この記事では、wg-easy を使用して WireGuard VPN サーバーを 5 分で構築する方法を解説しました。
# 重要なポイント
- 簡単な構築: Docker を使用して簡単に構築可能
- Web UI: ブラウザから簡単に管理可能
- QR コード: モバイルデバイスへの接続が簡単
- セキュリティ: 強力なパスワードと適切なファイアウォール設定が重要
# 次のステップ
- クライアントアプリケーションの設定
- 定期的なセキュリティ更新
- ログの監視と分析
- HTTPS の有効化(リバースプロキシの設定)
# 参考リンク
- wg-easy GitHub (opens new window)
- WireGuard 公式サイト (opens new window)
- WireGuard ドキュメント (opens new window)
免責事項
この記事の内容に基づいて実施した結果について、筆者は一切の責任を負いません。VPN サーバーの構築と利用は、利用する地域の法律と規制を遵守してください。