ShadowrocketのWireGuard設定方法|Private Key・Public Key・Address・MTUの入力ガイド

ShadowrocketでWireGuardを設定する方向けに、鍵ペアとPeerの仕組み、各項目に入力する情報、MTUやDNSの設定の考え方を解説します。

この記事の概要

サービス提供元からWireGuard設定を受け取り、Shadowrocketに各項目を入力する方を対象に、まず自分のPrivate Keyと相手側のPublic Keyを区別し、Address、Endpoint、MTU、DNSの役割を確認します。最後に、項目を一つずつ検証して、鍵の不一致、UDPの通信不可、名前解決の失敗、パケットサイズの問題を切り分けます。

WireGuardの設定では自分側と相手側を区別する

WireGuardは鍵ペアを使って通信相手を識別します。各端末には固有のPrivate Keyと、そこから生成されるPublic Keyがあります。Private Keyは端末内に保管し、Public Keyを通信相手に登録します。そのため、サービス提供元から受け取ったクライアント設定の[Interface]と[Peer]は別の情報です。Keyという文字だけを見て入れ替えないでください。

Shadowrocketでは、自分側のPrivate Keyで端末の身元を証明し、PeerのPublic Keyで接続先を確認します。サーバー側には、自分のPrivate Keyに対応するクライアントのPublic Keyも登録されている必要があります。Private Keyを別のものに変更しても、サーバー側の登録を更新しなければ、ほかの設定をそのまま使っても正しく通信できません。

32バイト
WireGuard鍵の元データの長さ。通常はBase64形式のテキストで表示される
UDP
WireGuardの通信方式。TCPハンドシェイクは使用しない
2種類
設定項目の役割:Interfaceは自分側、Peerは相手側

要点:まず鍵がどちら側のものか確認する

入力前に、設定資料のInterface PrivateKeyとPeer PublicKeyを、それぞれ「自分の秘密鍵」「サーバーの公開鍵」として確認してください。どちらかが見当たらない場合は、自分のサービス提供元に問い合わせ、もう一方の鍵で代用しないでください。

Private Key・Public Keyとアドレス項目の対応

以下では、WireGuard標準の設定項目をもとに対応関係を説明します。Shadowrocketの編集画面では、項目の並びが変更されることがあります。入力時は表示位置ではなく項目の意味を確認してください。特にAddressと接続先サーバーのアドレスは別物です。前者はトンネル内のアドレス、後者はEndpointに指定するアドレスで、通常は一致しません。

WireGuard設定と入力項目の対応表
項目設定資料の項目入力時のポイント
Private Key[Interface]のPrivateKey端末に割り当てられた秘密鍵を入力します。末尾に=が含まれる場合も含め、Base64の文字列を省略せず入力し、空白や改行を加えないでください。
Public Key[Peer]のPublicKey接続先Peerの公開鍵を入力します。クライアント自身の公開鍵や、サブスクリプションのアクセス情報ではありません。
Address[Interface]のAddressサービス提供元から指定されたトンネルアドレスとプレフィックスを入力します。たとえば設定資料に10.66.0.2/32とある場合は、その値を使用してください。似たアドレスを自分で選んで代用することはできません。
サーバーアドレスとPort[Peer]のEndpointホスト名とポート番号をそれぞれ対応する欄に入力します。ポート番号はサーバー側の設定と一致させてください。51820はよく使われる例であり、固定値ではありません。
Preshared Key[Peer]のPresharedKey追加の共有鍵を設定する場合の項目です。サーバー側で有効になっている場合は同じ値を入力してください。指定がない場合、Private Keyで代用してはいけません。
MTU[Interface]のMTUまたはサービス提供元の指定設定済みの値があれば、そのまま使用してください。指定がない場合はアプリの初期値を維持し、任意のネットワークで使える最適値があると考えないでください。
DNS設定内のDNSとサービス提供元の名前解決に関する説明DNSサーバーにトンネル内からしか到達できないか確認し、Shadowrocketの現在のDNS設定と照らし合わせて、実際の名前解決経路を確認してください。

