Debian 11でWireGuardをセットアップする方法

導入

WireGuardは、IPv4およびIPv6接続をサポートする軽量な仮想プライベートネットワーク(VPN)です。VPNを使用すると、プライベートネットワーク上にいるかのように、信頼されていないネットワークを通過することができます。ホテルやコーヒーショップのWi-Fiなど、信頼されていないネットワークに接続した場合でも、スマートフォンやノートパソコンから安全かつ安全にインターネットにアクセスする自由を提供します。また、Tailscaleのように、SSHや他の機密ポートを開いたままにする必要がなく、独自のインフラストラクチャにアクセスするためにVPNを展開することもできるかもしれません。

WireGuardの暗号化は、ピア同士が暗号化されたトンネルを確立するために公開鍵と秘密鍵に依存しています。各バージョンのWireGuardは、簡単さ、セキュリティ、およびピアとの互換性を確保するために特定の暗号化技術の暗号スイートを使用しています。

他のVPNソフトウェア、例えばOpenVPNやIPSecは、トランスポート層セキュリティ(TLS)と証明書を使用して認証し、システム間で暗号化トンネルを確立します。TLSの異なるバージョンには、数百もの異なる暗号スイートやアルゴリズムをサポートする機能があります。これによりさまざまなクライアントに対応する柔軟性が生まれますが、TLSを使用したVPNの設定は時間がかかり、複雑でエラーが発生しやすいです。

このチュートリアルでは、Debian 11 サーバーに WireGuard をセットアップし、それから別のマシンをIPv4とIPv6の両方の接続を使用してピアとして接続するように設定します(一般的にデュアルスタック接続と呼ばれます)。さらに、VPNを使用して暗号化されたピア間トンネルとしてだけでなく、WireGuard サーバーをゲートウェイ構成でピアのインターネットトラフィックをルーティングする方法も学びます。

このチュートリアルでは、WireGuardサーバーの「ピア」(またはクライアントとも呼ばれます)として、別のDebian 11システムを構成します。このシリーズの後続のチュートリアルでは、Windows、macOS、Android、およびiOSシステムやデバイスにWireGuardをインストールおよび実行する方法について説明します。

Note

注意:デジタルオーシャンのドロップレットでWireGuardをセットアップする場合、我々は多くのホスティングプロバイダと同様に、トラフィック超過に対して料金を請求していますことを認識してください。そのため、サーバーが処理するトラフィック量に注意してください。詳細については、このページをご覧ください。

前提条件 (Zentei jōken)

このチュートリアルに従うためには、以下が必要です:

  • One Debian 11 server with a sudo non-root user and a firewall enabled. To set this up, you can follow our Initial Server Setup with Debian 11 tutorial. We will refer to this as the WireGuard Server throughout this guide.
  • You’ll need a client machine that you will use to connect to your WireGuard Server. In this tutorial we’ll refer to this machine as the WireGuard Peer. For the purposes of this tutorial, it’s recommended that you use your local machine as the WireGuard Peer, but you can use remote servers, or mobile phones as clients if you prefer. If you are using a remote system, be sure to follow all of the optional sections later in this tutorial or you may lock yourself out of the system.
  • To use WireGuard with IPv6, you will also need to ensure that your server is configured to support that type of traffic. If you would like to enable IPv6 support with WireGuard and are using a Silicon Cloud vServer, please refer to this documentation page How to Enable IPv6 on vServers. You can add IPv6 support when you create a vServer, or afterwards using the instructions on that page.

ステップ1:WireGuardのインストールとキーペアの生成

このチュートリアルの最初のステップは、サーバーにWireGuardをインストールすることです。始めに、以下のコマンドを使ってWireGuardサーバーのパッケージインデックスを更新し、WireGuardをインストールしてください。もし今回のセッションでsudoを初めて使用する場合、sudoユーザーのパスワードを提示されることがあります。

  1. sudo apt update
  2. sudo apt install wireguard

 

WireGuardをインストールしたので、次はサーバーの秘密鍵と公開鍵のペアを生成する手順です。秘密鍵と公開鍵は、組み込みの「wg genkey」と「wg pubkey」コマンドを使用して作成し、その後、秘密鍵をWireGuardの設定ファイルに追加します。

作成したキーのアクセス権を変更するには、chmodコマンドを使用する必要があります。デフォルトでは、サーバー上の任意のユーザーがファイルを読み取ることができます。

以下のコマンドを使用して、WireGuardのプライベートキーを作成し、そのパーミッションを変更します。

  1. wg genkey | sudo tee /etc/wireguard/private.key
  2. sudo chmod go= /etc/wireguard/private.key

 

「sudo chmod go=…」コマンドは、ルートユーザー以外のユーザーやグループに対するファイルの権限を削除し、プライベートキーにアクセスできるのはルートユーザーだけであることを保証します。

以下の文を日本語で言い換えます(日本語の1つのオプションのみ必要です):
base64でエンコードされたアウトプットの1行を受け取る必要があります。アウトプットのコピーは、将来的な参照のために/etc/wireguard/private.keyファイルにも保存されます(コマンドの一部である「tee」の役割により)。アウトプットされたプライベートキーに注意深く目を通し、後ほどこのセクションでWireGuardの設定ファイルに追加する必要があるので、記録しておいてください。

次のステップは、プライベートキーから派生した対応する公開キーを作成することです。次のコマンドを使用して、公開キーファイルを作成してください。

  1. sudo cat /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.key

 

このコマンドは、|(パイプ)オペレーターを使用して結合される3つの個別のコマンドで構成されています。

  • sudo cat /etc/wireguard/private.key: this command reads the private key file and outputs it to the standard output stream.
  • wg pubkey: the second command takes the output from the first command as its standard input and processes it to generate a public key.
  • sudo tee /etc/wireguard/public.key: the final command takes the output of the public key generation command and redirects it into the file named /etc/wireguard/public.key.

