利用中のサービス提供元からWireGuard設定を入手し、Shadowrocketに手動で入力する方を対象に解説します。まず本機側のInterfaceとリモート側のPeerを区別し、Private KeyやPublic Key、トンネルアドレス、接続先を対応させます。最後にMTUとルーティング設定を確認しましょう。本文中のアドレス、ドメイン、ポートは構造の説明用で、接続に使える設定ではありません。
1. InterfaceとPeer、それぞれの設定項目
ShadowrocketのWireGuard設定には、本機の識別情報やアドレスと、接続先のリモート情報があります。一般的なWireGuard設定ファイルでは、[Interface]と[Peer]のセクションに分かれています。手動で追加するときは、記載順に貼り付けるのではなく、各項目の意味に合わせて入力してください。
Private Keyは本機の識別に使う秘密鍵です。PeerのPublic Keyはリモート側を識別するために使います。Addressは本機に割り当てられたトンネル内のアドレスで、Endpointはネットワーク上の接続先サーバーのドメインまたはIPアドレスとポートです。両者を取り違えないようにしてください。
項目の対応:本機のInterfaceとリモート側のPeer
Interface(本機側)
- PrivateKey:本機の秘密鍵。本機の識別に使います。
- Address:トンネル内で本機に割り当てられるIPv4またはIPv6アドレス。
- MTU:トンネルインターフェースで扱うIPパケットの最大サイズ。
- DNS:設定に含まれている場合、DNSサーバーの情報を示します。
Peer(リモート側)
- PublicKey:リモート側の公開鍵。本機の公開鍵ではありません。
- Endpoint:リモートホストのアドレスとUDPポート。
- PresharedKey:双方で共有する任意の事前共有鍵。
- AllowedIPs:Peerに対応するトンネルルートとアドレス範囲。
まず項目がどちら側のものかを確認してから入力します。PeerのPublic Keyに本機の公開鍵を入力しないでください。
サービス提供元から受け取る情報は、設定ファイル全体、QRコード、既存のサブスクリプション内の項目、個別のパラメーターなどさまざまです。ここでは手動入力を中心に説明します。画面に表示される項目はアプリの画面構成によって異なります。個別の入力欄がないパラメーターを、名前が似ている別の項目に入力しないでください。現在の取り込み方法にその設定が適しているか、確認しましょう。
2. HomeからWireGuardサーバーを追加する手順
入力を始める前に、元の設定情報をすべて保存しておきましょう。サービス提供元の管理画面に本機の公開鍵しか表示されず、秘密鍵がない場合は、その識別情報を設定するための情報がそろっていません。公開鍵から秘密鍵を復元することはできません。
-
元の設定情報を準備する
利用中のサービス提供元から必要な情報を入手します。InterfaceのPrivateKeyとAddress、PeerのPublicKeyとEndpointを確認してください。PresharedKeyがある場合は、それも保存しておきます。
-
プロトコルを選択する
Home(ホーム)→右上の「+」→Type(タイプ)→WireGuardの順に進みます。通常のサーバーアドレス欄に設定ファイル全体を貼り付けるのではなく、WireGuardの項目を新規作成していることを確認してください。
-
接続先を入力する
Endpointのホスト名をAddress(サーバーアドレス)または該当するホスト欄に、ポートをPort(ポート)に入力します。たとえば架空の接続先
wg.example.com:51820は、wg.example.comと51820に分けます。Webのプロトコルを示すプレフィックスは付けません。 -
識別情報を入力する
WireGuardの各項目に、本機のPrivate Key、リモート側のPublic Key、トンネルアドレスを入力します。Preshared Key(事前共有鍵)は、元の設定に含まれている場合のみ入力してください。別の鍵で代用してはいけません。
-
保存して接続を確認する
保存したらHomeに戻り、作成した項目を選択して接続を有効にします。現在のGlobal Routing(グローバルルーティング)の設定とテストに使うネットワークを記録し、自分がアクセス権を持つ接続先で実際の通信を確認してください。接続スイッチがオンになったことだけでは、動作確認になりません。
3. Private Key、Public Key、事前共有鍵
WireGuardの秘密鍵と公開鍵は決まった形式でエンコードされており、通常は32バイトのデータを表すBase64文字列です。一般的な長さは44文字です。長さが合っていても、一部のコピー間違いを除外できるだけで、その鍵が現在のサーバーに対応することや、双方の認証が完了していることは確認できません。
本機の秘密鍵から本機の公開鍵が生成され、サーバーは通常、その公開鍵でクライアントを識別します。本機で秘密鍵を新しく生成すると、対応する公開鍵も変わります。サーバーに古い公開鍵が登録されたままでは、以前と同じ識別情報でハンドシェイクできません。「鍵を再生成する」ことを万能な解決策として扱わないでください。
| 項目 | 入力する内容 | よくある間違い |
|---|---|---|
Private Key |
本機の識別情報に割り当てられた秘密鍵。通常はInterfaceセクションにあります。 | 本機の公開鍵をコピーしている、または別のデバイスの秘密鍵を誤って使っている。 |
Public Key |
リモート側Peerの公開鍵。通常はPeerセクションにあります。 | 本機の公開鍵を入力している、またはPublicKey =の部分も含めて貼り付けている。 |
Preshared Key |
元の設定で指定されている追加の共通鍵。双方で同じ値を使います。 | 元の設定にない鍵を自分で生成している、またはログインパスワードで代用している。 |
コピーするのは等号の右側の値だけです。前後の空白や改行は取り除き、鍵自体の文字は変更しないでください。末尾にある場合の=も残します。エンコードに含まれる+を空白とみなしたり、大文字・小文字を手動で変更したりしないでください。鍵はユーザー名、ログインパスワード、サブスクリプションURLではありません。
- Private KeyとPreshared Keyは機密情報として管理し、公開スクリーンショットや問い合わせ内容に載せないでください。
- 問題を報告する際は、項目名、エラーの内容、アドレスの種類を一部伏せて伝えれば十分です。秘密鍵全体を共有する必要はありません。
- 秘密鍵が漏えいした場合は、サービス提供元に古い識別情報を無効化してもらい、新しい情報を発行してもらってください。項目名を変更するだけでは安全になりません。
4. Address、Endpoint、DNSの入力範囲
InterfaceのAddressには、架空の値10.66.0.2/32のようにCIDR(アドレスプレフィックス)の長さが付くことがあります。/32はIPv4の単一ホストアドレスを示します。IPv6の単一アドレスでは/128が一般的です。これはポートでもサーバーのパブリックアドレスでもありません。画面上でアドレスとプレフィックスを分けて入力する場合は、それぞれ対応する欄に入力し、スラッシュ後の数値をPortに入れないでください。
本機側の架空の設定例
- Address
10.66.0.2/32- IPv6 Address
fd42:66::2/128- DNS
10.66.0.1- MTU
1420(パラメーター例)
これらの数値は本機側の項目構成を示す例であり、サービス提供元の割り当て方法を推測する根拠にはなりません。
リモート側の架空の設定例
- Endpoint
wg.example.com:51820- Host
wg.example.com- Port
51820(UDPポート)- IPv6 Endpoint
[2001:db8::10]:51820
IPv6の接続先全体を記述する場合は、角括弧でホストとポートを区別します。欄が分かれている場合は、画面の入力形式に従ってください。
WireGuardはUDPで通信します。51820はよく使われるポートの例ですが、すべてのサービスで使われるわけではありません。実際のポートは元の設定で確認してください。現在のネットワークからそのUDPポートに接続できない場合、数値を443に変えても自動的に接続できるようにはなりません。リモート側がそのポートで実際にサービスを提供している必要があります。
DNS(ドメイン名の名前解決)は、2つの段階に分けて考えます。Endpointがドメイン名の場合、トンネルを確立する前に名前解決できる必要があります。トンネル内のドメイン名の問い合わせは、Shadowrocketの現在のDNS設定や構成の影響を受けます。元のWireGuard設定にあるDNSは関連するDNS情報ですが、サーバー項目を手動で作成しただけで、設定ファイルのDNS行が自動適用されるとは限りません。
- Endpointの名前解決に失敗する場合は、ドメイン名のスペル、現在のネットワークのDNS、サービス提供元から指定されたホストが有効かを確認してください。
- トンネル内のDNSアドレスを指定する場合は、まずトンネルが使えることと、そのアドレスにトンネル経由で到達できることを確認してください。
- IPv6アドレスを使う場合は、現在の設定とリモート側の双方が対応していることを確認してください。IPv6アドレスを入力するだけでは、リモート側の対応状況は変わりません。
5. MTUの意味と調整手順
MTU(最大伝送単位)は、トンネルインターフェースで扱えるIPパケットの最大サイズを示します。WireGuardのカプセル化では追加のオーバーヘッドが発生するため、トンネルのMTUは通常、下位リンクのMTUより小さくなります。下位MTUが1500の場合、外側のIPv4ヘッダーは約60バイト、IPv6ヘッダーは約80バイトを占めます。1420は一般的な値の一つですが、すべてのネットワーク経路に適用できるわけではありません。
MTUが大きすぎると、小さなリクエストは通る一方で大きな応答が止まったり、一部のページが最後まで読み込まれなかったりすることがあります。これは調査の手掛かりであり、MTUが原因だと断定できる症状ではありません。DNS、リモート側の出口、UDPのパケットロス、ルールの選択でも似た現象が起こります。鍵と接続先が正しいことを確認してから調整してください。
サービス提供元指定のMTUを使う
推奨元の設定にMTUが明記されている場合は、まずその値を入力します。指定がなければアプリの既定の処理を維持し、再現可能な接続状態を確認してください。経験だけを頼りに複数の項目を同時に変更しないでください。
適しているケース:初回設定、指定値が明確、接続に問題がない
1420を比較用に試す
原因を調べる必要があり、画面で設定できる場合に限り、1420を比較用のテスト値として試します。一般的なトンネルMTUの値であり、速度設定ではありません。現在の経路に合うとは限りません。
適しているケース:MTUの指定がなく、変更項目を一つに絞って比較したい
一時的に1380に下げる
1420で小さなリクエストは通るものの、大きなデータ転送が繰り返し停止する場合は、一時的に1380に変更して比較できます。保存するたびに接続を再確立し、同じ接続先でテストしてください。改善しなければ元の値に戻します。
適しているケース:基本設定の誤りを除外した後の経路調査
「ネットワークの種類、MTU、テスト先、成功または失敗」の4項目を記録すると、比較に役立ちます。たとえば同じWi-Fiで1420と1380をそれぞれ試し、続けてモバイル通信でも確認します。これはテスト方法の例であり、特定の回線で実測した結果ではありません。一度ページが開けたからといって最適なMTUと判断したり、1回の速度テストだけで評価したりしないでください。
6. AllowedIPsとGlobal Routingは別の設定
標準的なWireGuard設定におけるAllowedIPs(許可するIP範囲)は、Peerのトンネルルート選択に使われ、Peerから受信する送信元アドレスも制限します。たとえば0.0.0.0/0はすべてのIPv4アドレス範囲、::/0はすべてのIPv6アドレス範囲を示します。Shadowrocketのドメインルールとは別の設定であり、Rule(ルール)欄にそのまま貼り付けるものではありません。
Shadowrocketでは、選択したサーバーにどのリクエストを渡すかもアプリ側で設定する必要があります。鍵とEndpointが正しくても、Global RoutingがDirect(直接接続)なら、通信は想定どおりWireGuardの項目に送られません。Config(設定)では有効な構成ファイルのルールが使われるため、該当するルールの最終的な接続先も確認してください。
- Proxy(プロキシ):アプリが処理するリクエストをプロキシ経由で扱います。サーバー側の問題とルーティングの問題を一時的に切り分ける際に使えますが、デバイス上のすべてのシステム通信が同じ経路を通るとは限りません。
- Direct(直接接続):リクエストを直接接続として処理します。選択したWireGuardの出口が使われているかを確認する方法としては適していません。
- Config(設定):現在の構成ファイルのルールに従って接続先を選びます。WireGuardの項目を選択しても、すべてのリクエストがそこに送られるとは限りません。
- Scene(シーン):設定済みのシーンに応じてルーティングします。問題を調べる際は、シーンで実際に選択されている内容を確認してください。モード名だけを見て判断しないようにしましょう。
以下はルール構文の例であり、そのまま有効化できる完全な設定ではありません。PROXYは現在の構成で利用できるポリシーまたはポリシーグループに対応し、最終的に使用するWireGuardの項目が選択されている必要があります。ルールは上から順に評価され、最初に一致したルールが適用されます。
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.0.2.0/24,DIRECT
GEOIP,CN,DIRECT
FINAL,PROXY
DOMAIN-SUFFIX(ドメインサフィックス)は指定したドメインとそのサブドメインに一致します。IP-CIDR(IPアドレス範囲)は対象のアドレス範囲に一致します。GEOIP(IP地理分類)はIPデータベースの分類に基づいて一致します。FINAL(最終ポリシー)は、それ以前のルールに一致しなかったリクエストに適用されます。例に使われているドキュメント用アドレス範囲は構文の説明用で、実際の通信先ではありません。
7. 保存後も接続できない場合の確認方法
「項目がそろっているか → 接続先に到達できるか → 鍵の識別情報が一致しているか → リクエストがそのサーバーに送られているか → DNSとMTU」の順に確認します。一度に変更するのは一項目だけにし、元の値を記録してください。接続スイッチがオンでも、ローカルの接続機能が起動したことしか分からず、リモートとのハンドシェイク成功や通信可能な出口を証明するものではありません。
Private Keyを入力しても使えないのはなぜ?
Homeに戻り、該当項目の編集画面で、鍵の値だけをコピーしているか、前後に空白がないかを確認します。続けてPeer Public Keyがリモート側の公開鍵であることも確認してください。本機の秘密鍵を再生成した場合は、サービス提供元に登録されているクライアント公開鍵も更新されたか確認します。新しい鍵を何度も生成して試さないでください。
接続をオンにしても通信結果が変わらない
Homeで新しく作成したWireGuardの項目が選択されていることを確認し、Global Routingも確認します。Configを使っている場合は、Configで現在有効なファイルを確認し、テスト先に適用されるポリシーを調べてください。短時間だけProxyに切り替えて比較し、診断後は元のルーティング設定に戻します。
Wi-Fiではつながらず、モバイル通信ではつながる場合、何を確認する?
鍵とトンネルアドレスは変更せず、まずEndpointの名前解決、指定されたUDPポートへの到達性、ネットワーク上の制限を比較します。小さなリクエストは成功する一方で、大きなデータ転送が止まるなどの兆候がある場合に限り、MTUを比較してください。ネットワークを切り替える際に、鍵、DNS、ポートを同時に変更しないでください。
同じ設定を2台のデバイスで同時に使える?
まず、サービス提供元がデバイスごとに個別の識別情報を割り当てているか確認します。2台で同じ秘密鍵とトンネルアドレスを同時に使うと、リモート側で同一Peerの応答先が直近にパケットを送ったデバイスへ切り替わり、接続が互いに干渉することがあります。並行して使う場合は、それぞれ別の鍵ペアとアドレスを取得してください。
設定後に保存しておく項目
- 元の設定情報と、対応するデバイスの説明を保存します。機密性の高い鍵は安全な場所で管理してください。
- サーバーのホスト名、UDPポート、トンネルアドレス、確認済みのMTUを記録します。認証情報全体は公開しないでください。
- 既存のサブスクリプションから追加した項目は、更新時に手動変更が上書きされるか確認してください。一時的な診断用の値を、サービス提供元の正式な設定として扱わないでください。
- テスト後はGlobal RoutingとOn Demandを元の設定に戻し、普段使う通信をもう一度確認してください。
ShadowrocketはAppleプラットフォーム向けのクローズドソースの有料アプリです。主にiPhoneとiPadで利用でき、入手先はApp Storeのみです。システム要件はApp Storeの掲載内容をご確認ください。アプリの買い切り購入に回線プランは含まれません。この記事では、利用者がサービス提供元と設定情報をすでに用意していることを前提としています。アプリを購入しても、Private Key、Peerの公開鍵、リモート側の接続情報は提供されません。