ウェブサイト検索

Rocky Linux 9にWireguard VPNをインストールする方法


Rocky Linux 9にWireguard VPNをインストールする方法

このページで

  1. 前提条件
  2. Wireguardカーネルモジュールを有効にする
  3. サーバーとクライアントのキー ペアを生成しています

    1. サーバーキー対を生成する
    2. クライアント鍵ペアの生成
  4. Wireguardサーバーの設定
  5. ポートフォワーディングの設定
  6. Firewalldの設定
  7. Wireguardサーバーの起動
  8. クライアントの設定とWireguardサーバーへの接続
  9. 結論

WireguardはIPSec、IKEv2、OpenVPNの代替となるオープンソースのVPNプロトコルです。WireguardはLinuxおよびUnixオペレーティングシステム向けに設計されており、Linuxカーネルスペース上で動作するため、Wireguardはより高速で信頼性があります。Wireguardは2台以上のコンピュータ間に安全なトンネル接続を作成するために使用されます。

Wireguardは、IPSec、IKEv2、OpenVPNなどのVPNプロトコルに取って代わることを目指しています。Wireguardは軽量で、速く、設定が簡単で、効率的です。同時に、WireguardはVPNプロトコルのセキュリティ面を犠牲にしていません。Wireguardは、Noiseプロトコルフレームワーク、Curve25519、ChaCha20、Poly1305、BLAKE2、SipHash24、HKDF、信頼できる安全な構成などの現代の暗号技術をサポートしています。

OpenVPN、IPSec、IKEv2などの他のVPNプロトコルと比較して、WireGuardは新しいVPNプロトコルです。WireGuardは2015年にJason A. Donenfeldによって代替VPNプロトコルとしてリリースされ、2020年にLinus TorvaldsによってLinuxカーネルv5.6にマージされました。同年、FreeBSD 13にも移植されました。

このガイドでは、Rocky Linux 9サーバーにWireguardサーバーをインストールしてセットアップする方法を説明します。また、Wireguardサーバーに接続するクライアントマシンをセットアップする方法も学びます。

この例では、どのLinuxディストリビューションでもクライアントマシンとして使用できます。しかし、このガイドでは、RHEL9ベースのディストリビューションの1つであるRocky Linuxクライアントマシンを使用します。

前提条件

このガイドを始めるにあたり、次の要件を満たしていることを確認してください:

  • Rocky Linux 9 サーバー - この例では、ホスト名がwireguard-rocky の Rocky Linux を使用しています。
  • sudo/root管理者権限を持つ非ルートユーザー。
  • SELinuxは許可モードで動作しています。

前提条件が整ったので、これでWireguardサーバーのインストールと設定を始めることができます。

Wireguardカーネルモジュールを有効にする

最新バージョンのRocky Linux 9は、デフォルトのLinuxカーネル5.14と共に出荷されており、その上にデフォルトで「wireguard」カーネルモジュールが埋め込まれています。このステップでは、Wirguardカーネルモジュールを有効にし、Rocky Linuxサーバーに「wireguard-tools」をインストールします。

以下のmodprobeコマンドを実行して「wireguard」カーネルモジュールを有効にします。その後、「lsmod」コマンドを使用して有効なカーネルモジュールのリストを確認します。

sudo modprobe wireguard
lsmod | grep wireguard

「wireguard」カーネルモジュールが有効になっている場合、以下に似たような出力を受け取るはずです:

WireGuardモジュールを永久にロードするには、新しい設定ファイルを'/etc/modules-load.d/'ディレクトリに追加するために以下のコマンドを実行できます。これにより、システムの起動時にWireGuardカーネルモジュールが永久にロードされます。

sudo echo wireguard > /etc/modules-load.d/wireguard.conf

'wireguard' カーネルモジュールを有効にした後、Wireguard サーバーを管理するために 'wireguard-tools' パッケージをインストールする必要があります。これには、キーの生成、Wireguard サーバーの起動、その他多くの操作が含まれます。