コマンドを実行すると、再度単一の行でbase64でエンコードされた出力が表示されます。これがWireGuardサーバーの公開鍵です。接続するすべてのピアに公開鍵を配布する必要があるため、参照用にどこかにコピーしてください。

ステップ2- IPv4とIPv6アドレスの選択

前のセクションでは、WireGuardをインストールし、サーバーとのトラフィックを暗号化するために使用される鍵ペアを生成しました。このセクションでは、サーバー用の設定ファイルを作成し、サーバーが再起動する際にWireGuardが自動的に起動するように設定します。また、WireGuardサーバーとピアに使用するプライベートIPv4およびIPv6アドレスを定義します。

もしIPv4とIPv6アドレスの両方を使用する予定がある場合は、両方のセクションに従ってください。それ以外の場合は、VPNのネットワークの要件に合わせた適切なセクションの指示に従ってください。

ステップ2(a) – IPv4レンジの選択

IPv4ピアを使用してWireGuardサーバーを利用している場合、サーバーはクライアントとトンネルインタフェースに使用するためのプライベートIPv4アドレスの範囲が必要です。以下の予約済みアドレスブロックから任意の範囲のIPアドレスを選択できます(これらのブロックがどのように割り当てられているかについて詳しく学びたい場合は、RFC 1918の仕様を参照してください)。

  • 10.0.0.0 to 10.255.255.255 (10/8 prefix)
  • 172.16.0.0 to 172.31.255.255 (172.16/12 prefix)
  • 192.168.0.0 to 192.168.255.255 (192.168/16 prefix)

このチュートリアルでは、予約されたIPアドレスの最初の範囲から10.8.0.0/24をIPアドレスのブロックとして使用します。この範囲では最大255のピア接続が可能であり、通常他のプライベートIP範囲と衝突や重複するアドレスはありません。もしこの例の範囲がネットワーク構成に合わない場合は、自身のネットワーク構成に合ったアドレス範囲を選んでください。

WireGuardサーバーは、プライベートトンネルIPv4アドレスとして、レンジから1つのIPアドレスを使用します。ここでは10.8.0.1/24を使用しますが、10.8.0.1から10.8.0.255の範囲内のどのアドレスでも使用できます。もし10.8.0.1/24以外のアドレスを使用する場合は、選んだIPアドレスをメモしてください。このIPv4アドレスは、Step3で定義する設定ファイルに追加します。

ステップ2(b)- IPv6の範囲を選択する。

もしIPv6を使用してWireGuardを利用している場合、RFC 4193で定義されたアルゴリズムに基づいて固有のローカルIPv6ユニキャストアドレスプレフィックスを生成する必要があります。WireGuardサーバーで使用するアドレスは仮想トンネルインターフェースに関連付けられます。予約されたfd00::/8ブロックのプライベートIPv6アドレス内でランダムかつユニークなIPv6プレフィックスを生成するためにいくつかの手順を完了する必要があります。

RFCによると、IPv6プレフィックスを一意に取得する推奨方法は、時刻とシリアル番号やデバイスIDなどの一意の識別値を組み合わせることです。それらの値はハッシュ化され、切り詰められることで、予約されたプライベートなfd00::/8 IPブロック内の一意のアドレスとして使用できる一連のビットが得られます。

WireGuardサーバーのIPv6範囲を生成するには、以下のコマンドを使用してdateユーティリティを使って64ビットのタイムスタンプを取得してください。

  1. date +%s%N

 

以下のような数字を受け取ります。これは、1970年01月01日 00:00:00 UTCからの秒数(dateコマンドの%s)とナノ秒数(%N)が組み合わさったものです。

Output

1650301699497770167

このセクションで後で使用するために、値をどこかに記録してください。次に、サーバーのマシンID値を/var/lib/dbus/machine-idファイルからコピーしてください。この識別子はシステム固有であり、サーバーが存在する限り変更されるべきではありません。

  1. cat /var/lib/dbus/machine-id

 

以下のような出力を受け取ることになります。

/var/lib/dbus/machine-id

610cef4946ed46da8f71dba9d66c67fb

今、タイムスタンプとマシンIDを組み合わせて、得られた値をSHA-1アルゴリズムでハッシュ化する必要があります。コマンドの書式は以下のようになります。

printf <timestamp><machine-id> | sha1sum

自分のタイムスタンプとマシンの識別値を入れ替えて、コマンドを実行してください。

  1. printf 1650301699497770167610cef4946ed46da8f71dba9d66c67fb | sha1sum

 

以下のようなハッシュ値が送られてきます。

Output

442adea1488d96388dae9ab816045b24609a6c18 –

sha1sum コマンドの出力は16進数であるため、1バイトのデータを表すために2文字使用されます。例えば、出力の例での4fと26はハッシュされたデータの最初の2バイトです。

RFC内のアルゴリズムでは、ハッシュ化された出力の下位40ビットまたは5バイトのみが必要です。ハッシュから最後の5つの16進数エンコードされたバイトを表示するために、cutコマンドを使用してください。

  1. printf 442adea1488d96388dae9ab816045b24609a6c18 | cut -c 31

 

-cオプションは、指定された一連の文字だけを選択するためのcutコマンドに指示します。31-オプションは、カットが入力行の31番目から末尾までのすべての文字を表示するように指定します。

以下のような出力を受け取るべきです。

Output

24609a6c18

この例の出力において、バイトのセットは以下のようになります:24 60 9a 6c 18。

今まで生成した5バイトのIPv6ネットワークプレフィックスにfdプレフィックスを付け、可読性のために2バイトごとに:コロンで区切ることで、独自のIPv6ネットワークプレフィックスを構築できます。各ユニークプレフィックスのサブネットは合計18,446,744,073,709,551,616のIPv6アドレスを保持できるため、簡単さのためにサブネットを標準サイズの/64に制限することができます。

