Shadowrocket WireGuard設定ガイド|Private Key・Peer・MTUの項目を解説

WireGuardのPrivate Key、Public Key、Address、Peer、MTU、DNSを項目別に解説。提供された設定値の入力方法と、よくある入力ミスも紹介します。

この記事の概要

WireGuardを設定する際は、まずローカル側のInterfaceとリモート側のPeerを区別しましょう。Private Keyはローカル側、PeerのPublic Keyはリモート側のものです。また、トンネルのAddressとサーバーのEndpointも別の項目です。利用可能なWireGuard設定をすでにお持ちの方に向けて、項目の対応関係、追加手順、よくある症状を解説します。Shadowrocketで鍵、アドレス、UDPポート、MTU、DNSを確認し、むやみに値を変更して試すことなく問題を切り分けられます。

InterfaceとPeerを区別する

WireGuardの設定は通常、[Interface]と1つ以上の[Peer]セクションで構成されます。Interfaceはローカル側のトンネル識別情報とアドレス、Peerは通信相手を表します。提供元の設定をShadowrocketに入力する前に、まず役割ごとに項目を整理してから、Homeでレコードを追加しましょう。項目名にKeyやAddressが含まれているというだけで、すぐに貼り付けないでください。

この記事は、利用可能な設定を提供元からすでに入手していることを前提としています。Shadowrocketは買い切りの商用アプリですが、アプリの購入と通信サービスの契約は別です。当サイトではノードやサブスクリプションの提供・販売・推奨は行っていません。WireGuardの各項目が有効かどうかは、両端の設定が対応しているかによって決まります。アプリを購入しても、利用可能なリモートPeerが自動で用意されるわけではありません。

Interface(ローカル側)

Private Key
ローカル側の秘密鍵。元の設定のPrivateKeyに対応します。
Address
ローカル側に割り当てられたトンネルIPアドレスとプレフィックス長。
MTU
トンネルインターフェースで許容するIPパケットの最大サイズ。
DNS
設定で指定されたDNSサーバーのアドレス。実際に適用される範囲を確認してください。

ローカル側の鍵とトンネルアドレスは、同じ有効な設定から取得してください。

Peer(リモート側)

Public Key
リモート側の公開鍵。PeerセクションのPublicKeyに対応します。
Endpoint
リモートサーバーのアドレスとUDPポート。
AllowedIPs
そのPeerに対応するトンネルアドレスの範囲。
Preshared Key
双方で合意して使用するオプションの事前共有鍵。

ローカル側の公開鍵を、リモート側のPublic Keyに入力しないでください。

Private Key・Public Key・Preshared Key

PrivateKeyとPublicKeyは、対になって使用する識別情報です。ローカル側の秘密鍵に対応する公開鍵を、リモート側に登録する必要があります。一方、ローカル側の設定にあるPeerのPublic Keyには、リモート側の公開鍵を指定します。これは両端がお互いを識別するための関係であり、同じ公開鍵をすべての項目にコピーするものではありません。

WireGuardの標準鍵は32バイトのデータで、一般的なテキスト表記は44文字のBase64文字列です。通常は末尾に=が付きます。文字数が合っていても、現在のアカウントやPeerに対応する鍵であるとは限りません。コピー時は末尾の文字を残し、誤って含まれた引用符、改行、前後の空白を取り除いてください。鍵の値だけを受け付ける入力欄に、PrivateKey =を含む行全体を入力しないでください。

AddressとEndpoint:別のアドレスとして扱う

InterfaceのAddressはトンネル内のアドレスです。例:10.66.0.2/32。この/32はIPv4のプレフィックス長であり、ポート番号ではありません。EndpointはWireGuard通信を確立するために接続するリモート側のネットワークアドレスで、通常はドメイン名またはIPアドレスとUDPポートの組み合わせです。役割が異なるため、画面にどちらもAddressと表示されていても、設定内の位置を確認してください。

元の設定の値意味入力時の確認ポイント
Address = 10.66.0.2/32ローカル側のトンネルIPv4アドレスローカル側のトンネルアドレス欄に入力します。入力欄の仕様に従ってプレフィックスも残してください。
Address = fd66::2/128ローカル側のトンネルIPv6アドレス元の設定で割り当てられている場合のみ入力してください。推測で追加しないでください。
Endpoint = 192.0.2.10:51820リモート側のIPv4アドレスとUDPポート入力欄が分かれている場合は、AddressにIPアドレス、Portに51820を入力します。
Endpoint = [2001:db8::10]:51820リモート側のIPv6アドレスとUDPポート1つの欄に入力する場合は、角括弧でIPv6アドレスとポートを区別します。欄が分かれている場合は、それぞれの形式に従って入力してください。