Private Keyは重要な認証情報として安全に保管してください。トラブルを相談する際は、エラーメッセージやネットワークの種類、認証情報を含まない項目名を共有できます。秘密鍵、Preshared Key、サブスクリプションURLをそのまま貼り付けないでください。公開鍵は秘密鍵のように秘匿する必要はありませんが、公開の記録にアカウント情報やアドレスを添える必要もありません。

HomeからWireGuardを追加する手順

入力を始める前に、自分の設定資料を一式そろえてください。Endpointや公開鍵だけでは設定は完成しません。サーバーに登録されたクライアント情報、割り当てアドレス、アクセス許可範囲がそれぞれ対応している必要があります。以下では手動追加の手順を説明します。画面上の項目名は英語表記のまま記載します。

  1. プロトコルを選択

    Home → 右上の「+」→ Type → WireGuardの順に進みます。先に接続タイプを選択してから項目を入力し、WireGuardの設定を別プロトコルの編集画面に入力しないようにしてください。

  2. 接続先を入力

    Endpointのホスト部分をサーバーアドレス欄に、ポート番号をPort欄に入力します。たとえば資料にvpn.example.com:51820と記載されている場合、ホスト名と51820を分けて入力します。これは形式の例であり、実際に接続できる情報ではありません。

  3. 鍵を確認

    自分側のPrivate Keyと接続先のPublic Keyを入力し、Preshared Keyがある場合はそれも入力します。元の資料と一項目ずつ照合し、コピー時に引用符や空白、項目名が混入していないか確認してください。

  4. トンネル内アドレスを入力

    資料に記載されたAddressを、指定のプレフィックス長を含めて入力します。IPv4とIPv6は割り当てられた内容に従ってください。現在の端末がIPv4ネットワークに接続しているからといって、設定内のIPv6情報を削除しないでください。

  5. 保存して接続をテスト

    MTUなどの任意項目を確認して保存し、Homeに戻って対象の項目を選びます。短時間の検証ではGlobal RoutingをProxyに設定してから接続スイッチをオンにします。テスト後は、普段使っているConfigなどの設定に戻してください。

既存のSubscribeから追加した項目の場合は、まずそのSubscribeにWireGuardの項目が含まれているか確認してください。更新によってSubscribe管理下の項目が上書きされることがあります。手動で変更する前に元の設定を保管し、変更内容を記録してください。一度のテスト結果を残すためにSubscribe全体を何度も変更したり、トラブル調査用のスクリーンショットに認証情報を含むSubscribeを写したりしないでください。

Address、AllowedIPs、ルールによる振り分けは別の層

Addressは端末側のトンネルインターフェースに割り当てる内部アドレスです。例の10.66.0.2/32で、/32はIPv4のホストアドレス一つを表します。接続先Endpointを示すものでも、すべての通信が自動的にトンネルを通ることを意味するものでもありません。通常、このアドレスはクライアントごとのサーバー設定に対応します。/24に変更しても、接続の問題は解決しません。

WireGuard標準設定のAllowedIPsは、Peerの宛先アドレス選択や送信元アドレスの検証に関係します。一方、ShadowrocketのGlobal RoutingやConfigのルールは、アプリの通信に適用するポリシーを決めます。OSレベルのWireGuard設定でのルーティングと、Shadowrocketで現在適用されているルールの効果を同じものとして扱わないでください。

MTUの設定目安と検証方法

MTUは、インターフェースで送信できるIPパケットの最大サイズです。WireGuardでは外側のIP、UDP、プロトコルのヘッダーなどが加わるため、トンネル内で送れるサイズは通常、外側の回線のMTUより小さくなります。経路上で別のカプセル化が行われる場合もあるため、Wi-Fiの電波強度や回線速度だけからMTUを推定することはできません。

1420はWireGuardでよく使われるMTUの開始値、1280はパケットサイズを小さくする診断時の参考値です。どちらもすべてのネットワークに適用できる固定値ではありません。設定済みの値があれば、まずその値を入力してください。指定がなければ初期値を維持します。「小さなリクエストは成功するが、大きなページや転送が止まる」といった症状がある場合に、MTUを調べます。

  1. 元のMTU、接続中のネットワーク、Global Routingの設定、テスト対象を記録し、元に戻せる状態を保ちます。
  2. まず、現在のネットワークで同じ項目を使って実際のリクエストが完了するか確認してください。まったく通信できない場合は、MTUを次々に試すのではなく、鍵、Endpoint、UDPの到達性を優先して確認します。
  3. 初期値または1420で大きなデータ転送が繰り返し止まる場合は、1380を一時的に試します。それでも改善しなければ、診断の比較用として1280を試してください。MTUだけを一つずつ変更し、接続を張り直して同じ操作を繰り返します。
  4. Wi-Fiとモバイル通信でそれぞれ結果を記録します。一方のネットワークでだけ有効な値があっても、経路の条件が異なる可能性があります。それだけで、もう一方のネットワークの設定ミスとは判断できません。