以前に/64サブネットサイズで生成されたバイトを使用して、結果として得られるプレフィックスは以下のようになります。

Unique Local IPv6 Address Prefix

fd24:609a:6c18::/64

このfd24:609a:6c18::/64の範囲は、サーバーとピアのWireGuardトンネルインターフェースに個別のIPアドレスを割り当てるために使用するものです。 サーバー用のIPを割り当てるには、最後の::の後ろに1を追加します。 結果のアドレスは、fd24:609a:6c18::1/64となります。 ピアは範囲内の任意のIPを使用できますが、通常はピアを追加するたびに値を1ずつ増やします。 例えば、fd24:609a:6c18::2/64です。 IPをメモして、このチュートリアルの次のセクションでWireGuardサーバーの設定を進めてください。

ステップ3 – WireGuardサーバーの設定を作成する。

ワイヤーガードサーバーの設定を作成する前に、以下の情報が必要です。

    1. ステップ1の「WireGuardのインストールとキーペアの生成」でプライベートキーが利用可能であることを確認してください。

WireGuardをIPv4で使用する場合、ステップ2(a)の「IPv4レンジの選択」で選択したサーバーのIPアドレスが必要です。この例では10.8.0.1/24です。

WireGuardをIPv6で使用する場合、ステップ2(b)の「IPv6レンジの選択」で生成したサーバーのIPアドレスが必要です。この例ではfd24:609a:6c18::1/64です。

所定の秘密鍵とIPアドレスを入手したら、次のコマンドを実行してnanoまたはお好みのエディタを使用して新しい設定ファイルを作成してください。

  1. sudo nano /etc/wireguard/wg0.conf

 

次の行をファイルに追加し、ハイライトされたbase64_encoded_private_key_goes_hereの値にはあなた自身のプライベートキーを、Addressの行にはIPアドレスを置き換えてください。また、WireGuardを別のポートで利用したい場合はListenPortの行を変更することもできます。

/etc/wireguard/wg0.conf

[Interface] PrivateKey = base64_encoded_private_key_goes_here Address = 10.8.0.1/24, fd24:609a:6c18::1/64 ListenPort = 51820 SaveConfig = true

SaveConfigの行は、WireGuardインターフェースがシャットダウンされた際に、変更内容が設定ファイルに保存されることを保証します。

/etc/wireguard/wg0.conf ファイルを保存して閉じてください。もし nano を使っている場合は、CTRL+X、その後に Y、ENTER を押して確認してください。WireGuard VPN サーバーの使用方法に応じて、基本的なサーバー設定を構築することができます。

ステップ4 — WireGuardサーバーのネットワーク設定の調整

ワイヤーガードを使用してピアをワイヤーガードサーバーに接続し、サーバー上のサービスにのみアクセスする場合、このセクションを完了する必要はありません。ワイヤーガードピアのインターネットトラフィックをワイヤーガードサーバー経由でルーティングしたい場合は、このチュートリアルのこのセクションに従ってIP転送を設定する必要があります。

転送を設定するには、nanoまたはお好きなエディタを使用してWireguardサーバーの/etc/sysctl.confファイルを開いてください。

  1. sudo nano /etc/sysctl.conf

 

IPv4を使用してWireGuardを利用している場合は、ファイルの末尾に以下の行を追加してください。

/etc/sysctl.conf の以下を日本語で言い換える:

/etc/sysctl.conf

net.ipv4.ip_forward=1

IPv6を使用している場合は、WireGuardのファイルの最後にこの行を追加してください。

/etc/sysctl.conf
/etc/sysctl.conf(システム設定ファイル)
net.ipv6.conf.all.forwarding=1

IPv4とIPv6の両方を使用している場合は、両方の行を含めることを確認してください。完了したらファイルを保存して閉じてください。

ファイルを読み込んで、現在のターミナルセッションに新しい値を読み込むには、次のコマンドを実行してください。

  1. sudo sysctl -p

 

Output

net.ipv6.conf.all.forwarding = 1 net.ipv4.ip_forward = 1

今後、あなたのWireGuardサーバーは、仮想VPNイーサネットデバイスからの着信トラフィックを他のサーバーに転送し、さらに公共インターネットへと転送することが可能になります。この設定を使用することで、WireGuardピアからのすべてのウェブトラフィックをサーバーのIPアドレスを経由してルーティングし、クライアントの公共IPアドレスは実質的に隠されます。

ただし、サーバーを経由してトラフィックが正しくルーティングされる前に、いくつかのファイアウォールルールを設定する必要があります。これらのルールにより、WireGuardサーバーとピア間のトラフィックが適切に流れるようになります。

ステップ5 – WireGuardサーバーのファイアウォールの設定

このセクションでは、WireGuardサーバーの設定を編集して、サーバーとクライアント間のトラフィックが正しくルーティングされるようにファイアウォールルールを追加します。以前のセクションと同様に、WireGuard VPNをマシン間接続だけで使用して、VPNに制限されたリソースにアクセスする場合は、このステップはスキップしてください。

サーバーのファイアウォールを通じてWireGuard VPNトラフィックを許可するには、クライアント接続を正しくルーティングするために、オンザフライで動的なネットワークアドレス変換(NAT)を提供するiptablesのコンセプトであるマスカレーディングを有効にする必要があります。

はじめに、ip routeのサブコマンドを使用してWireGuardサーバーの公開ネットワークインターフェースを見つけてください。

  1. ip route list default

 

公開インターフェースは、このコマンドの出力にある「dev」という言葉の後に続く文字列です。例えば、この結果には、下に示すようにハイライトされた名前が「eth0」というインターフェースが表示されています。

Output

default via 203.0.113.1 dev eth0 proto static

