Shadowrocket WireGuard設定ガイド:PrivateKey・PublicKey・Endpoint・MTUを解説

ShadowrocketでWireGuardを設定する際の各項目の意味や、Address・DNS・MTUの一般的な値を解説。プロバイダーの設定情報をアプリに入力する方法も紹介します。

この記事の概要

本記事では、利用中のプロバイダーからWireGuardの設定情報を入手済みの方を対象に、端末側と接続先の鍵の見分け方、設定ファイルの各項目とShadowrocketの入力欄の対応、Endpoint・DNS・MTUの順に確認する方法を説明します。まず元の設定を保存し、次に識別情報とアドレスを確認してから、通信に影響する項目を調整してください。鍵を何度も変更したり、例示用アドレスをそのまま入力して接続を試したりしないでください。

1. WireGuard設定における端末側と接続先

Shadowrocketでは、WireGuardは接続プロトコルであり、サブスクリプション形式や通信ルールではありません。本記事では、プロバイダーが提供するクライアント用設定を例に説明します。[Interface]には端末側のトンネルインターフェース、[Peer]には接続先のピアを記述します。まず設定ファイルがクライアント用であることを確認してから各項目を入力してください。サーバー用の設定をそのままクライアント用として使うことはできません。

サブスクリプションURLや個別設定は、利用中のプロバイダーから入手してください。すでにサブスクリプションを読み込み、WireGuardの項目が作成されている場合は、まずその設定を確認すれば十分です。同じ名前の項目を手動で作り直す必要はありません。サブスクリプションの更新で設定値が上書きされることがあります。変更をテストする場合は元の項目を残し、テスト用の複製とサブスクリプション管理対象の項目を区別してください。

2つのセクション
クライアント設定は通常、[Interface]と[Peer]に分かれる
UDP
WireGuardの外側の通信にはUDPを使用
51820
一般的なポートの例。必須の固定値ではありません

設定項目が正しいことと、通信が実際にその接続を通ることは別の問題です。Homeで選択している項目、Global Routingの設定、Config内で適用されるルールが通信経路に影響します。まず接続パラメーターを確認し、その後、通信が該当項目に割り当てられているかを調べてください。ルールによる直接接続をWireGuardの障害と誤認しないようにしましょう。

2. PrivateKey・PublicKey・PresharedKeyの対応関係

PrivateKeyは端末側の秘密鍵です。クライアント設定の[Peer]にあるPublicKeyは接続先を識別するために使います。この2つは異なる識別情報であり、置き換えることはできません。また、端末側のPrivateKeyから生成したPublicKeyを、接続先のPublicKey欄に入力しないでください。サーバー側には端末側のPrivateKeyに対応する公開鍵を登録する必要があります。双方の設定が一致して初めて接続できます。

端末側インターフェース:Interface

PrivateKey
クライアントの秘密鍵。全体をそのまま保持し、公開しないでください。
Address
クライアントに割り当てられたトンネルアドレス。接続先サーバーのアドレスではありません。
DNS
設定で指定されたDNSサーバーのアドレス。実際の名前解決経路も確認してください。
MTU
トンネルインターフェースのパケットサイズ。帯域幅や速度の上限ではありません。

これらは端末側の設定項目です。サーバー側のInterfaceセクションからそのまま転記しないでください。

接続先ピア:Peer

PublicKey
接続先の公開鍵。接続するサーバーの識別情報と一致している必要があります。
PresharedKey
任意の追加共有鍵。プロバイダーから提供され、有効化されている場合のみ入力します。
Endpoint
接続先のホスト名またはIPアドレスとUDPポート。クライアントはここに接続します。
AllowedIPs
WireGuardにおけるアドレスの選択範囲と照合範囲。ドメインごとの通信ルールとは異なります。

完全なWireGuard設定に含まれる項目が、編集画面に同じ名前で個別に表示されるとは限りません。

WireGuardの鍵はBase64でエンコードされた32バイト値で、一般的なテキスト表記は44文字です。末尾に=が付く場合があります。文字数が合っていても、鍵がサーバー側の設定と一致する証明にはなりません。コピー時は前後の空白を取り除き、改行や引用符、説明文が混ざらないようにしてください。末尾のパディング文字も削除しないでください。

3. EndpointとAddress:接続先とトンネル内アドレスの違い

Endpointには接続先のホストとポートを指定します。たとえば192.0.2.1:51820の場合、ホストは192.0.2.1、ポートは51820です。Shadowrocketの編集画面でアドレスとPortが別の欄になっている場合は、それぞれ分けて入力してください。ポート付きの文字列全体を、ホスト名だけを入力する欄に入れないでください。IPv6のEndpointを一体で表記する場合は、[2001:db8::1]:51820のように角括弧が必要です。