以下の dnf コマンドを実行して「wireguard-tools」をインストールします。確認を求められたら、y と入力して ENTER を押して続行してください。

sudo dnf install wireguard-tools

今、'wireguard-tools' のインストールを開始する必要があります。

あなたのRocky Linuxサーバーには、'wireguard'カーネルモジュールが有効になり、'wireguard-tools'がインストールされました。次に、wireguard-toolsを使用してWireguardサーバーとクライアントの両方のキーペアを生成する方法について説明します。

サーバーとクライアントのキー ペアを生成しています

wireguard-toolsは、Wireguardの展開を管理するためのユーザースペースコマンドラインを提供します。wireguard-toolsによって提供される2つの主要なユーティリティは:

  • wg - ワイヤーガードトンネルインターフェースを設定するために使用できるコマンドラインユーティリティです。このユーティリティを使用すると、キーペアを生成したり、現在のワイヤーガードの実行状態やインターフェースを確認したり、ワイヤーガードトンネルインターフェースを設定したりできます。
  • wg-quick - Wireguardインターフェースを管理できるシンプルなコマンドラインです。wg-quickコマンドを使用して、任意のWireguardインターフェースを開始、停止、再起動することができます。

Wireguardカーネルモジュールを有効にし、wireguard-toolsをインストールした後の最初のステップは、Wireguardサーバーとクライアントの両方のキーペアを生成することです。これは、'wg'コマンドユーティリティを使用して行うことができます。

サーバーキー対を生成する

以下の 'wg genkey' コマンドを実行して、サーバーの秘密鍵 '/etc/wireguard/server.key' を生成します。その後、デフォルトの権限を '0400' に変更して、他のユーザーやグループからの書き込みと実行を無効にします。

wg genkey | sudo tee /etc/wireguard/server.key
sudo chmod 0400 /etc/wireguard/server.key

その後、以下のコマンドを実行して、WireGuardサーバーの公開鍵「/etc/wireguard/server.pub」を生成します。WireGuardの公開鍵は、WireGuardの秘密鍵「/etc/wireguard/server.key」から導出されます。

sudo cat /etc/wireguard/server.key | wg pubkey | sudo tee /etc/wireguard/server.pub

出力 :

次に、以下のcatコマンドを使用して、wireguardサーバーの公開鍵と秘密鍵の両方を確認してください。

cat /etc/wireguard/server.key
cat /etc/wireguard/server.pub

公開鍵と秘密鍵それぞれに異なる鍵を持つことができますが、出力は次のようになります。

クライアント鍵ペアの生成

WireGuardサーバーのキー ペアを生成した後、クライアント用の新しいキー ペアを生成します。この例では、'client1'という名前の新しいキー ペアを生成します。

以下のコマンドを実行して新しいディレクトリ「/etc/wireguard/clients」を作成します。このディレクトリはクライアントのキー ペアを保存するために使用されます。

mkdir -p /etc/wireguard/clients

次に、以下の 'wg genkey' コマンドを実行して、クライアントの秘密鍵 '/etc/wireguard/clients/client1.key' を生成します。その後、'/etc/wireguard/clients/client1.pub' というクライアントの公開鍵を 'wg pubkey' コマンドを使って生成します。

wg genkey | tee /etc/wireguard/clients/client1.key
cat /etc/wireguard/clients/client1.key | wg pubkey | tee /etc/wireguard/clients/client1.pub

出力 :

次に、以下のcatコマンドを使用して、クライアントの公開鍵と秘密鍵の両方を確認してください。

cat /etc/wireguard/clients/client1.key
cat /etc/wireguard/clients/client1.pub

キーは、WireGuardサーバーとクライアントのキー対の両方で類似している必要があり、これはbase64に似たキーです。

Wireguardサーバーの設定

このステップでは、WireGuardサーバーの新しい設定ファイルを作成し、WireGuardインターフェースを設定し、クライアント接続のためのピア接続を設定します。これには、WireGuard VPNのサブネットの設定、WireGuardサーバーからのIPアドレス、およびピアクライアントのIPアドレスが含まれます。

