1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

RHEL10でVPN(WireGuard)構築

1
Last updated at Posted at 2025-08-16

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

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?