次のステップでiptablesのルールに追加するため、デバイスの名前を記録してください。

「WireGuardサーバーにファイアウォールルールを追加するには、再びnanoまたは好きなエディタで/etc/wireguard/wg0.confファイルを開いてください。」

  1. sudo nano /etc/wireguard/wg0.conf

 

ファイルの末尾に、”SaveConfig = true” の行の後ろに、以下の行を貼り付けてください。

/etc/wireguard/wg0.conf

. . . PostUp = ufw route allow in on wg0 out on eth0 PostUp = iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE PostUp = ip6tables -t nat -I POSTROUTING -o eth0 -j MASQUERADE PreDown = ufw route delete allow in on wg0 out on eth0 PreDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE PreDown = ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

WireGuardサーバーが仮想VPNトンネルを開始すると、PostUpラインが実行されます。以下の例では、ufwとiptablesのルールが3つ追加されます。

  • ufw route allow in on wg0 out on eth0 – This rule will allow forwarding IPv4 and IPv6 traffic that comes in on the wg0 VPN interface to the eth0 network interface on the server. It works in conjunction with the net.ipv4.ip_forward and net.ipv6.conf.all.forwarding sysctl values that you configured in the previous section.
  • iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE – This rule configures masquerading, and rewrites IPv4 traffic that comes in on the wg0 VPN interface to make it appear like it originates directly from the WireGuard Server’s public IPv4 address.
  • ip6tables -t nat -I POSTROUTING -o eth0 -j MASQUERADE – This rule configures masquerading, and rewrites IPv6 traffic that comes in on the wg0 VPN interface to make it appear like it originates directly from the WireGuard Server’s public IPv6 address.

WireGuardサーバーが仮想VPNトンネルを停止する時に、PreDownルールが実行されます。これらのルールは、PostUpルールの逆であり、VPNが停止されたときにVPNインターフェースのフォワーディングとマスカレーディングルールを元に戻す役割を果たします。

両方の場合、VPNに適切なIPv4とIPv6のルールを含めるか除外するように設定を編集します。例えば、IPv4のみを使用している場合、ip6tablesコマンドの行を除外することができます。

逆に、IPv6のみを使用している場合は、ip6tablesのコマンドのみを含めるように設定を編集してください。ufwの行は、IPv4とIPv6のネットワークの組み合わせに対して存在する必要があります。作業が終わったら、ファイルを保存して閉じてください。

ワイヤーガードサーバーのファイアウォールの最後の設定は、ワイヤーガードUDPポートへのトラフィックを許可することです。サーバーの/etc/wireguard/wg0.confファイルでポートを変更していない場合、開くポートは51820です。設定を編集する際に異なるポートを選択した場合は、以下のUFWコマンドでそれを置き換えてください。

前提チュートリアルに従う際にSSHポートを開くのを忘れた場合、こちらにも追加してください。

  1. sudo ufw allow 51820/udp
  2. sudo ufw allow OpenSSH

 

Note

注意:異なるファイアウォールを使用している場合や、UFWの設定をカスタマイズしている場合は、追加のファイアウォールルールを追加する必要がある場合があります。たとえば、VPN接続でネットワークトラフィックをすべてトンネリングすることを決定した場合、DNSリクエストのためにポート53の通信が許可されていること、HTTPトラフィックにはポート80、HTTPSトラフィックにはポート443などのポートが許可されていることを確認する必要があります。VPNを介して使用している他のプロトコルがある場合は、それに対するルールも追加する必要があります。

これらのルールを追加した後、UFWを無効化して再度有効化することで、変更をすべてのファイルから読み込んで再起動します。

  1. sudo ufw disable
  2. sudo ufw enable

 

ufw statusコマンドを実行することによって、規則が適用されていることが確認できます。実行して、以下のような出力を受け取るはずです。

  1. sudo ufw status

 

Output

Status: active To Action From — —— —- 51280/udp ALLOW Anywhere 22/tcp ALLOW Anywhere 51280/udp (v6) ALLOW Anywhere (v6) 22/tcp (v6) ALLOW Anywhere (v6)

あなたのWireGuardサーバーは、VPNのトラフィックを適切に処理するように設定されました。ポートフォワーディングやマスカレーディングも含まれます。ファイアウォールルールが設定されているため、WireGuardサービス自体を起動してピア接続を待ち受けることができます。

ステップ6 — WireGuard サーバーの起動

WireGuardは、組み込みのwg-quickスクリプトを使用してsystemdサービスとして構成することができます。VPNを使用するたびにトンネルを手動で作成することもできますが、この手順は繰り返し行う必要があり、エラーが発生する可能性もあります。その代わり、wg-quickスクリプトの助けを借りてsystemctlを使用してトンネルを管理することができます。

systemdのサービスを使用すると、WireGuardを起動時に設定できるため、サーバーが稼働している限りいつでもVPNに接続できます。これを行うには、systemctlに追加して定義したwg0トンネルのためにwg-quickサービスを有効にしてください。

  1. sudo systemctl enable wg-quick@wg0.service

 

Info

以下の通知に注意してください。コマンドでは、サービス名の一部としてトンネルwg0デバイスの名前が指定されています。この名前は/etc/wireguard/wg0.conf設定ファイルにマッピングされます。この命名方法により、サーバを使用して好きなだけ複数の独立したVPNトンネルを作成できます。
例えば、トンネルデバイスの名前をprodとし、その設定ファイルを/etc/wireguard/prod.confにすることができます。各トンネルの設定には、異なるIPv4、IPv6、およびクライアントのファイアウォール設定を含めることができます。このようにして、複数の異なるピア接続をサポートし、それぞれ固有のIPアドレスとルーティングルールを持つことができます。

サービスを開始してください。

  1. sudo systemctl start wg-quick@wg0.service

 