まず、以下のnanoエディタコマンドを使用して新しいWireGuardサーバーの設定ファイル'/etc/wireguard/wg0.conf'を作成します。

sudo nano /etc/wireguard/wg0.conf

以下の行をファイルに追加し、'PrivateKey'をWireguardサーバーの秘密鍵'server.key'に変更してください。これにより、WireguardサーバーインターフェースがIPアドレス'10.8.0.1'で実行されるように設定されます。クライアント接続にはUDPポート51820を使用します。最後に、WireguardインターフェースがオフのときでもWireguard設定ファイルに変更が保存されることを保証するSaveConfigパラメーターを有効にします。

[Interface]
Wireguard Server private key - server.key
PrivateKey = iHaI5bkEbW8wqTQDbU/KITGhxtKoiezWVohVZsKwj3w=
Wireguard interface will be run at 10.8.0.1
Address = 10.8.0.1/24
Clients will connect to UDP port 51820
ListenPort = 51820
Ensure any changes will be saved to the Wireguard config file
SaveConfig = true

次に、クライアントピア接続を定義するために以下の行を追加します。'PublicKey'パラメーターをクライアントパブリックキー'client1.pub'に変更することを忘れないでください。'AllowedIPs'パラメーターを使用することで、このピアにアクセスを許可するWireguardクライアントを指定できます。この例では、IP'10.8.0.8'を持つクライアントのみがこのピア接続にアクセスを許可されます。さらに、内ネットワークのサブネットの範囲(例:'172.16.100.0/24')にもWireguardピアへのアクセスを許可することができます。

[Peer]
Wireguard client public key - client1.pub
PublicKey = iWskvxyj+QK4185xO6Z2Fb0XYo1jGyiyI3iKbyGTkT8=
clients' VPN IP addresses you allow to connect
possible to specify subnet ⇒ [172.16.100.0/24]
AllowedIPs = 10.8.0.8/24

作業が終わったら、ファイルを保存して終了してください。

これで、Wreguardサーバーの基本設定が作成されました。また、クライアントの公開鍵「client1.pub」を使用して、クライアントのピア接続を定義しました。次のステップでは、WireGuardサーバーでポートフォワーディングを設定し、トラフィックルーティングのためのfirewalldルールを設定します。

ポートフォワーディングの設定

任意のVPNサーバーを設定するには、デプロイメントサーバーでポートフォワーディングを有効にする必要があります。このステップでは、/etc/sysctl.confファイルを使ってRocky Linuxサーバーでポートフォワーディングを有効にします。

以下のnanoエディタを使用して、設定ファイル「/etc/sysctl.conf」を開いてください。

sudo nano /etc/sysctl.conf

次の行を下部に追加してください。これらの行は、IPv4とIPv6の両方のポートフォワーディングを有効にします。IPv6が必要かどうかにかかわらず、行の先頭にコメント#を入れることで無効にできます。

Port Forwarding for IPv4
net.ipv4.ip_forward=1
Port forwarding for IPv6
net.ipv6.conf.all.forwarding=1

ファイルを保存して、作業が完了したらエディタを終了してください。

次に、'sysctl' コマンドを実行して、'/etc/sysctl.conf' ファイルの変更を適用してください。

sudo sysctl -p

そして、あなたはこのような出力を受け取ることになります:

ポートフォワーディングが有効になっていると、次にクライアントからWireGuardサーバーの特定のネットワークインターフェースへのトラフィックをルーティングするために使用されるfirewalldを設定します。

Firewalldの設定

このステップでは、Wireguardサーバーにfirewalldを設定します。クライアントのトラフィックをfirewalldを介してWireguardサーバーの特定のネットワークインターフェイスにルーティングします。そして、これはfirewalldに新しいルールを永久に追加することによって行うことも、Wireguardの設定ファイル内のPostUpおよびPostDownパラメータを使用することによって行うこともできます。

始める前に、以下のipコマンドを実行して、WireGuardサーバーでインターネットアクセスに使用されるデフォルトのネットワークインターフェースを確認してください。

