WireGuardの接続情報をサービス提供元から受け取り、Shadowrocketで手動設定する方向けの記事です。まず自分の端末とPeerの鍵を区別し、Address、Endpoint、MTUを確認したうえで、Global Routingや接続時の状態から問題を切り分けます。例示するアドレスは書式の説明用で、接続には使えません。確認のためにPrivateKeyや設定全体を公開する必要はありません。
1. 設定前に、各パラメータがどちら側のものか確認する
ShadowrocketはApple向けの有料アプリで、主にiPhoneとiPadで利用できます。入手先はApp Storeのみです。デベロッパはShadow Launch Technology Limited、アプリIDは932747118で、買い切り形式です。システム要件はApp Storeの掲載内容をご確認ください。アプリの購入と接続サービスの契約は別です。本サイトでは接続先やサブスクリプションを提供・販売・推奨していません。
WireGuardは鍵を使って通信相手を識別します。設定内の[Interface]は通常、自分の端末側を表し、[Peer]は接続先を表します。Shadowrocketのサーバー編集画面は元の設定ファイルを編集する画面ではなく、項目が分かれて表示される場合があります。それぞれの意味に合わせて入力し、設定ファイル全体を1つの欄に貼り付けないでください。
設定を始める前に、自分の端末のPrivateKeyとAddress、接続先のPublicKeyとEndpoint、サービス提供元が指定するその他の情報を用意してください。設定にPresharedKeyが含まれている場合は、それも必要です。PublicKeyだけ、あるいはサーバーアドレスだけでは設定を完了できません。サーバー側には端末のPrivateKeyに対応するPublicKeyを登録し、該当するトンネルアドレスを許可する必要があります。
2. HomeからWireGuardサーバーを追加する
元の設定情報を保管したうえで、テスト用のサーバー項目を新規作成します。以下では英語表示の画面名を使っています。各項目の配置はアプリのバージョンによって異なる場合があります。WireGuardの設定をSubscribeリンクとして追加したり、既存サブスクリプションの別プロトコル用情報をWireGuardにそのまま変換できると考えたりしないでください。
-
追加画面を開く
Homeを開き、右上の「+」→「Type」の順に進み、WireGuardを選択します。Subscribe項目ではなく、単一のサーバー設定を編集していることを確認してください。
-
接続先を入力する
Endpointのホスト名とポートを、サーバーアドレスとポートの各欄に入力します。たとえば
vpn.example.com:51820の場合、ホスト名はvpn.example.com、ポートは51820です。入力欄が分かれている場合、ホスト名の欄にポートを重ねて入力しないでください。 -
端末側の情報を入力する
元の設定に従ってPrivateKeyとAddressを入力します。Addressは端末に割り当てられたトンネル内のアドレスで、Endpointや現在接続中のWi-Fiのローカルアドレスではありません。
-
Peerを確認する
対応する欄に接続先のPublicKeyを入力します。サービス提供元の設定にPresharedKeyが明記されている場合のみ入力してください。PublicKeyで代用したり、任意の値を追加したりしないでください。
-
保存して接続をテストする
元の設定を参照してMTUなどの項目を確認し、保存します。Homeに戻り、追加した設定を選択してください。最初のテストではGlobal RoutingをProxyにし、Homeの接続スイッチをオンにします。システムのVPN構成を初めて作成するときは、画面の案内に従って許可してください。
3. PrivateKey、PublicKey、Peerの対応関係
鍵に関するよくある間違いは、長さではなく通信する双方の値を取り違えることです。PrivateKeyは端末内に保持し、PeerのPublicKeyで接続先を識別します。サーバー側の設定には、端末のPublicKeyを登録します。両端から見たPeerは互いを指すため、サーバー側のPeer設定をそのまま端末側にコピーすることはできません。
端末側のパラメータ
- PrivateKey
- 端末の秘密鍵。サーバーに登録する端末のPublicKeyと対になります。
- Address
- 端末のトンネルアドレス。例:
10.7.0.2/32。割り当てられた値を使用します。 - MTU
- トンネルインターフェースで許可するIPパケットの最大長。まずは元の設定に従います。
PrivateKeyとAddressは端末側の情報です。接続先のEndpointから推測するものではありません。
Peerのパラメータ
- PublicKey
- 接続先の公開鍵。実際に接続するサーバーの秘密鍵と対になっている必要があります。
- Endpoint
- 接続先のホスト名とUDPポート。例:
vpn.example.com:51820。 - PresharedKey
- 任意の追加共有鍵。有効にする場合は両端で同じ値を設定します。
Peerは通信相手を表します。サブスクリプションのグループやルールのポリシーグループではありません。
標準的なWireGuard鍵のBase64文字列は通常44文字で、末尾に=が付きます。この特徴は切り詰めやコピー間違いの確認には役立ちますが、鍵の組み合わせが正しいことを保証するものではありません。コピー時は末尾の文字を残し、誤って含まれた空白、改行、引用符を取り除いてください。PrivateKey =のような項目名まで値の欄に入力しないでください。
- PrivateKeyを変更した後に接続できない:秘密鍵を変更すると端末のPublicKeyも変わります。サーバー側の登録情報が更新されていなければ、新しい鍵では従来の設定どおりに通信できません。
- 2台目の端末にコピーすると不安定になる:複数の端末で同じ鍵のIDを同時に使うと、接続先が認識する通信アドレスが切り替わることがあります。端末ごとに別のIDとアドレスをサービス提供元から割り当ててもらってください。
- PresharedKeyを空欄にすると接続できない:接続先でこの項目が必要な場合、端末側にも完全に同じ値を入力する必要があります。省略できる任意のメモではありません。
4. Address、Endpoint、AllowedIPsを混同しない
Addressはトンネル内の端末アドレス、Endpointはトンネル外にある接続先の入口です。たとえば10.7.0.2/32のスラッシュ以降はCIDRプレフィックス長で、ポート番号ではありません。10.7.0.2:32に書き換えないでください。サービス提供元からIPv4とIPv6の両方が割り当てられている場合は、それぞれ対応する欄に入力します。似たアドレスを自分で作らないでください。
| 項目 | 入力例 | 確認ポイント |
|---|---|---|
| Address | 10.7.0.2/32 | 端末のトンネルアドレス。サーバーから割り当てられた値と一致させます。 |
| Endpoint | vpn.example.com:51820 | ホスト名を名前解決でき、UDPポートが接続先の待ち受けポートと一致していること。 |
| IPv6 Endpoint | [2001:db8::1]:51820 | ホスト名とポートを組み合わせた例です。入力欄が分かれている場合は各欄に分けて入力します。 |
| AllowedIPs | 0.0.0.0/0, ::/0 | 元のWireGuard設定にあるPeerのアドレス範囲です。ShadowrocketのRuleテキストではありません。 |
| DNS | 10.7.0.1 | 書式の例です。実際には現在のルーティング経由で到達できるアドレスを指定します。 |
上記のドメイン名とアドレスは書式の説明用であり、接続には使えません。Endpointにhttps://を付けたり、サブスクリプションのパスを入力したりしないでください。元のEndpointがドメイン名の場合、トンネルを確立する前に名前解決できる必要があります。「接続後にどのDNSを使うか」と「接続前にEndpointを名前解決できるか」は別の問題です。
標準的なWireGuard設定では、AllowedIPsはPeerの送信先選択と受信パケットの送信元アドレス確認に関わります。クライアントでよく使われる0.0.0.0/0と::/0は、IPv4とIPv6の全アドレス範囲を対象にします。一方、サーバー側ではクライアント用Peerに、その端末へ割り当てたアドレスだけを許可することがよくあります。両端に同じ範囲を機械的に入力しないでください。Shadowrocketでアプリの通信をこのサーバーに送るかどうかは、Global Routing、現在のConfig、ポリシーの選択によっても異なります。AllowedIPsをアプリ内の振り分けルールとして扱わないでください。
5. MTUとPersistentKeepaliveを変更するときの注意
MTUは通信速度を表す数値ではありません。WireGuardではカプセル化による追加の通信量があるため、トンネル内で許可するパケット長を実際の通信経路に合わせる必要があります。元の設定にMTUが指定されている場合は、まずその値を入力してください。指定がない場合は、アプリの標準の動作を維持します。特定のWebページの表示が遅いからといって、MTU、DNS、ポート、鍵を同時に変更すると、どの変更が影響したのか分からなくなります。
- MTUを確認する目安:接続は確立するものの、小さなリクエストは正常で大きな応答だけが繰り返し止まる場合は、経路上のMTUを調査対象に含めます。ただし、パケットロスや接続先の問題でも同じ現象が起きることがあり、1回の読み込み失敗だけでは判断できません。
- 1つずつ変更してテストする:まず元の値を記録します。元の値が
1420なら、サービス提供元が許可する範囲内で一時的に1380へ変更し、再接続して同じ接続先を試します。どちらもテスト例であり、すべての環境に適した値ではありません。 - IPv6を使用する場合:試しに値を変えるためだけに、
1280未満へむやみに下げないでください。IPv6にはリンクMTUの最低要件があります。IPv6を使う場合は、サーバーの設定と実際の通信経路も合わせて確認してください。 - 変更を元に戻す:繰り返し確認できる改善がない場合は、元の値に戻します。特定のネットワークで有効だった値を、すべての端末やネットワークにそのまま適用しないでください。
PersistentKeepaliveは定期的にパケットを送信して接続を維持する機能で、よく使われる目的はNATマッピングの維持です。通信速度を上げる機能ではありません。元の設定にあるPersistentKeepalive = 25は、およそ25秒ごとに保活パケットを送る設定例です。Shadowrocketの固定の標準値を示すものではありません。現在の画面に該当項目があり、サービス提供元から指定されている場合のみ、その設定に従って入力してください。この1行を別の項目欄に入力しないでください。
6. Global Routingでプロトコルとルールの問題を切り分ける
WireGuardのサーバー設定を保存した段階で完了するのは、接続情報の設定だけです。Homeではサーバーの選択と接続、Configではルール、SettingsではOn Demandなどを設定します。問題を切り分ける際は、同じサーバー、接続先、ネットワークを維持してGlobal Routingの設定を比較してください。サーバーを切り替えた後の現象をすべてルールの問題と判断しないでください。
Proxy
推奨最初の切り分けに使用します。Shadowrocketに入る一般的な通信をProxy経由にして、Configのルールによる影響を抑えます。テスト対象のWireGuard設定が選択されていることも確認してください。この設定で鍵の誤りや到達できないEndpointが修復されるわけではありません。
適した用途:まずWireGuardの設定と接続先からの転送を確認する
Config
現在のConfigにあるルールとポリシーに従って通信を処理します。Proxyでは接続できるのにConfigでは接続できない場合は、鍵をすぐに作り直すのではなく、ルールの順序、適用されたポリシー、ポリシーで実際に選択されているサーバーを確認してください。
適した用途:設定確認後のルール振り分けと個別チェック
Direct
通常の通信を直接接続します。この状態で接続先にアクセスできても、直通経路が利用できることを示すだけで、WireGuardトンネルが使える証明にはなりません。WireGuard経由の出口を確認するテストにも適しません。
適した用途:直接接続時の状態と比較する
Global Routingでは、Sceneを使って状況に応じてルーティング設定を切り替えることもできます。最初の切り分けでは設定を固定し、Sceneの条件によってテスト経路が変わらないようにしてください。以下はConfigの[Rule]セクションの書式例で、WireGuardサーバーの設定ではありません。テスト前に現在のConfigをバックアップし、設定ファイル全体をそのまま上書きしないでください。
[Rule]
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY
ルールは上から順に照合されます。DOMAIN-SUFFIXはドメインの末尾、IP-CIDRはアドレス範囲、GEOIPはIPの地理情報データベースを使って判定し、FINALはそれまでのルールに一致しなかった通信を処理します。この例では、example.comのサブドメインへのアクセスは最初の行に一致します。その他の通信がすべて直接接続されるわけではなく、下のルールへ順に進みます。PROXYで最終的に使われるサーバーは、アプリ内でも確認してください。
7. 状況を整理して問い合わせる。秘密鍵は共有しない
ここまで確認しても解決しない場合は、「接続先と正常に通信できない」状態と「トンネルの通信量はあるが接続先を利用できない」状態を区別してください。前者では鍵、Endpoint、UDPでの到達性を優先して確認し、後者ではDNS、サーバー側の転送、AllowedIPs、MTUを確認します。WireGuardは無効なリクエストに対して読み取れるエラーを返さないことがあります。画面に明確なエラーが表示されなくても、すべての項目が正しいとは限りません。
| 確認できた現象 | 優先して確認する項目 | 次に行うこと |
|---|---|---|
| リクエスト後、送信量だけが増える | Endpoint、UDP経路、Peerの鍵、PresharedKey | 元の設定を確認し、サーバー側でリクエストを受信しているかサービス提供元に問い合わせます。 |
| 接続後、ドメイン名を使う接続が全般的に失敗する | DNSへの到達性、名前解決の結果、現在のルーティング | 失敗したドメイン名と発生時刻を記録し、名前解決の失敗か接続先への接続失敗かを切り分けます。 |
| Proxyでは正常だが、Configでは失敗する | Configのルール適用とポリシー選択 | 接続先に適用されたルールと、PROXYで選択されているサーバーを確認します。 |
| しばらく通信がないと、その後のリクエストが失敗する | NATマッピング、ネットワークの切り替わり、保活の要件 | 再接続した場合と比較し、PersistentKeepaliveの設定をサービス提供元に確認します。 |
| 小さなリクエストは成功するが、大きな応答が止まる | 通信経路のMTU、パケットロス、サーバー側の転送 | 一度に変更するのは1項目だけにし、同じリクエストを変更前後で試した結果を記録します。 |
サービス提供元に問い合わせる際は、問題の発生時刻、Wi-Fiかモバイル通信か、現在のGlobal Routing、値を伏せたEndpoint、送受信量の変化、1項目ずつ変更したテスト結果を伝えると役立ちます。PrivateKey、PresharedKey、設定ファイル全体、認証情報を含むサブスクリプションリンクは送らないでください。鍵が漏えいした場合は、設定名を変えるだけではなく、新しいIDを発行してもらい、古い設定を無効にしてください。
- テストが終わったらGlobal Routingを元の設定に戻し、現在のConfigとサーバーの選択を確認します。
- 自動接続を使う場合は、Settings → On Demandで設定を戻し、Wi-Fiとモバイル通信のそれぞれで動作を確認します。
- 必要な設定変更は記録に残し、鍵を公開のメモやスクリーンショット、公開の場での相談に貼り付けないでください。