表中のアドレスは形式の説明用であり、実際のサーバーとして使用できません。ポート51820はよく使われる設定値ですが、必須ではありません。元の設定に別のポートが記載されている場合は、その値を入力してください。Endpointにhttps://を付けたり、サブスクリプションのURLを入力したりしないでください。ドメイン名を使う場合は、リモート側へWireGuardのハンドシェイクを送信する前に、そのドメインを名前解決できる状態にしておく必要があります。

Homeで追加して項目ごとに確認する

アプリを操作する前に、元の設定を保存してください。以下は、すでに用意されているWireGuardの値を手動で入力する手順です。既存のサブスクリプションで管理しているレコードの場合、更新時に設定が上書きされるかどうかを先に確認してください。画面の構成によっては、トンネルの各項目が個別に表示されます。確認時はInterfaceとPeerのどちらに属する項目かを見て、設定ファイルのセクション名を値として入力しないようにしましょう。

  1. 設定値を整理する

    InterfaceのPrivateKeyとAddress、PeerのPublicKeyとEndpointをそれぞれ控えます。PresharedKey、MTU、DNSがある場合は、それらも記録してください。Peerが複数ある設定では、どのPeerを入力するか先に確認します。

  2. 種類を選択する

    Home → 右上の「+」→ Type → WireGuardの順に進み、レコードのメモとリモートアドレス情報を入力します。メモはレコードの識別用であり、鍵認証には使用されません。

  3. 各項目の役割を確認する

    ローカル側のPrivate KeyとトンネルAddress、リモート側のPublic Keyを入力し、残りの項目も元の設定に合わせます。保存前に1項目ずつ照合してください。特にEndpointのPortに、トンネルのプレフィックス長を誤入力していないか確認します。

  4. 他の設定と切り分けてテストする

    Homeに戻って対象のレコードを選び、一時的にGlobal RoutingをProxyに設定して接続し、到達可能と分かっている宛先にアクセスします。テスト後はGlobal Routingを元の設定に戻し、一時的な設定を日常利用に残さないようにしてください。

  5. 自動接続を確認する

    手動で切断しても再接続する場合は、Settings → On Demandを確認してください。テスト中は、自動接続を引き起こす可能性のある条件をいったん無効にし、確認後に必要な設定を戻します。

システムのVPN状態が「接続済み」でも、リモート側とのハンドシェイクが成功したとは限りません。まず確認できるのは、ローカル側のVPNセッションが確立したことです。リモート側とデータを送受信できるかは、実際のリクエスト結果、参照可能なハンドシェイク記録、送受信カウンターをあわせて判断してください。接続スイッチがオンになっただけで、鍵やEndpointの確認を省略しないようにしましょう。

AllowedIPsとGlobal Routingの役割

標準的なWireGuard設定では、AllowedIPsによってアドレス範囲を特定のPeerに対応付け、データ受信時の送信元アドレス検証にも使用します。0.0.0.0/0はすべてのIPv4アドレス範囲、::/0はすべてのIPv6アドレス範囲を表します。ただし、この値だけでリモート側が該当するプロトコルの転送に対応しているとは限りません。

一方、ShadowrocketのGlobal Routingは、アプリがリクエストの処理経路をどう選ぶかを決めます。Proxyはプロキシ経由、Directは直接接続、Configは現在の設定に従った処理、Sceneは選択中のシーンに従った処理です。AllowedIPsはConfig内のドメインルールではありません。アドレス一覧にDOMAIN-SUFFIXやFINALを記述しないでください。

MTU:まず元の値を使い、症状に応じて調整

MTUはトンネルインターフェースで扱えるIPパケットの最大サイズです。WireGuardはデータをUDPでカプセル化するため、外側にはIP、UDP、プロトコル自体のヘッダー分の領域も必要です。追加の拡張を含まない一般的なデータでは、外側がIPv4の場合のオーバーヘッドは約60バイト、IPv6の場合は約80バイトです。実際に利用できる値は、接続ネットワークや通信経路全体の条件にも左右されます。

60バイト
一般的なIPv4カプセル化のオーバーヘッド
80バイト
一般的なIPv6カプセル化のオーバーヘッド
1420
外側のMTUが1500で、80バイトを差し引いた場合の計算値