Addressはトンネル内で使う端末側のアドレスで、通常は10.66.0.2/32のようにプレフィックス長とともに指定されます。プロバイダーからIPv4とIPv6の両方が提供された場合は、割り当て内容に従って入力してください。EndpointのパブリックアドレスをAddress欄に入れないでください。また、別の端末のトンネル識別情報をコピーして同時に使うと、識別情報やアドレスが競合するおそれがあります。

項目設定例確認ポイント
Endpoint192.0.2.1:51820接続先アドレスとポートをセットで確認します。実際のポートは51820とは限りません。
Address10.66.0.2/32プロバイダーから割り当てられた端末側トンネルアドレスを使い、プレフィックス情報も保持します。
DNS10.66.0.1トンネル内のDNSサーバーを使う場合は、そこまで到達できる経路が必要です。
AllowedIPs0.0.0.0/0, ::/0WireGuardの仕様上、IPv4とIPv6の全通信を対象にしても、アプリのルールによってすべての通信がこの項目を通るとは限りません。

表のアドレスは各項目の説明用であり、実際に使える設定ではありません。特に192.0.2.1と2001:db8::1は、文書用に予約された例示アドレスです。実際に接続するには、ポートが開放されていること、接続先がUDPに対応していること、鍵が一致していること、ローカルネットワークで該当通信が許可されていることが必要です。

4. HomeでWireGuardを追加する際の確認手順

個別の設定情報をすでに入手している場合は、手動で追加できます。以下の手順では英語の画面表示を使います。項目の配置はデバイスによって異なる場合があります。プロバイダーの設定項目に対応する入力欄が編集画面にない場合は、別の欄に無理に入力せず、設定の読み込み方法と対応範囲を確認してください。

  1. 元の設定を保存する

    プロバイダーから受け取った元の設定を保存し、Homeで現在選択されている項目とGlobal Routingの設定を記録します。テスト中は一度に1項目だけ変更し、元に戻せるようにしてください。

  2. プロトコルを選択する

    Home → 右上の「+」→ Type → WireGuardの順に進みます。まずTypeを確認してから、アドレス、Port、鍵を入力してください。他のプロトコルの入力欄の意味を引き継がないようにしましょう。

  3. 各項目を対応させる

    Endpointを接続先ホストとPortに分けて入力します。PrivateKeyは端末側の秘密鍵、PublicKeyは接続先の公開鍵です。Address、DNS、MTUは元の設定と編集画面で対応している項目に従って入力してください。

  4. 保存して選択する

    保存したらHomeに戻り、追加した項目を選択してから接続を開始します。VPNを初めて設定する場合は、システムの案内に従って許可してください。システム上でVPN接続済みと表示されても、接続先とのハンドシェイクや通信がすべて成功したとは限りません。

  5. テスト条件を固定する

    まず同じネットワークと同じテスト対象を使います。Settings → On Demandが有効な場合は条件を記録し、自動接続が手動テストに影響しないようにしてください。テスト後は元の設定に戻します。

Homeで一度遅延テストの数値が表示されても、すべての通信が使えるとは限りません。結果はテスト方法、対象、通信経路によって変わります。DNSの名前解決、実際のページ表示、大きなデータの転送も確認してください。一方、特定の遅延テストに失敗しただけでPrivateKeyの誤りと判断することもできません。

5. DNSとAllowedIPs:名前解決と通信経路を分けて確認

DNSはWireGuardの暗号化ハンドシェイクそのものに含まれる項目ではなく、一般的な設定ツールでDNSサーバーを指定するための設定です。Shadowrocketでの実際の名前解決は、現在のConfigや関連するDNS設定にも左右されます。そのため、プロバイダーの設定にあるDNSアドレスと、アプリ内の既存のDNS設定をあわせて確認してください。片方だけを見ても十分ではありません。

Endpointにホスト名を使う場合、トンネルを確立する前にそのホスト名を名前解決する必要があります。利用できるDNSサーバーが、まだ確立していないトンネル経由でしか到達できない場合、依存関係の循環が発生することがあります。その場合は、到達可能かどうかわからないアドレスにDNSを変更せず、入口ホスト名の名前解決方法をプロバイダーに確認してください。

6. MTUの選び方:元の値を優先し、1項目ずつ比較