ip route show default

このような出力が得られます - この例では、WireGuardサーバーはインターネットアクセスのためにeth0インターフェースを使用しました。あなたのサーバーではネットワークインターフェースの名前が異なる場合があります。

次に、以下のnanoエディタコマンドを使用して、WireGuardサーバーの設定ファイル「/etc/wireguard/wg0.conf」を開きます。

sudo nano /etc/wireguard/wg0.conf

[インターフェース]セクションに次の行を追加してください。

PostUp = firewall-cmd --zone=public --add-masquerade
PostUp = firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i wg -o eth0 -j ACCEPT
PostUp = firewall-cmd --direct --add-rule ipv4 nat POSTROUTING 0 -o eth0 -j MASQUERADE
PostDown = firewall-cmd --zone=public --remove-masquerade
PostDown = firewall-cmd --direct --remove-rule ipv4 filter FORWARD 0 -i wg -o eth0 -j ACCEPT
PostDown = firewall-cmd --direct --remove-rule ipv4 nat POSTROUTING 0 -o eth0 -j MASQUERADE

ファイルを保存して終了します。

  • 「PostUp」パラメータは、WireGuardサーバーがVPNトンネルを開始するたびに実行されます。
  • 「PostDown」パラメータは、WireguardサーバーがVPNトンネルを停止するたびに実行されます。
  • 'firewall-cmd --zone=public --add-masquerade'というコマンドは、firewalldでマスカレードを有効にします。
  • コマンド「firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i wg -o eth0 -j ACCEPT」は、WireGuardインターフェースからeth0へのトラフィックに対するfirewalldのリッチルールを追加します。
  • コマンド'firewall-cmd --direct --add-rule ipv4 nat POSTROUTING 0 -o eth0 -j MASQUERADE'は、eth0インターフェースを通じてNATを有効にします。
  • 「PostDown」パラメータでは、これらのコマンドはすべて、「PostUp」パラメータで実行されたコマンド中に適用されたルールを削除することによって、firewalldの変更を元に戻すために使用されます。

次に、以下のfirewall-cmdコマンドを実行して、WireGuardクライアントで使用されるUDPポート51820を開きます。それから、変更を適用するためにfirewalldを再読み込みします。

sudo firewall-cmd --add-port=51820/udp --permanent
sudo firewall-cmd --reload

最後に、以下のfirewall-cmdコマンドを使ってfirewalldルールを確認してください。

sudo firewall-cmd --list-all

出力は次のようになります - wireguardクライアントポート51820/udpがfirewalldに追加されました。

これで、WireGuardサーバーでポートフォワーディングが有効になり、firewalldがWireGuardインターフェースから特定のネットワークインターフェースへのトラフィックをルーティングするように設定されました。これで、WireGuardサーバーを開始する準備が整いました。

Wireguardサーバーの起動

このステップでは、Wireguardサーバーを開始し、有効にします。また、Wireguardサーバーを確認し、Wireguardサービスによって作成されるwg0インターフェースを検証します。

以下のsystemctlコマンドユーティリティを実行して、WireGuardサーバーを起動し、常に起動するように設定します。これにより、WireGuardサービスが起動し、新しいWireGuardインターフェース「wg0」が作成されます。