次のコマンドでWireGuardサービスがアクティブ化されているか、再度確認してください。出力に「active (running)」と表示されるはずです。

  1. sudo systemctl status wg-quick@wg0.service

 

Output

● wg-quick@wg0.service – WireGuard via wg-quick(8) for wg0 Loaded: loaded (/lib/systemd/system/wg-quick@.service; enabled; vendor preset: enabled) Active: active (exited) since Mon 2022-04-18 17:22:13 UTC; 2s ago Docs: man:wg-quick(8) man:wg(8) https://www.wireguard.com/ https://www.wireguard.com/quickstart/ https://git.zx2c4.com/wireguard-tools/about/src/man/wg-quick.8 https://git.zx2c4.com/wireguard-tools/about/src/man/wg.8 Process: 98834 ExecStart=/usr/bin/wg-quick up wg0 (code=exited, status=0/SUCCESS) Main PID: 98834 (code=exited, status=0/SUCCESS) CPU: 193ms Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] wg setconf wg0 /dev/fd/63 Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] ip -4 address add 10.8.0.1/24 dev wg0 Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] ip -6 address add fd24:609a:6c18::1/64 dev wg0 Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] ip link set mtu 1420 up dev wg0 Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] ufw route allow in on wg0 out on ens3 Apr 18 17:22:13 thats-my-jam wg-quick[98890]: Rule added Apr 18 17:22:13 thats-my-jam wg-quick[98890]: Rule added (v6) Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] iptables -t nat -I POSTROUTING -o ens3 -j MASQUERADE Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] ip6tables -t nat -I POSTROUTING -o ens3 -j MASQUERADE Apr 18 17:22:13 thats-my-jam systemd[1]: Finished WireGuard via wg-quick(8) for wg0.

出力には、構成ファイルに追加したIPv4およびIPv6アドレスを仮想のwg0デバイスに割り当てるために使用されたipコマンドが表示されます。これらのルールは、トンネルのトラブルシューティングに使用したり、手動でVPNインターフェースを設定する場合にはwgコマンド自体と組み合わせることができます。

サーバーが設定され、実行されている状態で、次のステップはクライアントマシンをWireGuardのピアとして設定し、WireGuardサーバーに接続することです。

ステップ7 – WireGuardピアの設定を行います。

WireGuardのピアの設定は、WireGuardサーバーの設定に似ています。クライアントソフトウェアをインストールしたら、公開鍵と秘密鍵のペアを生成し、ピアに対してIPアドレスを決定し、ピア用の設定ファイルを定義し、最後にwg-quickスクリプトを使用してトンネルを開始します。

以下の手順に従って、キーペアと設定を生成することでVPNに好きなだけピアを追加できます。VPNに複数のピアを追加する場合は、個々のプライベートIPアドレスを記録して衝突を防ぐようにしてください。

WireGuardピアを設定するには、次のaptコマンドを使用してWireGuardパッケージをインストールしてください。WireGuardピアで実行します。

  1. sudo apt update
  2. sudo apt install wireguard

 

WireGuardのピアのキーペアを作成する。

次に、サーバーと同じ手順を使用して、ピアでキーペアを生成する必要があります。ピアとして機能するローカルマシンまたはリモートサーバーから、次のコマンドを使用してピアの秘密鍵を作成してください。

  1. wg genkey | sudo tee /etc/wireguard/private.key
  2. sudo chmod go= /etc/wireguard/private.key

 

再度、ベース64でエンコードされた1行の出力を受け取ります。これが秘密鍵です。出力のコピーは、/etc/wireguard/private.keyにも保存されています。出力された秘密鍵を注意深くメモしておいてください。なぜなら、後のセクションでWireGuardピアの設定ファイルに追加する必要があるからです。

次に、次のコマンドを使用して公開鍵ファイルを作成してください。 (Tsugi ni, tsugi no komando o shiyou shite koukai yubi-file o sakusei shite kudasai.)

  1. sudo cat /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.key

 

再び、ベース64でエンコードされた出力の単一行が提供されます。これはあなたのWireGuard相手先の公開鍵です。暗号化された接続を確立するためにWireGuardサーバーに公開鍵を配布する必要があるので、参照のためにどこかにコピーしてください。

WireGuardピアの設定ファイルを作成する。

鍵ペアを作成したので、WireGuardサーバーへの接続を確立するために必要なすべての情報を含むピアの設定ファイルを作成できます。

設定ファイルには、いくつかの情報が必要です。

  • The base64 encoded private key that you generated on the peer.
  • The IPv4 and IPv6 address ranges that you defined on the WireGuard Server.
  • The base64 encoded public key from the WireGuard Server.
  • The public IP address and port number of the WireGuard Server. Usually this will be the IPv4 address, but if your server has an IPv6 address and your client machine has an IPv6 connection to the internet you can use this instead of IPv4.

これらのすべての情報を手に入れたら、WireGuardピアマシンでnanoまたはお好みのエディタを使用して新しい/etc/wireguard/wg0.confファイルを開いてください。

  1. sudo nano /etc/wireguard/wg0.conf

 

必要なデータを必要な箇所に代入して、以下の行をファイルに追加してください。

/etc/wireguard/wg0.conf

[Interface] PrivateKey = base64_encoded_peer_private_key_goes_here Address = 10.8.0.**2**/24 Address = fd24:609a:6c18::**2**/64 [Peer] PublicKey = U9uE2kb/nrrzsEU58GD3pKFU3TLYDMCbetIsnV8eeFE= AllowedIPs = 10.8.0.0/24, fd24:609a:6c18::/64 Endpoint = 203.0.113.1:51820

最初のアドレス行が、前に選択した10.8.0.0/24サブネットからのIPv4アドレスを使用していることに注目してください。このIPアドレスは、サーバーのIPと異なる限り、サブネット内の何でも構いません。ピアを追加するたびにアドレスを1ずつ増やすことは、一般的にIPアドレスを割り当てる最も簡単な方法です。