1420は一般的な目安であり、すべてのネットワークに最適な値ではありません。元の設定にMTUが明記されている場合は、まずその値を入力してください。記載がなければ、アプリのデフォルト設定を維持するのが基本です。ハンドシェイクや小さなリクエストは正常でも、大きなページの読み込みやアップロードが続けて止まる場合に限り、MTUを調査対象にします。MTUを下げても、誤った鍵の修正にはなりません。

  1. 現在のMTUと再現する宛先を記録し、同じネットワークで小さなリクエスト、大きなページ、アップロードをそれぞれ試します。
  2. ほかの項目は変更せず、たとえば1420から1380に変更し、再接続後に同じリクエストを繰り返します。これは切り分け方法の例であり、実測結果ではありません。
  3. 症状が改善しない場合は元の値に戻し、UDPの到達性、DNS、リモート側の転送設定を確認します。改善した場合は、Wi-Fiとモバイル通信を切り替えたときの動作も検証してください。

DNS:Endpointの名前解決とトンネル内の名前解決を区別する

WireGuardの暗号化プロトコル自体はDNSを配布しません。一般的な設定にあるDNSは、クライアント側で処理される追加設定です。元のファイルに記載されたDNSの値を入力した後も、実際の名前解決経路を確認するには、Shadowrocketの現在のConfigにあるDNS設定を確認する必要があります。項目があるだけで、すべてのクエリがそのDNSサーバーを通るとは限りません。

Endpointのドメイン名を接続前に解決することと、接続後にWebサイトのドメイン名を解決することは、別の段階です。Endpointがドメイン名で、指定したDNSサーバーへ接続するために未確立のトンネルが必要な場合は、最初の名前解決に使える経路が必要です。まず現在の接続ネットワークからリモート側のドメイン名を解決できることを確認し、その後、トンネル内のDNSに到達できるか調べてください。2種類の失敗を混同しないようにしましょう。

よくある質問:症状から原因を絞り込む

Private Keyを正しく入力したのに、通信できないのはなぜですか?

まずPeerのPublic KeyとEndpointを照合し、リモート側に現在の秘密鍵に対応するローカル側の公開鍵が登録されていることを確認してください。元の設定にPresharedKeyがある場合は、それも入力します。ローカル側の秘密鍵が正しいだけでは、両端の認証情報が対応しているとは限りません。

Portには必ず51820を入力する必要がありますか?

必ずしもそうではありません。すでにお持ちの設定に記載されたEndpointのポートを使用し、そのUDPポートで通信できる経路か確認してください。ポートを443に変えてもWireGuardがHTTPSになるわけではなく、UDPの通信制限が自動的に解消されることもありません。

小さなページは開けるのに、大きなページが読み込み中のままです。どうすればよいですか?

まず同じネットワークで再度リクエストし、特定のWebサイトだけの障害ではないことを確認してください。鍵とEndpointは変更せず、MTUを記録してから値を下げてテストします。ドメイン名でのリクエストだけ失敗する場合は、DNSもあわせて確認してください。MTUが原因だとすぐに決めつけないようにしましょう。

モバイル通信に切り替えたら使えなくなりました。鍵を入力し直す必要がありますか?

まず現在のネットワークでUDP通信が可能か、Endpointのドメイン名を解決できるかを確認し、Settings → On Demandによって接続動作が変わっていないかも調べてください。ネットワークの切り替えだけで鍵を変更する必要はありません。元の設定にPersistentKeepaliveがある場合は、その値を維持してください。ただし、UDPで到達できる経路の代わりにはなりません。

同じ設定を2台のデバイスで同時に使えますか?

デバイスごとに異なる鍵とトンネルアドレスを用意することを推奨します。2台で同じ秘密鍵を同時に使用すると、リモート側で最後に受信した認証パケットに応じてEndpointが更新され、通信がデバイス間で切り替わる場合があります。MTUを上げたりDNSを変更したりしても、この認証情報の重複は解決できません。

作業後は、設定値の取得元、選択したレコード、Global Routingの状態、テストしたネットワーク、変更前後のMTUを含む、機密情報を伏せた確認記録を残してください。元のConfigとOn Demandの設定に戻した後、もう一度実際にアクセスし、一時的なテスト結果が通常の利用環境でも再現することを確認しましょう。

App Storeで正規品を確認