sudo systemctl start [email 
sudo systemctl enable [email 

以下のsystemctlコマンドを使用してwireguardサーバーを確認してください。これにより、wireguardサーバーが実行されていることが確認できます。

sudo systemctl status [email 

そして、あなたは次のような出力を受け取ります - WireGuardサーバーは現在有効になっており、起動時に自動的に実行されます。そして、WireGuardサーバーの状態は稼働中です。

下記のipコマンドを使用して、wireguardサーバーによって作成されたインターフェース「wg0」を確認することもできます。

ip a show wg0

wg0 の詳細なインターフェースが受信されます。これは、Wireguard サーバーの設定ファイル'/etc/wireguard/wg0.conf'に一致します。wg0 インターフェースは、Wireguard 設定ファイル'/etc/wireguard/wg0.conf'に記載されているように、IP アドレス'10.8.0.1'を持っている必要があります。

Wireguardサーバーを起動するために使用できる別の方法は、wireguard-toolsによって提供されるwg-quickコマンドユーティリティを使用することです。

「wg-quick up」を実行してWireGuardサーバーを起動し、「wg-quick down」を実行してWireGuardサーバーを停止します。また、WireGuardサーバーの設定ファイルのフルパス「/etc/wireguard/wg0.conf」を指定することを忘れないでください。

sudo wg-quick up /etc/wireguard/wg0.conf
sudo wg-quick down /etc/wireguard/wg0.conf

この時点で、WireGuardサーバーはRocky Linuxサーバー上で稼働しています。次のステップでは、クライアントマシンをセットアップし、それをWireGuardサーバーに接続します。

クライアントの設定とWireguardサーバーへの接続

このステップでは、LinuxクライアントマシンにWireGuardをセットアップし、そのクライアントマシンをWireGuardサーバーに接続します。この例では、ホスト名が「client1」のRocky Linuxをクライアントマシンとして使用していますが、他のLinuxディストリビューションも使用できます。

クライアントマシンにログインし、以下のdnfコマンドを実行してwireguard-toolsパッケージをクライアントにインストールします。この操作では、wireguard-toolsがDNSリゾルバを管理するために使用する依存関係'systemd-resolved'もインストールされます。

sudo dnf install wireguard-tools

プロンプトが表示されたらyを入力し、ENTERキーを押して続行してください。

「wireguard-tools」のインストール中に、systemd-resolvedパッケージも依存関係としてインストールされます。

以下のコマンドを実行して、'systemd-resolved' サービスを開始および有効にします。

sudo systemctl start systemd-resolved
sudo systemctl enable systemd-resolved

wireguard-toolsがインストールされ、systemd-resolvedが実行されている状態で、次にNetworkManagerを設定して、DNSバックエンドとしてsystemd-resolvedを使用します。

/etc/NetworkManager/NetworkManager.confというNetworkManagerの設定ファイルを、以下のnanoエディタコマンドを使用して開いてください。

sudo nano /etc/NetworkManager/NetworkManager.conf

[main]セクションに以下のように「dns」パラメータを追加してください。

[main]
dns=systemd-resolved

ファイルを保存してエディタを終了してください。

次に、以下のコマンドを実行して、'/etc/resolv.conf' ファイルを削除し、systemd-resolved によって管理されている 'resolv.conf' ファイルの新しいシンボリックリンクファイルを作成します。

rm -f /etc/resolv.conf
sudo ln -s /usr/lib/systemd/resolv.conf /etc/resolv.conf

変更を適用するために、NetworkManagerサービスを再起動してください。

sudo systemctl restart NetworkManager

ネットワークマネージャーが構成されたので、これでワイヤーガードクライアントを設定する準備が整いました。

/etc/wireguard/wg-client1.confという新しいファイルを下記のnanoエディタを使用して作成してください。

sudo nano /etc/wireguard/wg-client1.conf

ファイルに以下の行を追加してください。

[Interface]
Define the IP address for the client - must be matched with wg0 on Wireguard Server
Address = 10.8.0.8/24
Private key for the client - client1.key
PrivateKey = 4FsCdtKr9GrLiX7zpNEYeqodMa5oSeHwH/m9hsNNfEs=
Run resolvectl command
PostUp = resolvectl dns %i 1.1.1.1 9.9.9.9; resolvectl domain %i ~.
PreDown = resolvectl revert %i
[Peer]
Public key of the Wireguard server - server.pub
PublicKey = aK+MQ48PVopb8j1Vjs8Fvgz5ZIG2k6pmVZs8iVsgr1E=
Allow all traffic to be routed via Wireguard VPN
AllowedIPs = 0.0.0.0/0
Public IP address of the Wireguard Server
Endpoint = 192.168.5.59:51820
Sending Keepalive every 25 sec
PersistentKeepalive = 25

ファイルを保存して、作業が完了したらエディタを終了してください。

「[インターフェース]」セクションでは、次のことを定義する必要があります。

  • クライアントのIPアドレスは、Wireguardサーバーのサブネットと一致する必要があります。この例では、WireguardクライアントはIPアドレス「10.8.0.8」を取得します。
  • クライアント用のDNSサーバーをresolvectlコマンドを介して指定します。
  • 生成したクライアント秘密鍵「client1.key」で「PrivateKey」パラメータを変更してください。

「[Peer]」セクションには、以下の内容を追加する必要があります:

  • Wireguardサーバーの公開鍵'server.pub'をPublicKeyパラメータに設定します。
  • AllowedIPsを指定してVPNピアのアクセスを制限することができます。ネットワークのサブネットを指定するか、すべてのトラフィックをVPN経由でトンネルするために0.0.0.0/0を指定することもできます。
  • WireguardサーバーのパブリックIPアドレスでエンドポイントパラメータを指定するか、ドメイン名を使用することもできます。

作成したWireGuardクライアント設定ファイルを使用して、以下の<'wg-quick up'>コマンドを介してクライアントマシンでWireGuardを実行できます。

wg-quick up wg-client1

次のような出力が得られます - 新しいWireGuardインターフェース'wg-client1'が作成され、IPアドレス'10.8.0.8'が取得されました。

下記のipコマンドを使用して、'wg-client1'インターフェースを確認してください。

ip a show wg-client1

以下は、あなたのターミナルに印刷される類似の出力です。

次の'resolvectl'コマンドを使用して、wg-client1インターフェース上のDNSリゾルバを確認することもできます。

resolvectl status wg-client1

以下は、ターミナルで受け取る出力です - wireguardインターフェースwg-client1は、'PostUp'パラメータを介して定義されたDNSリゾルバーを使用しており、それは'systemd-resolved'を使用しています。

さらに、'wg show' コマンドを使って Wireguard 接続を確認することもできます。

ワイヤーガードクライアントマシンで「wg show」コマンドを実行すると、以下のスクリーンショットのような出力が得られます。

wg show

WireguardサーバーのIPアドレスはエンドポイントセクションに表示されるべきです。また、Wireguardサーバーの公開鍵server.pubも見ることができます。

WireGuardサーバーに戻り、以下のコマンドを実行します。

wg show

以下は、あなたのターミナルで受け取る類似の出力です - エンドポイントセクションでは、クライアントの公開IPアドレスが表示され、ピアセクションではクライアントの公開鍵client1.pubが表示されます。

最後に、クライアントマシンがインターネットにアクセスできるか、またはWireguard VPNの内部ネットワークサブネットにアクセスできることを確認するために、以下のコマンドを実行してください。

ping -c5 10.8.0.1
ping -c5 1.1.1.1
ping -c5 duckduckgo.com

以下があなたが受け取るべき出力です:

クライアントマシンは、IPアドレスが10.8.0.1であるWireguardサーバーに接続できます。

クライアントマシンはインターネットにアクセスできます。すべてのトラフィックはWireguardサーバーのパブリックIPアドレスを介してルーティングされます。

これでクライアントマシンにWireGuard VPNが設定されました。また、クライアントマシンとWireGuardサーバー間の接続も確認しました。

結論

このガイドでは、Rocky Linux 9 に WireGuard VPN サーバーをインストールおよび設定しました。また、WireGuard サーバーに接続するために Rocky Linux クライアント マシンを設定する方法も学びました。それに加えて、ポートフォワーディングを有効にし、firewalld を介して NAT を設定する方法も学びました。

最後に、あなたは公開鍵と秘密鍵のペアを生成し、WireGuard VPN接続を検証するための基本的な使い方を学びました。そして、WireGuard接続を開始および停止するための「wg-quick」コマンドの使い方も学びました。

WireGuardについてもっと学びたい場合は、WireGuardのドキュメントを訪れてください。また、WireGuard VPNサーバーの自動化デプロイメントを見つけるために、WireGuardに関連するGitHubのトピックも訪れることができます。

関連記事: