LinuxでWireguard VPNを設定する方法

ノートパソコンとその横にデスクトップモニターの写真。

Wireguardは、デスクトップおよびモバイルデバイスの両方で実行できる強力なオープンソースの仮想プライベートネットワーク(VPN)デーモンです。従来のVPNソリューション(IPsecやOpenVPNなど)に対する高速で軽量な代替手段を提供します。ここでは、Wireguardをインストールし、3台のLinuxマシンを使用してシンプルなVPNセットアップを作成する方法を示します。

目次

  • WireguardをVPNソリューションとして使用する理由
  • Wireguardの取得
  • Wireguardサーバーの設定
  • Wireguardクライアントの設定と接続
  • サーバーにセカンドクライアントを追加
  • Wireguardネットワークのテスト

WireguardをVPNソリューションとして使用する理由

Wireguardの最大のセールスポイントの1つは、高速で軽量なVPNデーモンであることです。従来のソリューションとは異なり、Wireguardはネットワークに多くのオーバーヘッドを追加しません。これにより、レイテンシが低く、ノード全体でのスループット率が高くなります。

2つのWireguardノード間のiperf3テストを示すターミナル、高スループットを表示。

Wireguardのもう1つの重要な特徴は、Linuxカーネル内のモジュールであることです。これにより、コンピュータの追加のシステムリソースを消費せずに実行できるため、低スペックやSOCデバイスへの展開に最適な選択肢となります。

LinuxカーネルにロードされたWireguardを示すターミナル。

最後に、Wireguardは最新の暗号化標準と開発プラクティスを活用しています。また、Wireguardのコードの正確性、セキュリティ保証、および攻撃に対する抵抗能力を確認する複数の正式な検証が行われています。

ちなみに: Wireguardにまだ納得していませんか?WireguardがOpenVPNとどのように比較されるかを学んでください。

Wireguardの取得

LinuxにWireguardを設定する最初のステップは、ディストリビューションのリポジトリからそのコアツールをダウンロードすることです。これにより、ユーザースペースコマンドを使用して組み込みのWireguardカーネルモジュールを制御できます。

UbuntuおよびDebianでコアツールをインストールするには、次のコマンドを実行します:

sudo apt install wireguard wireguard-tools

Fedoraでは、dnfパッケージマネージャを使用できます:

sudo dnf install wireguard-tools

Arch Linuxでは、pacmanを実行してWireguardコアツールを取得できます:

sudo pacman -S wireguard-tools

Wireguardツールが正しくインストールされていることを確認するには、ヘルプ画面を表示します:

wg -h

Wireguardユーザースペースツールのヘルプメニューを示すターミナル。

Wireguardサーバーの設定

前提条件: この記事は、公開アクセス可能なIPv4アドレスを持つLinuxシステムにWireguardサーバーをインストールすることを前提としています。NATの背後にあるサーバーでも指示は機能しますが、そのサブネット外のノードを見つけることはできません。

LinuxマシンにWireguardコアツールキットがインストールされたので、VPNのサーバーノードを設定できます。これがネットワーク内のクライアントノードのインターネットゲートウェイとして機能します。

まず、Wireguard設定ディレクトリに移動し、デフォルトの権限を「rootのみ」に設定します:

cd/etc/wireguard  
sudo umask 077

注意: 一部のシステムでは、通常のユーザーとして「/etc/wireguard」フォルダーに入ることを防ぐ場合があります。それを修正するには、sudo -sを使用してrootユーザーに切り替えます。

Wireguardサーバーの公開鍵と秘密鍵を生成します:

sudo sh -c 'wg genkey | tee /etc/wireguard/server-private-key | wg pubkey > /etc/wireguard/server-public-key'

お気に入りのテキストエディタを使用してサーバーの設定ファイルを作成します:

sudo nano /etc/wireguard/wg0.conf

サーバー設定ファイル内に次のコードブロックを貼り付けます:

[Interface]  
PrivateKey= PASTE-YOUR-SERVER-PRIVATE-KEY-HERE  
Address= 10.0.0.1/32  
ListenPort= 60101  
PostUp= iptables -t nat -I POSTROUTING -o NETWORK-INTERFACE-HERE -j MASQUERADE  
PostDown= iptables -t nat -D POSTROUTING -o NETWORK-INTERFACE-HERE -j MASQUERADE

新しいターミナルセッションを開き、サーバーのWireguard秘密鍵を印刷します:

sudo cat /etc/wireguard/server-private-key

サーバーの秘密鍵をクリップボードにコピーします。

Ubuntuでサーバーの秘密鍵をコピーするプロセスを示すターミナル。

PrivateKey変数の値をクリップボードの鍵に置き換えます。

サーバーのWireguard設定内のサーバー秘密鍵を示すターミナル。

ipコマンドを使用してインターネットにアクセスできるネットワークインターフェースを見つけます:

ip route get 8.8.8.8

PostUpおよびPostDown変数の両方の-oフラグの値をインターネットアクセスのあるインターフェースに設定し、設定ファイルを保存します。

Wireguardサーバーの設定ファイル内の適切なデバイス名を示すターミナル。

お気に入りのテキストエディタを使用してサーバーの「/etc/sysctl.conf」ファイルを開きます:

sudo nano /etc/sysctl.conf

net.ipv4.ip_forward=1を含む行までスクロールし、その前の#記号を削除します。

sysctl.conf内のIPv4転送オプションの場所を強調表示するターミナル。

新しいsysctl設定をリロードするには、次のコマンドを実行します:sudo sysctl -p

FYI: WireguardはLinuxで実行できる唯一のVPNソリューションではありません。OpenVPNを使用して独自のVPNを作成する方法を学んでください。

Wireguardクライアントの設定と接続

この時点で、適切に構成されたWireguardサーバーがあり、ピアはありません。それを使用するには、最初のWireguardクライアントを設定して接続する必要があります。

クライアントシステムのWireguard設定ディレクトリに移動し、デフォルトの権限を設定します:

cd/etc/wireguard  
sudo umask 077

次のコマンドを使用してクライアントのWireguardキーペアを生成します:

sudo sh -c 'wg genkey | tee /etc/wireguard/client1-private-key | wg pubkey > /etc/wireguard/client1-public-key'

お気に入りのテキストエディタを使用してクライアントのWireguard設定ファイルを作成します:

sudo nano /etc/wireguard/wg0.conf

クライアント設定ファイル内に次のコードブロックを貼り付けます:

[Interface]  
PrivateKey= PASTE-YOUR-CLIENT1-PRIVATE-KEY-HERE  
Address= 10.0.0.2/32  
ListenPort= 60101  
  
[Peer]  
PublicKey= PASTE-YOUR-SERVER-PUBLIC-KEY-HERE  
AllowedIPs= 0.0.0.0/0  
Endpoint= PASTE-YOUR-SERVER-IP-ADDRESS-HERE:60101  
PersistentKeepalive= 25

PrivateKey変数をクライアントの秘密鍵に置き換えます。

最初のWireguardクライアントの秘密鍵を強調表示するターミナル。

Wireguardサーバーのターミナルセッションを開き、その公開鍵を印刷します:

sudo cat /etc/wireguard/server-public-key

PublicKey変数の値をサーバーの公開鍵に設定します。

2番目のクライアントの設定ファイル内のWireguardサーバーの公開鍵を強調表示するターミナル。

Endpoint変数をWireguardサーバーのIPアドレスに変更します。

WireguardサーバーのIPアドレスを強調表示するターミナル。

設定ファイルを保存し、wg-quickコマンドを使用してWireguardクライアントを起動します:

sudo wg-quick up wg0

Wireguardクライアントデーモンを起動するプロセスを示すターミナル。

注意: このコマンドは、Wireguardサーバーを起動するまでクライアントのネットワーク接続を無効にします。元のネットワークに戻るには、sudo wg-quick down wg0を実行します。

Wireguardサーバーをクライアントにリンクする

Wireguardサーバーのターミナルセッションに移動し、その設定ファイルを開きます:

sudo nano /etc/wireguard/wg0.conf

[Interface]セクションの後に次のコードブロックを貼り付けます:

[Peer]  
PublicKey= PASTE-YOUR-CLIENT1-PUBLIC-KEY-HERE  
AllowedIPs= 10.0.0.2/32  
PersistentKeepalive= 25

PublicKey変数をWireguardクライアントの公開鍵に設定します。

[Peer]ブロックの場所を示し、クライアントの公開鍵を強調表示するターミナル。

注意: 公開鍵は、クライアントマシンでsudo cat /etc/wireguard/client1-public-keyを実行することで取得できます。

設定ファイルを保存し、次のコマンドを実行してサーバーでWireguardサービスを起動します:

sudo wg-quick up wg0

サーバーにセカンドクライアントを追加

すべてのVPNサービスの重要な機能の1つは、異なるネットワークの複数のマシンをリンクできることです。これは、異なる場所にコンピュータがある場合や、友人のためにプライベートゲームサーバーをホストしたい場合に便利です。