同様に、先に生成したサブネットのIPv6アドレスを使用した2番目のアドレス行があり、サーバーのアドレスが1つ増えています。異なるアドレスを使用する場合でも、範囲内のどのIPアドレスでも有効です。

ファイルのもう一つ注目すべき部分は、最後のAllowedIPs行です。このIPv4とIPv6の範囲は、宛先システムのIPアドレスがどちらかの範囲にある場合にのみ、ピアがVPNを介してトラフィックを送信するよう指示します。AllowedIPsディレクティブを使用することで、ピア上のVPNを他のピアやVPN上のサービスに接続するように制限したり、設定を調整してVPNを介してすべてのトラフィックをトンネル化し、WireGuardサーバーをゲートウェイとして使用することができます。

もしIPv4だけを使用している場合は、末尾のfd24:609a:6c18::/64の範囲(カンマも含む)を省略してください。逆に、IPv6だけを使用している場合は、fd24:609a:6c18::/64の接頭辞だけを含め、10.8.0.0/24のIPv4の範囲は省いてください。

どちらの場合でも、すべてのピアのトラフィックをVPNを介して送信し、WireGuardサーバーをすべてのトラフィックのゲートウェイとして使用したい場合は、IPv4アドレス空間全体を表す0.0.0.0/0、およびIPv6アドレス空間全体を表す::/0を使用することができます。

(任意) ピアを設定し、トンネル上のすべてのトラフィックルーティングを行う

もし、ピアのすべてのトラフィックをトンネル経由で0.0.0.0/0または::/0のルートを使用してルーティングすることを選択した場合、ピアがリモートシステムである場合は、このセクションの手順を完了する必要があります。ピアがローカルシステムである場合は、このセクションをスキップするのが最善です。

SSHや他のプロトコルを使用して公開IPアドレス経由でアクセスするリモートピアには、ピアのwg0.confファイルにいくつかの追加ルールを追加する必要があります。これらのルールにより、トンネルが接続されているときにもトンネルの外部からピアシステムに接続できるようになります。そうしないと、トンネルが確立されると、通常は公開ネットワークインターフェースで処理されるすべてのトラフィックがwg0トンネルインターフェースを迂回するように正しくルーティングされないため、リモートシステムにアクセスできなくなります。

まず、ピアシステムがデフォルトゲートウェイとして使用するIPアドレスを特定する必要があります。次の ip route コマンドを実行してください。

  1. ip route list table main default

 

以下のような出力を受け取ります。

Output

default via 203.0.113.1 dev eth0 proto static

後で使用するために、ゲートウェイのハイライトされたIPアドレス203.0.113.1とデバイスeth0に注意してください。お使いのデバイス名が異なる場合は、次のコマンドでそれに置き換えてください。

次に、ipアドレス表示コマンドを使用して、ピアシステムのパブリックIPをデバイスから調べます。

  1. ip -brief address show eth0

 

以下のような出力を受け取ります。

Output

eth0 UP 203.0.113.5/20 10.20.30.40/16 2604:a880:400:d1::3d3:6001/64 fe80::68d5:beff:feff:974c/64

この例の出力では、強調された203.0.113.5 IPアドレス(/20の後ろの部分を除く)は、eth0デバイスに割り当てられたパブリックアドレスであり、WireGuardのピア設定に追加する必要があるアドレスです。

今、WireGuardのピアの/etc/wireguard/wg0.confファイルをnanoやお好みのエディタで開いてください。

  1. sudo nano /etc/wireguard/wg0.conf

 

[Peer] 行の前に、次の4行を追加してください。

PostUp = ip rule add table 200 from 203.0.113.5
PostUp = ip route add table 200 default via 203.0.113.1
PreDown = ip rule delete table 200 from 203.0.113.5
PreDown = ip route delete table 200 default via 203.0.113.1

[Peer]
. . .

これらの行は、カスタムのルーティングルールを作成し、ピアシステムへのパブリックトラフィックがデフォルトゲートウェイを使用するようにカスタムルートを追加します。

  • PostUp = ip rule add table 200 from 203.0.113.5 – This command creates a rule that checks for any routing entries in the table numbered 200 when the IP matches the peer system’s public 203.0.113.5 address.
  • PostUp = ip route add table 200 default via 203.0.113.1 – This command ensures that any traffic being processed by the 200 table will use the 203.0.113.1 gateway for routing, instead of the WireGuard interface.

トンネルがシャットダウンされると、PreDownの行はカスタムルールとルートを削除します。

Info

注意:これらのルールを構築する際に、テーブル番号200は任意です。2から252の値を使用することもできますし、/etc/iproute2/rt_tablesファイルにラベルを追加して名前で参照することもできます。
Linuxでのルーティングテーブルの動作について詳しくは、「Guide to IP Layer Network Administration with Linux」のルーティングテーブルセクションをご覧ください。

ピアのトラフィックをすべてVPN経由にルーティングしている場合は、ステップ4のWireGuardサーバーのネットワーク設定の正しいsysctlとiptablesルールを設定してください。また、ステップ5のWireGuardサーバーのファイアウォールの設定も確認してください。

(任意)WireGuardピアのDNSリゾルバの設定

もしWireGuardサーバをVPNゲートウェイとして使用し、すべてのピアのトラフィックをルーティングする場合、[Interface]セクションにDNSリゾルバーを指定する行を追加する必要があります。この設定を追加しないと、VPNによるDNSリクエストの保護が行われないか、インターネットサービスプロバイダ(ISP)や他の第三者に公開される可能性があります。

もしVPNネットワーク上のリソースにアクセスするためか、ピア・ツー・ピアの設定でWireGuardを使用しているのであれば、このセクションはスキップしても構いません。

