Ubuntu22.04でWireGuardを設定する方法
序章
WireGuard は、IPv4およびIPv6接続をサポートする軽量の仮想プライベートネットワーク(VPN)です。 VPNを使用すると、信頼できないネットワークをプライベートネットワーク上にいるかのようにトラバースできます。 ホテルやコーヒーショップのWiFiなど、信頼できないネットワークに接続している場合は、スマートフォンやラップトップからインターネットに安全かつ確実にアクセスできます。
WireGuardの暗号化は、ピアが相互に暗号化されたトンネルを確立するための公開鍵と秘密鍵に依存しています。 WireGuardの各バージョンは、特定の暗号化暗号スイートを使用して、シンプルさ、セキュリティ、およびピアとの互換性を確保します。
対照的に、OpenVPNやIPSecなどの他のVPNソフトウェアは、トランスポート層セキュリティ(TLS)と証明書を使用して、システム間の暗号化されたトンネルを認証および確立します。 TLSのさまざまなバージョンには、何百ものさまざまな暗号化スイートとアルゴリズムのサポートが含まれています。これにより、さまざまなクライアントをサポートするための優れた柔軟性が得られますが、TLSを使用するVPNの構成は、より時間がかかり、複雑で、エラーが発生しやすくなります。
このチュートリアルでは、Ubuntu 22.04サーバーでWireGuardをセットアップし、IPv4接続とIPv6接続の両方を使用してピアとして接続するように別のマシンを構成します(一般にデュアルスタック接続と呼ばれます)。 また、暗号化されたピアツーピアトンネルにVPNを使用することに加えて、ゲートウェイ構成でWireGuardサーバーを介してピアのインターネットトラフィックをルーティングする方法についても学習します。
このチュートリアルでは、別のUbuntu 22.04システムをWireGuardサーバーのピア(クライアントとも呼ばれる)として構成します。 このシリーズの後続のチュートリアルでは、Windows、macOS、Android、およびiOSのシステムとデバイスにWireGuardをインストールして実行する方法について説明します。
注: DigitalOcean DropletにWireGuardをセットアップする場合は、多くのホスティングプロバイダーと同様に、帯域幅の超過に対して課金されることに注意してください。 このため、サーバーが処理しているトラフィックの量に注意してください。 詳細については、このページを参照してください。
前提条件
このチュートリアルに従うには、次のものが必要です。
- sudo非rootユーザーとファイアウォールが有効になっている1台のUbuntu22.04サーバー。 これを設定するには、 Ubuntu22.04を使用したサーバーの初期設定チュートリアルに従うことができます。 このガイドでは、これを WireGuardServerと呼びます。
- WireGuardサーバーへの接続に使用するクライアントマシンが必要です。 このチュートリアルでは、このマシンを WireGuardPeerと呼びます。 このチュートリアルでは、ローカルマシンをWireGuard Peerとして使用することをお勧めしますが、必要に応じて、リモートサーバーまたは携帯電話をクライアントとして使用できます。 リモートシステムを使用している場合は、このチュートリアルの後半にあるすべてのオプションのセクションに必ず従ってください。そうしないと、システムからロックアウトされる可能性があります。
- WireGuardをIPv6で使用するには、サーバーがそのタイプのトラフィックをサポートするように構成されていることも確認する必要があります。 WireGuardでIPv6サポートを有効にし、DigitalOceanドロップレットを使用している場合は、このドキュメントページドロップレットでIPv6を有効にする方法を参照してください。 ドロップレットを作成するとき、または後でそのページの手順を使用して、IPv6サポートを追加できます。
ステップ1—WireGuardのインストールとキーペアの生成
このチュートリアルの最初のステップは、サーバーにWireGuardをインストールすることです。 まず、WireGuard Serverのパッケージインデックスを更新し、次のコマンドを使用してWireGuardをインストールします。 初めて使用する場合は、sudoユーザーのパスワードの入力を求められる場合があります sudo
このセッションでは:
- sudo apt update
- sudo apt install wireguard
WireGuardがインストールされたので、次のステップはサーバーの秘密鍵と公開鍵のペアを生成することです。 ビルトインを使用します wg genkey
と wg pubkey
コマンドを使用してキーを作成し、秘密キーをWireGuardの構成ファイルに追加します。
また、を使用して作成したキーの権限を変更する必要があります。 chmod
デフォルトでは、ファイルはサーバー上のすべてのユーザーが読み取ることができるため、コマンド。
WireGuardの秘密鍵を作成し、次のコマンドを使用してそのアクセス許可を変更します。
- wg genkey | sudo tee /etc/wireguard/private.key
- sudo chmod go= /etc/wireguard/private.key
The sudo chmod go=...
コマンドは、rootユーザー以外のユーザーおよびグループのファイルに対するすべてのアクセス許可を削除して、rootユーザーのみが秘密鍵にアクセスできるようにします。
あなたは一行を受け取るはずです base64
秘密鍵であるエンコードされた出力。 出力のコピーもに保存されます /etc/wireguard/private.key
による将来の参照のためのファイル tee
コマンドの一部。 このセクションの後半でWireGuardの構成ファイルに追加する必要があるため、出力される秘密鍵を注意深くメモしてください。
次のステップは、秘密鍵から派生した対応する公開鍵を作成することです。 次のコマンドを使用して、公開鍵ファイルを作成します。
- sudo cat /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.key
このコマンドは、3つの個別のコマンドで構成されています。 |
(パイプ)演算子:
sudo cat /etc/wireguard/private.key
:このコマンドは秘密鍵ファイルを読み取り、それを標準出力ストリームに出力します。wg pubkey
:2番目のコマンドは、最初のコマンドからの出力を標準入力として受け取り、それを処理して公開鍵を生成します。sudo tee /etc/wireguard/public.key
:最後のコマンドは、公開鍵生成コマンドの出力を取得し、それをという名前のファイルにリダイレクトします/etc/wireguard/public.key
.
コマンドを実行すると、次の1行が再び表示されます。 base64
エンコードされた出力。これは、WireGuardサーバーの公開鍵です。 サーバーに接続するすべてのピアに公開鍵を配布する必要があるため、参照用にどこかにコピーしてください。
ステップ2—IPv4およびIPv6アドレスの選択
前のセクションでは、WireGuardをインストールし、サーバーとの間のトラフィックを暗号化するために使用されるキーペアを生成しました。 このセクションでは、サーバーの構成ファイルを作成し、サーバーの再起動時に自動的に起動するようにWireGuardを設定します。 また、WireGuardサーバーおよびピアで使用するプライベートIPv4およびIPv6アドレスを定義します。
IPv4アドレスとIPv6アドレスの両方を使用する場合は、これらのセクションの両方に従ってください。 それ以外の場合は、VPNのネットワークニーズに適したセクションの手順に従ってください。
ステップ2(a)—IPv4範囲の選択
WireGuardサーバーをIPv4ピアで使用している場合、サーバーには、クライアントとそのトンネルインターフェイスに使用する一連のプライベートIPv4アドレスが必要です。 次の予約済みアドレスブロックから任意の範囲のIPアドレスを選択できます(これらのブロックの割り当て方法について詳しく知りたい場合は、 RFC 1918仕様にアクセスしてください)。
10.0.0.0
に10.255.255.255
(10/8プレフィックス)172.16.0.0
に172.31.255.255
(172.16 / 12プレフィックス)192.168.0.0
に192.168.255.255
(192.168 / 16プレフィックス)
このチュートリアルでは、以下を使用します 10.8.0.0/24
予約済みIPの最初の範囲からのIPアドレスのブロックとして。 この範囲では、最大255の異なるピア接続が可能であり、通常、他のプライベートIP範囲と重複または競合するアドレスを持つべきではありません。 この例の範囲がネットワークと互換性がない場合は、ネットワーク構成で機能するアドレスの範囲を自由に選択してください。
WireGuard Serverは、その範囲の単一のIPアドレスをプライベートトンネルIPv4アドレスに使用します。 使用します 10.8.0.1/24
ここにありますが、 10.8.0.1
に 10.8.0.255
に使える。 とは異なるものを使用する場合は、選択したIPアドレスをメモしてください 10.8.0.1/24
. このIPv4アドレスを、ステップ3 —WireGuardサーバー構成の作成で定義した構成ファイルに追加します。
ステップ2(b)—IPv6範囲の選択
IPv6でWireGuardを使用している場合は、 RFC4193のアルゴリズムに基づいて一意のローカルIPv6ユニキャストアドレスプレフィックスを生成する必要があります。 WireGuardで使用するアドレスは、仮想トンネルインターフェースに関連付けられます。 予約済みの内にランダムで一意のIPv6プレフィックスを生成するには、いくつかの手順を完了する必要があります fd00::/8
プライベートIPv6アドレスのブロック。
RFCによると、一意のIPv6プレフィックスを取得するための推奨される方法は、時刻を、シリアル番号やデバイスIDなどのシステムからの一意の識別値と組み合わせることです。 次に、これらの値はハッシュされて切り捨てられ、予約されたプライベート内で一意のアドレスとして使用できるビットのセットになります。 fd00::/8
IPのブロック。
WireGuardサーバーのIPv6範囲の生成を開始するには、を使用して64ビットのタイムスタンプを収集します。 date
次のコマンドを使用したユーティリティ:
- date +%s%N
次のような秒数を受け取ります( %s
の中に date
コマンド)、およびナノ秒( %N
)1970-01-01 00:00:00 UTCを組み合わせてから:
Output1650301699497770167
このセクションの後半で使用するために、値をどこかに記録します。 次に、 machine-id
からのサーバーの値 /var/lib/dbus/machine-id
ファイル。 この識別子はシステムに固有であり、サーバーが存在する限り変更しないでください。
- cat /var/lib/dbus/machine-id
次のような出力が表示されます。
/var/lib/dbus/machine-id610cef4946ed46da8f71dba9d66c67fb
次に、タイムスタンプを machine-id
そして、SHA-1アルゴリズムを使用して結果の値をハッシュします。 コマンドは次の形式を使用します。
printf <timestamp><machine-id> | sha1sum
タイムスタンプとマシンIDの値を代入してコマンドを実行します。
- printf 1650301699497770167610cef4946ed46da8f71dba9d66c67fb | sha1sum
次のようなハッシュ値を受け取ります。
Output442adea1488d96388dae9ab816045b24609a6c18 -
の出力に注意してください sha1sum
コマンドは16進数であるため、出力では2文字を使用して1バイトのデータを表します。 例えば 4f
と 26
例の出力では、ハッシュされたデータの最初の2バイトです。
RFCのアルゴリズムは、ハッシュされた出力の最下位(末尾)の40ビットまたは5バイトのみを必要とします。 使用 cut
ハッシュから最後の5つの16進エンコードされたバイトを出力するコマンド:
- printf 442adea1488d96388dae9ab816045b24609a6c18 | cut -c 31-
The -c
引数は cut
指定された文字のセットのみを選択するコマンド。 The 31-
引数は言う cut
31桁目から入力行の終わりまでのすべての文字を印刷します。
次のような出力を受け取るはずです。
Output24609a6c18
この出力例では、バイトのセットは次のとおりです。 24 60 9a 6c 18
.
これで、生成した5バイトを追加することで、独自のIPv6ネットワークプレフィックスを構築できます。 fd
プレフィックス、すべての2バイトを :
読みやすさのためのコロン。 一意のプレフィックス内の各サブネットは合計18,446,744,073,709,551,616の可能なIPv6アドレスを保持できるため、サブネットを次の標準サイズに制限できます。 /64
簡単にするために。
以前に生成されたバイトを使用して /64
サブネットサイズの結果のプレフィックスは次のようになります。
Unique Local IPv6 Address Prefixfd24:609a:6c18::/64
これ fd24:609a:6c18::/64
rangeは、サーバーとピアのWireGuardトンネルインターフェースに個々のIPアドレスを割り当てるために使用するものです。 サーバーにIPを割り当てるには、 1
決勝後 ::
文字。 結果のアドレスは次のようになります fd24:609a:6c18::1/64
. ピアは範囲内の任意のIPを使用できますが、通常、ピアを追加するたびに値が1ずつ増加します。 fd24:609a:6c18::2/64
. IPをメモし、このチュートリアルの次のセクションでWireGuardサーバーの構成に進みます。
ステップ3—WireGuardサーバー構成の作成
WireGuard Serverの構成を作成する前に、次の情報が必要になります。
-
ステップ1—WireGuardのインストールとキーペアの生成から秘密鍵を使用できることを確認してください。
-
IPv4でWireGuardを使用している場合は、ステップ2(a)— IPv4範囲の選択でサーバーに選択したIPアドレスが必要になります。この例では、
10.8.0.1/24
. -
IPv6でWireGuardを使用している場合は、ステップ2(b)—IPv6範囲の選択で生成したサーバーのIPアドレスが必要になります。 この例では、IPは
fd24:609a:6c18::1/64
.
必要な秘密鍵とIPアドレスを取得したら、を使用して新しい構成ファイルを作成します。 nano
または、次のコマンドを実行して、好みのエディターを実行します。
- sudo nano /etc/wireguard/wg0.conf
強調表示された代わりに秘密鍵を使用して、ファイルに次の行を追加します base64_encoded_private_key_goes_here
値、および上のIPアドレス Address
ライン。 を変更することもできます ListenPort
WireGuardを別のポートで使用できるようにする場合は、次のように入力します。
/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
The SaveConfig
lineは、WireGuardインターフェースがシャットダウンされたときに、変更が構成ファイルに保存されることを保証します。
保存して閉じます /etc/wireguard/wg0.conf
ファイル。 使用している場合 nano
、あなたはそうすることができます CTRL+X
、 それから Y
と ENTER
確認するために。 これで、WireGuardVPNサーバーの使用方法に応じて構築できる初期サーバー構成ができました。
ステップ4—WireGuardサーバーのネットワーク構成を調整する
サーバーのみのサービスにアクセスするためにWireGuardを使用してピアをWireGuardサーバーに接続している場合は、このセクションを完了する必要はありません。 WireGuard PeerのインターネットトラフィックをWireGuardサーバー経由でルーティングする場合は、チュートリアルのこのセクションに従ってIP転送を構成する必要があります。
転送を構成するには、 /etc/sysctl.conf
を使用してファイル nano
またはお好みの編集者:
- sudo nano /etc/sysctl.conf
WireGuardでIPv4を使用している場合は、ファイルの最後に次の行を追加します。
net.ipv4.ip_forward=1
WireGuardでIPv6を使用している場合は、ファイルの最後に次の行を追加します。
net.ipv6.conf.all.forwarding=1
IPv4とIPv6の両方を使用している場合は、両方の回線が含まれていることを確認してください。 終了したら、ファイルを保存して閉じます。
ファイルを読み取り、現在のターミナルセッションの新しい値をロードするには、次のコマンドを実行します。
- sudo sysctl -p
Outputnet.ipv6.conf.all.forwarding = 1
net.ipv4.ip_forward = 1
これで、WireGuard Serverは、仮想VPNイーサネットデバイスからサーバー上の他のデバイスに、そしてそこからパブリックインターネットに着信トラフィックを転送できるようになります。 この構成を使用すると、WireGuard PeerからサーバーのIPアドレスを介してすべてのWebトラフィックをルーティングでき、クライアントのパブリックIPアドレスが効果的に非表示になります。
ただし、トラフィックをサーバー経由で正しくルーティングする前に、いくつかのファイアウォールルールを構成する必要があります。 これらのルールにより、WireGuardサーバーとピアとの間のトラフィックが適切に流れるようになります。
ステップ5—WireGuardサーバーのファイアウォールを構成する
このセクションでは、WireGuard Serverの構成を編集して、サーバーとクライアントとの間のトラフィックが正しくルーティングされるようにするファイアウォールルールを追加します。 前のセクションと同様に、VPNに制限されているリソースにアクセスするためのマシン間接続にWireGuard VPNのみを使用している場合は、この手順をスキップしてください。
WireGuard VPNトラフィックがサーバーのファイアウォールを通過できるようにするには、マスカレードを有効にする必要があります。これは、クライアント接続を正しくルーティングするためのオンザフライ動的ネットワークアドレス変換(NAT)を提供するiptablesの概念です。
まず、次を使用してWireGuardサーバーのパブリックネットワークインターフェイスを見つけます ip route
サブコマンド:
- ip route list default
パブリックインターフェイスは、このコマンドの出力内にある「dev」という単語に続く文字列です。 たとえば、この結果は次の名前のインターフェイスを示しています eth0
、以下で強調表示されています:
Outputdefault via 203.0.113.1 dev eth0 proto static
デバイスをに追加するので、デバイスの名前をメモしてください iptables
次のステップのルール。
WireGuardサーバーにファイアウォールルールを追加するには、 /etc/wireguard/wg0.conf
とファイル nano
またはお好みのエディターをもう一度。
- 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
The PostUp
WireGuardサーバーが仮想VPNトンネルを開始すると回線が実行されます。 この例では、3つ追加されます ufw
と iptables
ルール:
ufw route allow in on wg0 out on eth0
-このルールは、入ってきたIPv4およびIPv6トラフィックの転送を許可します。wg0
へのVPNインターフェースeth0
サーバー上のネットワークインターフェイス。 それはと連携して動作しますnet.ipv4.ip_forward
とnet.ipv6.conf.all.forwarding
前のセクションで構成したsysctl値。iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
-このルールはマスカレードを設定し、着信するIPv4トラフィックを書き換えます。wg0
WireGuardサーバーのパブリックIPv4アドレスから直接発信されているように見せるためのVPNインターフェース。ip6tables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
-このルールはマスカレードを設定し、着信するIPv6トラフィックを書き換えます。wg0
WireGuardサーバーのパブリックIPv6アドレスから直接発信されているように見せるためのVPNインターフェース。
The PreDown
ルールは、WireGuardサーバーが仮想VPNトンネルを停止したときに実行されます。 これらのルールは、 PostUp
ルール、およびVPNが停止したときにVPNインターフェイスの転送およびマスカレードルールを元に戻す機能。
どちらの場合も、VPNに適したIPv4およびIPv6ルールを含めるか除外するように構成を編集します。 たとえば、IPv4のみを使用している場合は、次のような行を除外できます。 ip6tables
コマンド。
逆に、IPv6のみを使用している場合は、構成を編集して、 ip6tables
コマンド。 The ufw
IPv4ネットワークとIPv6ネットワークの任意の組み合わせに対して回線が存在する必要があります。 終了したら、ファイルを保存して閉じます。
WireGuardサーバーでファイアウォールを構成する最後の部分は、WireGuardUDPポート自体との間のトラフィックを許可することです。 サーバーのポートを変更しなかった場合 /etc/wireguard/wg0.conf
ファイルの場合、開くポートは 51820
. 設定を編集するときに別のポートを選択した場合は、必ず次のUFWコマンドでそのポートに置き換えてください。
前提条件のチュートリアルに従うときにSSHポートを開くのを忘れた場合は、ここにも追加してください。
- sudo ufw allow 51820/udp
- sudo ufw allow OpenSSH
注:別のファイアウォールを使用している場合、またはUFW構成をカスタマイズしている場合は、ファイアウォールルールを追加する必要がある場合があります。 たとえば、VPN接続を介してすべてのネットワークトラフィックをトンネリングする場合は、そのポートを確認する必要があります 53
DNSリクエスト、および次のようなポートのトラフィックが許可されます 80
と 443
それぞれHTTPおよびHTTPSトラフィック用。 VPNを介して使用している他のプロトコルがある場合は、それらのルールも追加する必要があります。
これらのルールを追加した後、UFWを無効にしてから再度有効にして再起動し、変更したすべてのファイルから変更をロードします。
- sudo ufw disable
- sudo ufw enable
ルールが設定されていることを確認するには、 ufw status
指図。 それを実行すると、次のような出力を受け取るはずです。
- sudo ufw status
OutputStatus: 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は、として実行するように構成できます systemd
ビルトインを使用したサービス wg-quick
脚本。 手動で使用することもできますが wg
VPNを使用するたびにトンネルを作成するコマンド。これは手動のプロセスであり、繰り返してエラーが発生しやすくなります。 代わりに、 systemctl
の助けを借りてトンネルを管理する wg-quick
脚本。
を使って systemd
サービスとは、サーバーが実行されている限りいつでもVPNに接続できるように、起動時に起動するようにWireGuardを構成できることを意味します。 これを行うには、を有効にします wg-quick
のためのサービス wg0
追加して定義したトンネル systemctl
:
- sudo systemctl enable [email protected]
コマンドがトンネルの名前を指定していることに注意してください wg0
サービス名の一部としてのデバイス名。 この名前はにマップされます /etc/wireguard/wg0.conf
構成ファイル。 この命名方法は、サーバーを使用して必要な数の個別のVPNトンネルを作成できることを意味します。
たとえば、トンネルデバイスと名前を prod
そしてその設定ファイルは /etc/wireguard/prod.conf
. 各トンネル構成には、異なるIPv4、IPv6、およびクライアントファイアウォール設定を含めることができます。 このようにして、それぞれが独自のIPアドレスとルーティングルールを持つ複数の異なるピア接続をサポートできます。
次に、サービスを開始します。
- sudo systemctl start [email protected]
次のコマンドを使用して、WireGuardサービスがアクティブであることを再確認します。 君は見るべきだ active (running)
出力:
- sudo systemctl status [email protected]
Output● [email protected] - WireGuard via wg-quick(8) for wg0
Loaded: loaded (/lib/systemd/system/[email protected]; 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.
出力は ip
仮想を作成するために使用されるコマンド wg0
デバイスに、構成ファイルに追加したIPv4アドレスとIPv6アドレスを割り当てます。 これらのルールを使用して、トンネルのトラブルシューティングを行うか、 wg
VPNインターフェースを手動で構成したい場合は、コマンド自体。
サーバーを構成して実行したら、次のステップは、クライアントマシンをWireGuard Peerとして構成し、WireGuardサーバーに接続することです。
ステップ7—WireGuardピアの設定
WireGuardピアの設定は、WireGuardサーバーの設定に似ています。 クライアントソフトウェアをインストールしたら、公開鍵と秘密鍵のペアを生成し、ピアの1つまたは複数のIPアドレスを決定し、ピアの構成ファイルを定義してから、 wg-quick
脚本。
次の手順を使用してキーペアと構成を生成することにより、VPNに必要な数のピアを追加できます。 VPNに複数のピアを追加する場合は、衝突を防ぐために、必ずプライベートIPアドレスを追跡してください。
WireGuard Peerを構成するには、以下を使用してWireGuardパッケージがインストールされていることを確認してください apt
コマンド。 WireGuardピアの実行で:
- sudo apt update
- sudo apt install wireguard
WireGuardピアのキーペアの作成
次に、サーバーで使用したのと同じ手順を使用して、ピアでキーペアを生成する必要があります。 ピアとして機能するローカルマシンまたはリモートサーバーから、次のコマンドを使用して続行し、ピアの秘密鍵を作成します。
- wg genkey | sudo tee /etc/wireguard/private.key
- sudo chmod go= /etc/wireguard/private.key
再びあなたは一行を受け取ります base64
秘密鍵であるエンコードされた出力。 出力のコピーもに保存されます /etc/wireguard/private.key
. このセクションの後半でWireGuardの構成ファイルに追加する必要があるため、出力される秘密鍵を注意深くメモしてください。
次に、次のコマンドを使用して公開鍵ファイルを作成します。
- sudo cat /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.key
あなたは再び一行を受け取ります base64
エンコードされた出力。これは、WireGuardPeerの公開鍵です。 暗号化された接続を確立するには、公開鍵をWireGuardサーバーに配布する必要があるため、参照用にどこかにコピーしてください。
WireGuardピアの構成ファイルの作成
キーペアができたので、WireGuardServerへの接続を確立するために必要なすべての情報を含むピアの構成ファイルを作成できます。
構成ファイルには、次のいくつかの情報が必要です。
-
The
base64
ピアで生成したエンコードされた秘密鍵。 -
WireGuardサーバーで定義したIPv4およびIPv6アドレス範囲。
-
The
base64
WireGuardサーバーからのエンコードされた公開鍵。 -
WireGuardサーバーのパブリックIPアドレスとポート番号。 通常、これはIPv4アドレスになりますが、サーバーにIPv6アドレスがあり、クライアントマシンにインターネットへのIPv6接続がある場合は、IPv4の代わりにこれを使用できます。
このすべての情報が手元にあるので、新しいを開きます /etc/wireguard/wg0.conf
を使用してWireGuardPeerマシン上のファイル nano
またはお好みの編集者:
- 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
最初の方法に注意してください Address
行はからのIPv4アドレスを使用します 10.8.0.0/24
以前に選択したサブネット。 このIPアドレスは、サーバーのIPと異なる限り、サブネット内の任意のアドレスにすることができます。 ピアを追加するたびにアドレスを1ずつ増やすのが、一般的にIPを割り当てる最も簡単な方法です。
同様に、2番目の方法に注意してください Address
lineは、前に生成したサブネットのIPv6アドレスを使用し、サーバーのアドレスを1つ増やします。 繰り返しますが、別のアドレスを使用する場合は、範囲内のすべてのIPが有効です。
ファイルの他の注目すべき部分は最後です AllowedIPs
ライン。 これらの2つの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 Serverをすべてのトラフィックのゲートウェイとして使用する場合は、次を使用できます。 0.0.0.0/0
、IPv4アドレス空間全体を表し、および ::/0
IPv6アドレス空間全体に対して。
(オプション)すべてのトラフィックをトンネル経由でルーティングするようにピアを設定する
を使用して、ピアのすべてのトラフィックをトンネル経由でルーティングすることを選択した場合 0.0.0.0/0
また ::/0
ルートとピアがリモートシステムである場合は、このセクションの手順を完了する必要があります。 ピアがローカルシステムの場合は、このセクションをスキップすることをお勧めします。
SSHまたはパブリックIPアドレスを使用するその他のプロトコルを介してアクセスするリモートピアの場合、ピアにいくつかのルールを追加する必要があります。 wg0.conf
ファイル。 これらのルールにより、接続時にトンネルの外部からシステムに接続できるようになります。 そうしないと、トンネルが確立されたときに、パブリックネットワークインターフェイスで通常処理されるすべてのトラフィックが正しくルーティングされて、 wg0
アクセスできないリモートシステムにつながるトンネルインターフェース。
まず、システムがデフォルトゲートウェイとして使用するIPアドレスを決定する必要があります。 次を実行します ip route
指図:
- ip route list table main default
次のような出力が表示されます。
Outputdefault via 203.0.113.1 dev eth0 proto static
ゲートウェイの強調表示されたIPアドレスに注意してください 203.0.113.1
後で使用するため、およびデバイス eth0
. デバイス名が異なる場合があります。 その場合は、代わりにそれを使用してください eth0
次のコマンドで。
次に、デバイスを調べて、システムのパブリックIPを見つけます。 ip address show
指図:
- ip -brief address show eth0
次のような出力が表示されます。
Outputeth0 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構成に追加する必要があるデバイス。
次に、WireGuardPeerを開きます /etc/wireguard/wg0.conf
とファイル nano
またはお好みのエディター。
- 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
-このコマンドは、番号が付けられたテーブル内のルーティングエントリをチェックするルールを作成します200
IPがシステムのパブリックと一致する場合203.0.113.5
住所。PostUp = ip route add table 200 default via 203.0.113.1
-このコマンドは、によって処理されているすべてのトラフィックを保証します200
テーブルはを使用します203.0.113.1
WireGuardインターフェースの代わりに、ルーティング用のゲートウェイ。
The PreDown
行は、トンネルがシャットダウンされたときにカスタムルールとルートを削除します。
注:テーブル番号 200
これらのルールを作成するときは任意です。 2〜252の値を使用するか、ラベルを追加してカスタム名を使用できます。 /etc/iproute2/rt_tables
ファイルを作成し、数値の代わりに名前を参照します。
Linuxでのルーティングテーブルの動作の詳細については、LinuxでのIPレイヤーネットワーク管理ガイドのルーティングテーブルセクションを参照してください。
VPNを介してすべてのピアのトラフィックをルーティングしている場合は、正しい設定が行われていることを確認してください sysctl
と iptables
ステップ4—WireGuardサーバーのネットワーク構成の調整およびステップ5—WireGuardサーバーのファイアウォールの構成のWireGuardサーバーに関するルール。
(オプション)WireGuardPeerのDNSリゾルバーの構成
すべてのピアのトラフィックのVPNゲートウェイとしてWireGuardServerを使用している場合は、に回線を追加する必要があります。 [Interface]
DNSリゾルバーを指定するセクション。 この設定を追加しないと、DNS要求がVPNによって保護されないか、インターネットサービスプロバイダーまたは他のサードパーティに公開される可能性があります。
WireGuardを使用してVPNネットワークまたはピアツーピア構成のリソースにアクセスするだけの場合は、このセクションをスキップできます。
ピアの構成にDNSリゾルバーを追加するには、最初にWireGuardサーバーが使用しているDNSサーバーを特定します。 WireGuard Server で次のコマンドを実行し、代わりにイーサネットデバイス名を使用します eth0
この例と異なる場合:
- resolvectl dns eth0
次のような出力を受け取るはずです。
OutputLink 2 (eth0): 67.207.67.2 67.207.67.3 2001:4860:4860::8844 2001:4860:4860::8888
出力されるIPアドレスは、サーバーが使用しているDNSリゾルバーです。 必要に応じて、それらのいずれかまたはすべてを使用するか、IPv4またはIPv6のみを使用するかを選択できます。 使用するリゾルバーをメモします。
次に、選択したリゾルバーをWireGuardPeerの構成ファイルに追加する必要があります。 WireGuard Peer に戻り、開きます /etc/wireguard/wg0.conf
を使用してファイル nano
またはお好みの編集者:
- sudo nano /etc/wireguard/wg0.conf
の前に [Peer]
行に、次を追加します。
DNS = 67.207.67.2 2001:4860:4860::8844
[Peer]
. . .
繰り返しになりますが、IPv4およびIPv6の好みや要件に応じて、必要に応じてリストを編集できます。
次の手順でVPNに接続したら、 DNS Leak test.com などのサイトを使用して、VPN経由でDNSクエリを送信していることを確認できます。
ピアが構成済みのリゾルバーを使用していることを確認することもできます。 resolvectl dns
サーバーで実行したようなコマンド。 VPNトンネル用に構成したDNSリゾルバーを示す次のような出力が表示されます。
OutputGlobal: 67.207.67.2 67.207.67.3
. . .
これらのDNSリゾルバー設定がすべて整ったら、ピアの公開鍵をサーバーに追加して、ピアでWireGuardトンネルを開始する準備が整います。
ステップ8—ピアの公開鍵をWireGuardサーバーに追加する
ピアをサーバーに接続する前に、ピアの公開鍵をWireGuardサーバーに追加することが重要です。 この手順により、VPNに接続してトラフィックをルーティングできるようになります。 この手順を完了しないと、WireGuardサーバーはピアがトンネルを介してトラフィックを送受信することを許可しません。
のコピーがあることを確認してください base64
次のコマンドを実行して、WireGuardPeerのエンコードされた公開鍵を実行します。
- sudo cat /etc/wireguard/public.key
OutputPeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg=
次に、WireGuardサーバーにログインし、次のコマンドを実行します。
- sudo wg set wg0 peer PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= allowed-ips 10.8.0.2,fd24:609a:6c18::2
に注意してください allowed-ips
コマンドの一部は、IPv4アドレスとIPv6アドレスのコンマ区切りのリストを取ります。 ピアが自分自身に割り当てることができるIPアドレスを制限する場合は、個々のIPを指定できます。または、ピアがVPN範囲内の任意のIPアドレスを使用できる場合は、例のように範囲を指定できます。 また、2つのピアが同じを持つことはできないことに注意してください allowed-ips
設定。
更新したい場合 allowed-ips
既存のピアの場合、同じコマンドを再度実行できますが、IPアドレスを変更します。 複数のIPアドレスがサポートされています。 たとえば、追加したばかりのWireGuard Peerを変更して、次のようなIPを追加します。 10.8.0.100
既存のものに 10.8.0.2
と fd24:609a:6c18::2
IPの場合、次を実行します。
- sudo wg set wg0 peer PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= allowed-ips 10.8.0.2,10.8.0.100,fd24:609a:6c18::2
コマンドを実行してピアを追加したら、サーバー上のトンネルのステータスを次のコマンドを使用して確認します。 wg
指図:
- sudo wg
Outputinterface: wg0
public key: U9uE2kb/nrrzsEU58GD3pKFU3TLYDMCbetIsnV8eeFE=
private key: (hidden)
listening port: 51820
peer: PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg=
allowed ips: 10.8.0.2/32, fd24:609a:6c18::/128
どのように peer
行には、WireGuard Peerの公開鍵、IPアドレス、またはIPを割り当てるために使用できるアドレスの範囲が表示されます。
サーバーでピアの接続パラメータを定義したので、次のステップはピアでトンネルを開始することです。
ステップ9—WireGuardピアをトンネルに接続する
サーバーとピアの両方が、IPv4、IPv6、パケット転送、およびDNS解決の選択をサポートするように構成されたので、ピアをVPNトンネルに接続します。
特定のユースケースでのみVPNをオンにしたい場合があるため、 wg-quick
手動で接続を確立するコマンド。 サーバーで行ったようにトンネルの開始を自動化する場合は、ステップ6 —WireGuardサーバーの開始セクションの手順に従ってください。 wq-quick
指図。
すべてのトラフィックをVPN経由でルーティングし、DNS転送を設定している場合は、 resolvconf
トンネルを開始する前に、WireGuardPeerのユーティリティ。 次のコマンドを実行して、これを設定します。
- sudo apt install resolvconf
トンネルを開始するには、WireGuardPeerで次を実行します。
- 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
この例では、コマンドが追加した強調表示されたルートに注目してください。これは、 AllowedIPs
ピア構成で。
を使用して、ピアのトンネルのステータスを確認できます。 wg
指図:
- sudo wg
Outputinterface: 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を使用している場合は、CloudFlare宛てのトラフィックに使用されるインターフェイスを確認してください。 1.1.1.1
と 2606:4700:4700::1111
DNSリゾルバー。
WireGuardを使用してVPN上のリソースにアクセスするだけの場合は、ゲートウェイ自体のような有効なIPv4またはIPv6アドレスをこれらのコマンドに置き換えてください。 例えば 10.8.0.1
また fd24:609a:6c18::1
.
- ip route get 1.1.1.1
Output1.1.1.1 dev wg0 table 51820 src 10.8.0.2 uid 1000
cache
に注意してください wg0
デバイスが使用され、IPv4アドレス 10.8.0.2
ピアに割り当てたもの。 同様に、IPv6を使用している場合は、次を実行します。
- ip -6 route get 2606:4700:4700::1111
Output2606: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
指図:
- 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サーバーからピアの構成を完全に削除する場合は、次のコマンドを実行できます。削除するピアの代わりに正しい公開鍵を使用してください。
- sudo wg set wg0 peer PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= remove
通常、ピアが存在しなくなった場合、またはその暗号化キーが危険にさらされたり変更されたりした場合にのみ、ピア構成を削除する必要があります。 それ以外の場合は、構成をそのままにして、ピアがキーを追加しなくてもVPNに再接続できるようにすることをお勧めします。 allowed-ips
毎回。
結論
このチュートリアルでは、サーバーとクライアントの両方のUbuntu22.04システムにWireGuardパッケージとツールをインストールしました。 WireGuardのファイアウォールルールを設定し、カーネル設定を構成して、 sysctl
サーバー上のコマンド。 秘密および公開のWireGuard暗号化キーを生成する方法と、サーバーとピア(または複数のピア)が相互に接続するように構成する方法を学習しました。
ネットワークでIPv6を使用している場合は、ピア接続で使用する一意のローカルアドレス範囲を生成する方法も学習しました。 最後に、ピアが使用できるネットワークプレフィックスを制限することにより、VPNを通過するトラフィックを制限する方法と、WireGuardServerをVPNゲートウェイとして使用してピアのすべてのインターネットトラフィックを処理する方法を学習しました。
より高度なトンネルを構成する方法や、コンテナでWireGuardを使用する方法など、WireGuardの詳細については、公式のWireGuardドキュメントにアクセスしてください。