Wireguardでこれを行うには、サーバー上に新しいVPNインターフェースの設定ファイルを作成する必要があります。最も簡単な方法は、現在のサーバー設定をコピーし、そのコピーに新しい名前を付けることです:

sudo cp /etc/wireguard/wg0.conf /etc/wireguard/wg1.conf

お気に入りのテキストエディタを使用して新しい設定ファイルを開きます:

sudo nano /etc/wireguard/wg1.conf

ListenPort変数を60102に設定します。これにより、wg0とwg1のVPNインターフェース間でポートの衝突を防ぎます。

2番目のWireguardインターフェースのListenPort変数を修正したことを示すターミナル。

[Peer]セクションに移動し、AllowedIPs変数を「10.0.0.2/32」から「10.0.0.3/32」に変更し、設定ファイルを保存します。

2番目のWireguardクライアントのAllowedIPs変数を修正したことを示すターミナル。

2番目のWireguardクライアントの設定

2台目のマシンにログインし、Wireguard設定ディレクトリを準備します:

cd/etc/wireguard  
sudo umask 077

次のコマンドを使用して新しいWireguardキーペアを生成します:

sudo sh -c 'wg genkey | tee /etc/wireguard/client2-private-key | wg pubkey > /etc/wireguard/client2-public-key'

お気に入りのテキストエディタを使用して新しい設定ファイルを作成します:

sudo nano /etc/wireguard/wg0.conf

新しい設定ファイル内に次のコードブロックを貼り付けます:

[Interface]  
PrivateKey= PASTE-YOUR-CLIENT2-PRIVATE-KEY-HERE  
Address= 10.0.0.3/32  
ListenPort= 60102  
  
[Peer]  
PublicKey= PASTE-YOUR-SERVER-PUBLIC-KEY-HERE  
AllowedIPs= 0.0.0.0/0  
Endpoint= PASTE-YOUR-SERVER-IP-ADDRESS-HERE:60102  
PersistentKeepalive= 25

PrivateKey変数を2台目のマシンの秘密鍵に設定し、PublicKey変数をサーバーの公開鍵に変更します。

Endpoint変数をサーバーのIPアドレスに置き換え、「:60102」を追加します。

設定ファイルを保存し、2台目のマシンのWireguardクライアントを起動します:

sudo wg-quick up wg0

2番目のクライアントをWireguardサーバーにリンクする

再度Wireguardサーバーにログインし、2番目のクライアントのVPNインターフェース設定を開きます:

sudo nano /etc/wireguard/wg1.conf

[Peer]セクションまでスクロールし、PublicKey変数を2番目のクライアントの公開鍵に置き換えます。

サーバーのwg1設定ファイル内の2番目のクライアントの公開鍵を強調表示するターミナル。

設定ファイルを保存し、wg-quickコマンドを使用して2番目のVPNインターフェースを起動します:

sudo wg-quick up wg1

最初と2番目のWireguardクライアントがサーバーに正しく表示されていることを確認するには、wgを実行します。

Wireguardサーバーと通信している2つのクライアントノードを示すターミナル。

Wireguardネットワークのテスト

サーバーとクライアントの両方がWireguardネットワークに接続されているので、ノード間の接続性とレイテンシをテストできます。これを行うには、システムにネットワーク診断ツールがインストールされていることを確認してください:

sudo apt install net-tools curl

Fedoraでは、curlをインストールするだけで済みます。ネットワーキングツールはすでに標準で付属しています:

sudo dnf install curl

Arch Linuxでは、pacmanを使用してネットワークツールとcurlをインストールできます:

sudo pacman -S traceroute curl

2つのクライアント間のパケットのルートを追跡することから始めます。以下は、IPパケットが「10.0.0.2」から「10.0.0.3」に移動する様子を示します:

traceroute 10.0.0.3

ノードのいずれかが一般的なIPアドレスにpingを送信して、公共インターネットにアクセスできるかどうかを確認します:

ping -c 5 8.8.8.8

外部サイトへのWireguardネットワークからのレイテンシを示すターミナル。

最後に、ノードがWireguardサーバーに同じ公共IPアドレスを共有していることを確認します:

curl ipinfo.io/ip

3つのWireguardノード間で同様の外部IPアドレスを強調表示するターミナル。

LinuxでWireguardネットワークを設定することを学ぶことは、VPNの魅力的な世界を探求する第一歩です。深く掘り下げて、今日入手可能な最高のセキュリティ重視のVPNプロバイダーの選択を見てみましょう。

画像クレジット:Kari Shea via UnsplashおよびWikimedia Commons。すべての変更とスクリーンショットはRamces Redによるものです。