MTUはインターフェースで扱える最大IPパケットサイズを表し、単位はバイトです。WireGuardは元のパケットに通信のためのヘッダーを追加するため、トンネルのMTUは通常、下位リンクのMTUより小さくなります。一般的な設定例に1420がありますが、すべてのネットワークで適切とは限りません。下位リンク、追加のカプセル化、経路上の制限によって適切な値は変わります。

よくある切り分けの手がかりは、小さなリクエストは完了する一方で、大きなレスポンスが止まり続けるケースや、ネットワークを切り替えると同じ設定で大量データの通信に問題が出るケースです。経路MTU探索やパケット分割に関係する場合もあれば、パケットロスや輻輳が原因の場合もあります。まず鍵、Endpoint、DNSを確認し、その後MTUだけを変更して比較してください。

プロバイダー指定の値を使う

推奨

プロバイダーからMTUが明示されている場合は、まずその値を基準として維持します。たとえば元の設定が1420なら、DNSやEndpointを同時に変更せず、その値でハンドシェイク、名前解決、実際の通信を確認してください。

適したケース:初回の読み込み、設定の移行、再現可能なテスト基準を作るとき。

デフォルトのままにする

元の設定にMTUの指定がなく、編集画面でも未指定にできる場合は、まずデフォルトのままにします。他の設定例で1420が使われているからといって、必ず入力する必要はありません。デフォルトの動作が常に単一の固定値になるとは限りません。

適したケース:プロバイダーから特別な指定がなく、現在の通信にも目立った問題がないとき。

1280で比較テスト

大きなパケットの通信に問題があり、ほかの設定項目を確認済みの場合は、設定が許す範囲で一時的に1280を試せます。IPv6の最小リンクMTUの参考値でもありますが、すべての経路の問題が解決するとは限りません。テスト後に差を記録し、元に戻すか判断してください。

適したケース:小さなリクエストは正常だが、大きなデータの転送が止まり、パケットサイズの影響を確認したいとき。

MTUを小さくしても通信が速くなるとは限りません。特定の経路で大きなパケットの問題を減らせる場合がある一方、同じデータ量を送るのに必要なパケット数やカプセル化のオーバーヘッドが増えます。同じネットワーク、同じ項目、同じ接続先で変更前後を比較して判断してください。遅延テストの数値だけを比べても十分ではありません。

7. 接続に失敗したときの段階的な確認手順

まず、「システムのVPNが起動している」「接続先と通信できる」「目的のリクエストが完了する」の3つの状態を区別してください。WireGuardは通信が発生していないとき、静かな状態を保つことがあります。短時間データが流れないだけで切断と判断しないでください。接続を何度も切り替えても、誤ったPublicKeyやポートが自動で修正されることはありません。

確認された症状優先して確認する項目次の手順
すべてのリクエストが失敗するEndpoint、Port、UDPの到達性、双方の鍵の対応関係プロバイダーに登録されているクライアントの公開鍵が、現在のPrivateKeyに対応していることを確認します。
ドメイン名を使うリクエストが失敗するEndpointの事前名前解決、通信先のDNS、現在のConfig接続先ドメインの名前解決失敗と、トンネル内DNSへの到達不能を区別します。
小さなリクエストは正常だが、大きなデータの転送が止まるパケットロス、経路MTU、ネットワーク切り替え後の差ほかの条件を固定し、MTUだけを変更して比較します。
サブスクリプション更新後に設定値が戻る項目がサブスクリプションで管理されているか元の設定と比較し、テスト用の複製で変更を検証します。元の項目を何度も上書きしないでください。
一部の通信だけがトンネルを通らないGlobal Routing、現在のConfig、適用されるポリシーWireGuardの識別情報をすぐ作り直すのではなく、通信の振り分け結果を確認してください。

Wi-Fiとモバイル通信の間を頻繁に切り替える場合は、ネットワークごとに結果を記録してください。任意設定のPersistentKeepaliveは定期的に通信を送り、接続を維持するために使います。設定例では25秒がよく使われますが、プロバイダーから指定がある場合や、NATマッピングの維持が必要で、現在の設定方法が対応している場合に限って設定してください。誤った鍵の修正にはならず、速度を調整する機能でもありません。

プロバイダーに問い合わせる際は、ネットワークの種類、Endpointのポート、問題が起きるリクエストの種類、大きなデータだけが失敗するか、MTU変更前後の違いを記録してください。設定画面のスクリーンショットやログを共有する前に、PrivateKey、PresharedKey、サブスクリプションのトークンなどの識別情報を隠します。「接続できない」とだけ伝えるより、再現できる条件を示すほうが問題の切り分けに役立ちます。

App Storeで正規版をダウンロードデベロッパ名とアプリIDを確認