自分のピアの設定にDNSリゾルバを追加するには、まず、WireGuardサーバーが使用しているDNSサーバーを特定します。以下のコマンドをWireGuardサーバーで実行し、例で示されたeth0以外のイーサネットデバイス名を代わりに入力してください。

  1. resolvectl dns eth0

 

以下のような出力を受け取る必要があります。

Output

Link 2 (eth0): 67.207.67.2 67.207.67.3 2001:4860:4860::8844 2001:4860:4860::8888

出力されるIPアドレスは、サーバーが使用しているDNSリゾルバです。必要に応じて、それらの中からいずれかまたはすべてを使用するか、IPv4またはIPv6のみを使用するかを選択できます。使用するリゾルバをメモしておいてください。

次に、選択したリゾルバーをWireGuardピアの設定ファイルに追加する必要があります。WireGuardピアに戻り、nanoまたはお好みのエディタを使用して/etc/wireguard/wg0.confファイルを開いてください。

  1. sudo nano /etc/wireguard/wg0.conf

 

「[Peer]」行の前に、以下を追加してください。

DNS = 67.207.67.2 2001:4860:4860::8844

[Peer]
. . .

再び、IPv4とIPv6に対する好みや要件に応じて、必要に応じてリストを編集できます。

Info

以下の手順でVPNに接続した後、DNSリクエストがVPN経由で送信されているかを、DNSリークテスト.comのようなサイトを使用して確認することができます。
また、resolvectl dnsコマンドを使用して、設定されたリゾルバを相手方が使用しているかも確認することができます。サーバー上で実行したようなコマンドです。VPNトンネルのために設定したDNSリゾルバが表示され、以下のような出力が得られるべきです:
OutputGlobal: 67.207.67.2 67.207.67.3
. . .

これらのDNSリゾルバ設定が完了したら、サーバにピアの公開鍵を追加し、ピアでWireGuardトンネルを開始する準備が整いました。

ステップ8 — WireGuardサーバーにピアの公開鍵を追加する

WireGuardサーバーにピアを接続する前に、ピアの公開鍵を追加することが重要です。この手順により、VPN経由で接続してトラフィックをルーティングできるようになります。この手順を完了しないと、WireGuardサーバーはピアがトンネル上でトラフィックを送受信することを許可しません。

「WireGuard Peer」のためのBase64エンコードされた公開鍵のコピーを取得するには、以下を実行してください。

  1. sudo cat /etc/wireguard/public.key

 

Output

PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg=

WireGuardサーバーにログインして、以下のコマンドを実行してください。

  1. sudo wg set wg0 peer PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= allowed-ips 10.8.0.2,fd24:609a:6c18::2

 

コマンドのallowed-ipsの部分は、IPv4およびIPv6アドレスのカンマ区切りリストを取ることに注意してください。ピアが自分自身に割り当てることができるIPアドレスを制限したい場合は、個別のIPを指定することも、例のように範囲を指定することもできます。また、2つのピアが同じallowed-ipsの設定を持つことはできません。

既存のピアの許可されたIPアドレスを更新したい場合は、同じコマンドを再実行してIPアドレスを変更することができます。複数のIPアドレスがサポートされています。例えば、追加したWireGuardピアに10.8.0.2とfd24:609a:6c18::2のIPアドレスに加えて10.8.0.100のIPを追加したい場合、以下のコマンドを実行します。

  1. sudo wg set wg0 peer PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= allowed-ips 10.8.0.2,10.8.0.100,fd24:609a:6c18::2

 

ピアを追加するコマンドを実行した後、サーバー上でwgコマンドを使用してトンネルの状態を確認してください。

  1. sudo wg

 

Output

interface: wg0 public key: U9uE2kb/nrrzsEU58GD3pKFU3TLYDMCbetIsnV8eeFE= private key: (hidden) listening port: 51820 peer: PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= allowed ips: 10.8.0.2/32, fd24:609a:6c18::/128

ワイヤーガードのピアラインに注目してください。ピアの公開鍵や、IPアドレスまたは許可された範囲について、自身に割り当てるIPを示しています。

サーバー上でピアの接続パラメータを定義したので、次のステップはピア上でトンネルを開始することです。

ステップ9 — WireGuardピアをトンネルに接続する

今、サーバーとピアの両方がIPv4、IPv6、パケット転送、およびDNS解決をサポートするように設定されているので、VPNトンネルにピアを接続する時が来ました。

特定の使用ケースでのみVPNをオンにしたい場合は、接続を手動で確立するためにwg-quickコマンドを使用します。サーバーと同様にトンネルの起動を自動化したい場合は、wq-quickコマンドの代わりに「ステップ6 – WireGuardサーバーの起動」セクションの手順に従ってください。

すべてのトラフィックをVPN経由でルーティングし、DNS転送を設定している場合、トンネルを開始する前にWireGuardのピアにresolvconfユーティリティをインストールする必要があります。次のコマンドを実行して、これを設定してください。

  1. sudo apt install resolvconf

 

トンネルを開始するために、WireGuard Peer上で次のコマンドを実行してください。

  1. sudo wg-quick up wg0

 

以下のような出力を受け取ることができます。

Output

