LinuxサーバーにWireGuard VPNを設定する完全ガイド
LinuxサーバーでWireGuard VPNを設定する手順を解説。インストール、鍵生成、設定ファイル作成、起動・自動起動設定まで、セキュリティを考慮した実践的な方法。
はじめに
WireGuardは、シンプルで高速、かつセキュアなVPNプロトコルです。Linuxカーネルに標準搭載されており、従来のIPsecやOpenVPNよりも設定が容易で、パフォーマンスに優れています。本記事では、Linuxサーバー(Ubuntu 22.04 LTSを例に)でWireGuard VPNサーバーを構築する手順を解説します。
前提条件
手順
1. WireGuardのインストール
Ubuntu 22.04では、WireGuardはデフォルトのリポジトリからインストールできます。
sudo apt update
sudo apt install wireguard
インストール後、以下のコマンドでモジュールが読み込まれているか確認します。
sudo modprobe wireguard
lsmod | grep wireguard
出力にwireguardが表示されればOKです。
2. 鍵ペアの生成
WireGuardでは、サーバーと各クライアントが公開鍵と秘密鍵を持ちます。まず、サーバーの鍵を生成します。
cd /etc/wireguard
umask 077
sudo wg genkey | sudo tee server_private.key | sudo wg pubkey | sudo tee server_public.key
これで、server_private.keyとserver_public.keyが作成されます。秘密鍵は厳重に管理してください。
同様に、クライアントの鍵も生成します。クライアントごとに異なる鍵ペアが必要です。ここではclient1として生成します。
sudo wg genkey | sudo tee client1_private.key | sudo wg pubkey | sudo tee client1_public.key
3. サーバー設定ファイルの作成
/etc/wireguard/wg0.confを作成します。
sudo nano /etc/wireguard/wg0.conf
以下の内容を記述します。はserver_private.keyの内容に置き換えてください。
[Interface]
Address = 10.0.0.1/24
PrivateKey = <ServerPrivateKey>
ListenPort = 51820
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
[Peer]
<h1>client1</h1>
PublicKey = <Client1PublicKey>
AllowedIPs = 10.0.0.2/32
Address: VPN内のサーバーのIPアドレス。サブネットは/24にします。ListenPort: WireGuardが待受するポート。デフォルトは51820。PostUp/PostDown: パケット転送とNATのルール。eth0はサーバーの外部ネットワークインターフェース名に置き換えてください。[Peer]: クライアントの設定。PublicKeyにはclient1_public.keyの内容を、AllowedIPsにはクライアントに割り当てるIPアドレスを指定します。複数のクライアントを追加する場合は、[Peer]セクションを増やします。
4. クライアント設定ファイルの作成
クライアント側の設定ファイルを作成します。例えば、client1.confとしてサーバー上で作成し、クライアントに転送します。
sudo nano /etc/wireguard/client1.conf
内容:
[Interface]
PrivateKey = <Client1PrivateKey>
Address = 10.0.0.2/24
DNS = 1.1.1.1
[Peer]
PublicKey = <ServerPublicKey>
Endpoint = <サーバーのパブリックIP>:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
PrivateKey: client1_private.keyの内容。Address: クライアントに割り当てるIP。サーバー側のAllowedIPsと一致させる。DNS: 必要に応じてDNSサーバーを指定。PublicKey: サーバーの公開鍵。Endpoint: サーバーのパブリックIPアドレスとポート。AllowedIPs: 0.0.0.0/0にするとすべてのトラフィックがVPN経由になります。特定のネットワークだけをVPN経由にしたい場合は、そのサブネットを指定します。PersistentKeepalive: NAT越えのためにキープアライブを送信する間隔(秒)。5. サーバーのファイアウォール設定
WireGuardのポート(51820/UDP)を開放します。また、IPフォワーディングを有効にします。
sudo ufw allow 51820/udp
sudo ufw reload
IPフォワーディングを永続的に有効にするには、/etc/sysctl.confを編集します。
sudo nano /etc/sysctl.conf
以下の行のコメントを外すか、追加します。
net.ipv4.ip_forward=1
変更を適用します。
sudo sysctl -p
6. WireGuardの起動と自動起動設定
サーバーでWireGuardインターフェースを起動します。
sudo wg-quick up wg0
エラーがなければ、以下のコマンドで状態を確認できます。
sudo wg show
自動起動を有効にするには、systemdサービスを有効にします。
sudo systemctl enable wg-quick@wg0
7. クライアントの接続
作成したclient1.confをクライアントデバイスに転送します。WireGuardアプリを開き、設定をインポートして接続します。
接続が成功すると、クライアントからサーバーのVPN内IP(10.0.0.1)にpingが通るはずです。
ping 10.0.0.1
また、インターネットアクセスがVPN経由になっているか確認するには、ipconfigやifconfigでVPNインターフェースのIPが表示されていることを確認します。
セキュリティのポイント
トラブルシューティング
sudo journalctl -u wg-quick@wg0。sudo netstat -tulpn | grep 51820でListen状態か確認。PostUpのiptablesルールのインターフェース名が正しいか確認。*この記事はArch Linux/btrfs/LUKs環境で実際に検証した内容を基にしています。セキュリティ設定は環境によって異なるため、本番環境への適用前に必ずテスト環境で検証してください。*
まとめ
WireGuardは設定が簡単で、高いパフォーマンスを発揮します。このガイドに従えば、LinuxサーバーにWireGuard VPNを構築し、安全にリモートアクセスやプライバシー保護を実現できます。ぜひ試してみてください。