WireGuard VPNサーバー構築手順
概要
WireGuardを使用してVPNサーバーを構築する手順を説明します。この手順はRHEL10環境を想定しています。
前提条件
- RHEL10
- root権限
- ファイアウォールが有効化されていること
1. パッケージの確認とインストール
1.1 IPフォワーディングの有効化
vim /etc/sysctl.conf
以下の行を追記:
net.ipv4.ip_forward=1
設定を反映:
sudo sysctl -p
1.2 WireGuardツールのインストール
dnf install wireguard-tools
2. キーペアの生成
2.1 サーバー用キーの生成
生成した鍵は後の設定で使用するので、メモしておく
# サーバー用秘密鍵の生成
wg genkey | tee /etc/wireguard/server.key
# サーバー用公開鍵の生成
cat /etc/wireguard/server.key | wg pubkey | tee /etc/wireguard/server.pub
2.2 クライアント用キーの生成
生成した鍵は後の設定で使用するので、メモしておく
# クライアント用秘密鍵の生成
wg genkey | tee /etc/wireguard/client.key
# クライアント用公開鍵の生成
cat /etc/wireguard/client.key | wg pubkey | tee /etc/wireguard/client.pub
3. サーバー設定ファイルの作成
3.1 WireGuardサーバー設定
vim /etc/wireguard/wg0.conf
以下の内容で設定ファイルを作成:
[Interface]
# 生成したサーバー用秘密鍵を指定
PrivateKey = ****************
# VPN インターフェースに割り当てる IP アドレス
Address = 172.16.100.1
# サーバーでリスンする UDP ポート
ListenPort = 51820
# WireGuard 起動後/終了後に任意のコマンドを実行可能
# 以下はローカルネットワークへのルーティングルールを設定
# [--zone=***] ⇒ アクティブゾーン名
# [wg0] ⇒ VPN インターフェース名
# [enp1s0] ⇒ イーサネット インターフェース名
PostUp = firewall-cmd --zone=public --add-masquerade; firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i wg0 -o enp1s0 -j ACCEPT; firewall-cmd --direct --add-rule ipv4 nat POSTROUTING 0 -o enp1s0 -j MASQUERADE; firewall-cmd --add-port=51820/udp
PostDown = firewall-cmd --zone=public --remove-masquerade; firewall-cmd --direct --remove-rule ipv4 filter FORWARD 0 -i wg0 -o enp1s0 -j ACCEPT; firewall-cmd --direct --remove-rule ipv4 nat POSTROUTING 0 -o enp1s0 -j MASQUERADE; firewall-cmd --remove-port=51820/udp
[Peer]
# クライアント1用公開鍵を指定
PublicKey = ****************
AllowedIPs = 172.16.100.5/32
[Peer]
# クライアント2用公開鍵を指定
PublicKey = ****************
AllowedIPs = 172.16.100.6/32
…
クライアントを追加する場合は同様に追記する
注意: PrivateKeyには手順2.1で生成したサーバー用秘密鍵、PublicKeyには手順2.2で生成したクライアント用公開鍵を設定してください。
3.2 ファイアウォール設定の確認
# ファイアウォールルールの確認
firewall-cmd --list-all
# firewalldサービスの状態確認
systemctl status firewalld
起動していなければ起動する
4. クライアント設定ファイルの作成
4.1 クライアント設定
vim /etc/wireguard/wg_client.conf
以下の内容で設定ファイルを作成:
[Interface]
# クライアント用秘密鍵を指定
PrivateKey = ****************
Address = 172.16.100.5/32
DNS = 8.8.8.8
[Peer]
# 生成したサーバー用公開鍵を指定
PublicKey = ****************
EndPoint = server.example.com:51820
AllowedIPs = 0.0.0.0/0
注意:
-
PrivateKeyには手順2.2で生成したクライアント用秘密鍵を設定 -
PublicKeyには手順2.1で生成したサーバー用公開鍵を設定 -
EndPointには実際のサーバーのFQDNまたはIPアドレスを設定
5. QRコード生成(オプション)
5.1 EPELリポジトリの有効化とqrencodeのインストール
# CodeReady Builderリポジトリの有効化(必要に応じて)
subscription-manager repos --enable codeready-builder-for-rhel-10-$(arch)-rpms
# EPELリポジトリのインストール
dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-10.noarch.rpm
# qrencodeのインストール
dnf install qrencode
5.2 QRコードの生成
qrencode -t ANSI -r /etc/wireguard/wg_client_android.conf
Teratermでは、-t ANSIで綺麗に表示できました。
Clientとしてスマホなどのアプリ側で読み込めば設定できます。
6. WireGuardサービスの起動
6.1 WireGuardの起動
wg-quick up wg0
6.2 自動起動の有効化
systemctl enable wg-quick@wg0
SELinuxが有効になっていると失敗するので無効か、回避する必要がある。
6.3 WireGuardの停止(必要時)
wg-quick down wg0
7. 接続確認
WireGuardが正常に動作しているかは以下のコマンドで確認できます:
# WireGuardの状態確認
wg show
# インターフェースの確認
ip addr show wg0
注意事項
- 設定ファイル内のキー情報は機密情報です。適切に管理してください
- ファイアウォール設定でポート51820/UDPが開放されていることを確認してください
- クライアント設定のEndPointには、クライアントからアクセス可能なサーバーのIPアドレスまたはFQDNを指定してください
- ネットワークインターフェース名(例: enp1s0)は環境に応じて適切な値に変更してください
参考
https://www.wireguard.com/install/
https://www.server-world.info/query?os=CentOS_Stream_9&p=wireguard&f=1
https://www.server-memo.net/server-setting/wireguard/almalinux9_wireguard_install.html