これらの数値はテスト手順の例であり、このサイトでの実測結果ではありません。MTUを下げてアクセスが回復した場合、経路MTUやフラグメント、関連するパケット処理が原因の可能性を示しますが、繰り返し検証が必要です。変化がなければ元の値に戻して別の層を調べてください。「小さいほど安定する」と考えて恒久設定にしないでください。

DNSは名前解決と接続経路の両方を確認する

WireGuardには、統一されたDNS設定の配布プロトコルはありません。一般的な設定ファイルのDNSはクライアントや設定ツール向けの情報であり、WireGuardのハンドシェイクで自動的に決まるDNSサーバーではありません。Shadowrocketで実際に使われるDNS設定は、現在のConfigのDNS設定やアプリの設定とあわせて確認してください。

Endpointにドメイン名を指定した場合、トンネルを確立する前に名前解決できる必要があります。トンネル内からしか到達できないDNSに名前解決を完全に依存すると、「トンネルがないと名前を解決できず、名前を解決しないとトンネルを確立できない」という状態になることがあります。また、サービス提供元のプライベートDNSは、アドレスの形式が正しくてもDirect経由では到達できない場合があります。

よくある入力ミスとトラブルの確認手順

接続スイッチがオンでも、システムのVPNセッションがその状態にあることを示すだけで、WireGuardでデータが正常にやり取りできているとは限りません。「設定資料の確認 → EndpointとUDP → 鍵の対応 → アドレスと通信ポリシー → DNS → MTU」の順に調べると、すべての項目を無作為に切り替えるより原因を特定しやすくなります。

Public Keyには自分で生成した鍵を入力しますか?

ここで必要なのは接続先PeerのPublic Keyです。サービス提供元の資料にある[Peer]のPublicKeyを確認してください。自分側の公開鍵はサーバーに登録する必要があります。新しい鍵ペアを生成した場合は、サーバー側にも新しい公開鍵を登録してください。端末のPrivate Keyだけ変更しても接続できません。

Portを443に変更すれば必ず接続できますか?

いいえ。Portには接続先サーバーが実際に待ち受けているUDPポートを指定してください。443と入力しても、WireGuardがHTTPSやTCPに変わるわけではありません。まず資料に記載されたポートに戻し、同じ項目を使ってWi-Fiとモバイル通信でそれぞれテストし、特定のネットワーク経路だけで失敗するか確認してください。

Addressには記事の例にある10.66.0.2/32をそのまま入力できますか?

例のアドレスを自分に割り当てられた値として使わないでください。元の設定ファイルを開き、[Interface]内のAddressを探して、実際の値を入力します。記載がない場合は自分のサービス提供元に問い合わせてください。ほかの端末の設定をコピーすると、同じ識別情報やアドレスが重複する可能性もあります。個別の割り当てが必要か確認してください。

再接続後も以前の項目が使われているように見えるのはなぜですか?

Homeに戻り、現在選択している項目とGlobal Routingを確認してください。Configを使っている場合は、ポリシーグループの選択内容も確認します。接続状態が自動で復元される場合は、Settings → On Demandを開いて自動接続の条件を確認してください。テスト中は該当条件を記録して一時的に無効にし、完了後に元へ戻します。

Subscribeの更新後に設定項目が変わった場合は?

まず、その項目がSubscribeで管理されているか確認し、自分の元の設定資料と更新後の内容を照合してください。テスト用の設定と正式な設定は分けて記録します。Addressや鍵がSubscribeから繰り返し異なる値で配信される場合は、更新のたびに手動で上書きするのではなく、自分のサービス提供元に設定を確認してください。

ShadowrocketをApp Storeでダウンロード