[#] ip link add wg0 type wireguard [#] wg setconf wg0 /dev/fd/63 [#] ip -4 address add 10.8.0.2/24 dev wg0 [#] ip -6 address add fd24:609a:6c18::2/64 dev wg0 [#] ip link set mtu 1420 up dev wg0 [#] resolvconf -a tun.wg0 -m 0 -x

ハイライトされたIPv4およびIPv6アドレスを注意してください。

もしピアのAllowedIPsを0.0.0.0/0と::/0に設定するか、VPNで選択した範囲以外を使用する場合、出力は以下のようになります。

Output

[#] ip link add wg0 type wireguard [#] wg setconf wg0 /dev/fd/63 [#] ip -4 address add 10.8.0.2/24 dev wg0 [#] ip -6 address add fd24:609a:6c18::2/64 dev wg0 [#] ip link set mtu 1420 up dev wg0 [#] resolvconf -a tun.wg0 -m 0 -x [#] wg set wg0 fwmark 51820 [#] ip -6 route add ::/0 dev wg0 table 51820 [#] ip -6 rule add not fwmark 51820 table 51820 [#] ip -6 rule add table main suppress_prefixlength 0 [#] ip6tables-restore -n [#] ip -4 route add 0.0.0.0/0 dev wg0 table 51820 [#] ip -4 rule add not fwmark 51820 table 51820 [#] ip -4 rule add table main suppress_prefixlength 0 [#] sysctl -q net.ipv4.conf.all.src_valid_mark=1 [#] iptables-restore -n

In this example, the routes that the command added, which are highlighted, correspond to the AllowedIPs set in the peer configuration.

この例では、コマンドによって追加されたハイライトされたルートは、ピアの設定のAllowedIPsに対応しています。

wgコマンドを使用してピアのトンネルの状態を確認できます。

  1. sudo wg

 

Output

interface: wg0 public key: PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= private key: (hidden) listening port: 49338 fwmark: 0xca6c peer: U9uE2kb/nrrzsEU58GD3pKFU3TLYDMCbetIsnV8eeFE= endpoint: 203.0.113.1:51820 allowed ips: 10.8.0.0/24, fd24:609a:6c18::/64 latest handshake: 1 second ago transfer: 6.50 KiB received, 15.41 KiB sent

サーバー上でも再度状態を確認することができますし、同様の結果を受け取ることができます。

VPNの使用を確認するために、ip routeとip -6 routeのコマンドを使用して同僚のVPN利用を検証してください。もしVPNをインターネットトラフィックのゲートウェイとして使用している場合は、CloudFlareの1.1.1.1および2606:4700:4700::1111のDNSリゾルバに宛てたトラフィックに使用されるインタフェースを確認してください。

Note

もしVPNにアクセスするためにWireGuardを使用している場合は、有効なIPv4またはIPv6アドレス(ゲートウェイ自体)をこれらのコマンドに代わりに使用してください。例えば、10.8.0.1またはfd24:609a:6c18::1です。
  1. ip route get 1.1.1.1

 

Output

1.1.1.1 dev wg0 table 51820 src 10.8.0.2 uid 1000 cache

注意してください、wg0デバイスが使用されており、ピアに割り当てたIPv4アドレスは10.8.0.2です。同様に、IPv6を使用している場合は、以下を実行してください。

  1. ip -6 route get 2606:4700:4700::1111

 

Output

2606:4700:4700::1111 from :: dev wg0 table 51820 src fd24:609a:6c18::2 metric 1024 pref medium

再度、wg0インタフェースとピアに割り当てたIPv6アドレスfd24:609a:6c18::2に注意してください。

もし同僚がブラウザをインストールしている場合、ipleak.netとipv6-test.comを訪れることで、同僚がVPNを介して通信を行っているかどうかを確認することもできます。

ピアからVPNを切断する準備ができたら、wg-quickコマンドを使用して切断してください。

  1. sudo wg-quick down wg0

 

VPNトンネルがシャットダウンされていることを示す、以下のような出力が届きます。

Output

[#] ip link delete dev wg0 [#] resolvconf -d tun.wg0 -f

ピアのAllowedIPsを0.0.0.0/0および::/0に設定する(またはVPNで選択した範囲以外の範囲を使用する)と、出力は次のようになります。

Output

[#] ip rule delete table 200 from 203.0.113.5 [#] ip route delete table 200 default via 203.0.113.1 [#] ip -4 rule delete table 51820 [#] ip -4 rule delete table main suppress_prefixlength 0 [#] ip -6 rule delete table 51820 [#] ip -6 rule delete table main suppress_prefixlength 0 [#] ip link delete dev wg0 [#] resolvconf -d tun.wg0 -f [#] iptables-restore -n [#] ip6tables-restore -n

VPNの接続を再確立するには、再びピア上でwg-quick up wg0コマンドを実行してください。WireGuardサーバーからピアの設定を完全に削除したい場合は、削除したいピアの正しい公開キーを使用して、以下のコマンドを実行してください。

  1. sudo wg set wg0 peer PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= remove

 

通常、ピアの設定を削除する必要は、そのピアが存在しなくなった場合や、暗号化キーが危険にさらされたり変更されたりした場合に限られます。それ以外の場合は、ピアがVPNに再接続する際に、キーと許可されたIPを毎回追加する必要がないように、設定をそのままにしておく方が良いです。

結論

このチュートリアルでは、あなたはサーバーとクライアントのDebian 11システムの両方にWireGuardパッケージとツールをインストールしました。WireGuardのためにファイアウォールルールを設定し、サーバーでsysctlコマンドを使用してパケット転送を許可するためのカーネル設定を構成しました。また、WireGuardの秘密鍵と公開鍵を生成する方法や、サーバーとピア(またはピア)を互いに接続するための設定方法も学びました。

もしネットワークがIPv6を使用している場合、ピア接続に使用する固有のローカルアドレス範囲の生成方法も学びました。さらに、ピアが使用できるネットワークプレフィックスを制限することで、どのトラフィックがVPNを通過するかを制限する方法や、すべてのピアのインターネットトラフィックを処理するVPNゲートウェイとしてWireGuardサーバーを使用する方法も学びました。

WireGuardについてより詳しく学びたい場合は、より高度なトンネルを設定する方法やコンテナと一緒にWireGuardを使用する方法などについては、公式のWireGuardドキュメンテーションを参照してください。

コメントを残す 0

Your email address will not be published. Required fields are marked *