この記事は、すでに自身のサービス設定やサブスクリプションを持っていて、リンク形式を見分けたい方を対象としています。まずサーバー情報を含む単体リンクと、設定を取得するリモートURLを区別し、次に4種類の共有リンクに含まれる認証・通信・TLSの項目を確認します。最後に、インポート・更新・接続の各段階で問題を切り分けます。例はすべて実際の接続には使えないダミーデータで、接続先などのサービス情報は提供しません。
1. リンクのプレフィックスは解析方法を示すもので、接続品質を表すものではない
Shadowrocketでリンクを受け取ると、まずサーバー情報なのか、設定取得用のリモートURLなのかを判別します。ss://、vmess://、vless://、trojan://は通常、1件分のサーバー情報を含みます。一方、https://で始まるサブスクリプションURLはリモートのコンテンツを指しており、クライアントがリクエストを送信し、応答を取得してから中の情報を解析します。
| リンク形式 | 主な内容 | その後の変更方法 |
|---|---|---|
ss:// | Shadowsocksの暗号化方式、パスワード、アドレス、ポートなど | 再インポートまたは手動編集 |
vmess:// | 一般的にはBase64エンコードされたVMess JSONパラメーター | 再インポートまたは手動編集 |
vless:// | VLESSのUUID、アドレス、通信方式、安全性に関するパラメーター | 再インポートまたは手動編集 |
trojan:// | Trojanのパスワード、アドレス、TLS、通信方式に関するパラメーター | 再インポートまたは手動編集 |
| HTTPSサブスクリプションURL | リモート設定への入口と、場合によってはアクセス用token | サブスクリプションを更新してリモートの内容を取得 |
HTTPSのURLからはウェブページ、ログインページ、その他のファイルが返されることもあります。そのため、ブラウザーで開けるからといってサブスクリプションとしてインポートできるとは限りません。反対に、共有リンクのポートが443でも、それだけでTLSが有効だとは判断できません。プロトコル、ポート、通信の安全性はそれぞれ別の項目なので、まとめて確認してください。
2. ss://:暗号化方式とパスワードを確認する
Shadowsocksの共有リンクは、一般にSIP002の基本形式に従います。認証情報は@より前、サーバーアドレスとポートは後ろに記載され、#以降には名前を付けられます。認証情報は通常、method:passwordをURL-safe Base64でエンコードしたものです。以前は、さらに長い部分全体をエンコードする形式も使われていたため、文字列の見た目だけで有効かどうかを判断できません。
ss://[email protected]:8388#Demo-SS
YWVzLTEyOC1nY206dGVzdAをデコードするとaes-128-gcm:testになります。暗号化方式はaes-128-gcm、パスワードはデモ用のtestです。example.comはデモ用のサーバーアドレス、8388はデモ用のポートです。すべてのShadowsocksサービスで固定されているポートではありません。Demo-SSは表示名です。名前を変えても、アドレス、パスワード、暗号化方式の誤りは修正されません。- 元のリンクに
pluginクエリパラメーターが含まれている場合、プラグイン設定を指定している可能性があります。リンクを短くするために安易に削除せず、該当機能がサポートされているかも確認してください。
Base64はエンコード方式であり、認証情報を秘匿するものではありません。リンク全体を持つ人は、通常その中のパスワードを復元できます。元のリンクを公開のデコードサイトに貼り付けないでください。内容を確認する場合は、Shadowrocketにインポートした後の編集項目を参照し、自分がすでに持っている設定と一つずつ照合してください。
3. vmess://:外側のエンコードと内側のJSONを分けて確認する
一般的なVMess共有形式では、vmess://の後にBase64エンコードされたJSONが続きます。以下はデコード後のデモデータで、URL欄にそのまま貼り付けられる完全な共有リンクではありません。エクスポート元によって項目の組み合わせが異なる場合があるため、解析結果は実際のインポート内容で確認してください。
{
"v": "2",
"ps": "Demo-VMess",
"add": "example.com",
"port": "443",
"id": "00000000-0000-4000-8000-000000000001",
"aid": "0",
"scy": "auto",
"net": "ws",
"type": "none",
"host": "example.com",
"path": "/demo",
"tls": "tls",
"sni": "example.com"
}
add、port、idは、それぞれサーバーアドレス、ポート、UUIDを表します。ここに記載したUUIDはデモ用です。net: wsはWebSocketを表します。hostとpathは、この通信設定の一部です。tls: tlsは、この例でTLSが有効であることを示します。sniはハンドシェイクで使用するサーバー名を指定します。WebSocketのHostとは別のプロトコル項目です。aidは旧形式で使われていたAlter IDの項目です。この値を適当に増減しても、認証エラーは解決しません。
例にあるvは共有リンク形式の項目であり、Shadowrocketのバージョンではありません。インポート後は、名前とサーバーアドレスが正しくても、通信方式、TLS、Host、Pathを引き続き確認してください。スラッシュの不足、Pathの大文字・小文字の誤り、SNIの不一致などにより、「項目は追加されたがハンドシェイクに失敗する」ことがあります。
4. vless://とtrojan://:クエリパラメーターは一部だけコピーしない
VLESSとTrojanの共有リンクは、一般的なURIに近い形式です。認証情報、アドレスとポートの順に記載し、疑問符の後に追加パラメーターを指定します。以下の例はどちらもTLSを使用していますが、認証方式は異なります。プレフィックスだけを置き換えて別のプロトコルとして使うことはできません。
vless://[email protected]:443?encryption=none&security=tls&type=tcp&sni=example.com#Demo-VLESS
trojan://[email protected]:443?security=tls&type=tcp&sni=example.com#Demo-Trojan
| 項目 | 意味 | 確認ポイント |
|---|---|---|
@より前の部分 | VLESSではUUID、Trojanではパスワードを使用 | 表示名を認証情報と取り違えない |
encryption=none | VLESSのプロトコル層には、この層の追加暗号化はない | 外側のTLSが無効という意味ではない |
security=tls | TLSのセキュリティ層を指定 | SNI、証明書、サーバー設定をあわせて確認 |
type=tcp | ここではTCP通信を指定 | 実際の設定がWebSocketなら、この値をそのまま使わない |
sni=example.com | TLSハンドシェイクで使用するサーバー名 | アドレスがIPでも省略できるとは限らない |
URL内の&はパラメーターを区切り、#はメモを示します。パスワード、パス、メモに予約文字が含まれる場合は、URI内での位置に応じてパーセントエンコードしてください。たとえば、クエリパラメーター内のパス/demo?mode=1は%2Fdemo%3Fmode%3D1と表せます。リンク全体を重ねてエンコードしたり、本文の改行、日本語の句読点、引用符までコピーしたりしないでください。
5. 単体リンクのインポートとサブスクリプションの更新は別の手順
単体の共有リンクは、ある時点のサーバー情報をコピーしたものです。一方、サブスクリプションURLは再度リクエストできる入口です。以下のURLは構造の説明用で、token=xxxxは明らかなダミー値であり、実際のサービスには対応していません。サブスクリプションから返される内容は、エンコードされたリンク一覧の場合も、その他の対応形式の場合もあります。URLの末尾だけで形式を推測しないでください。
https://example.com/sub?token=xxxx
手元の情報に合わせてインポート方法を選ぶ
単体の共有リンクがある場合
- プロトコルのプレフィックス、認証情報、クエリパラメーター、メモを含め、リンク全体をコピーします。
- Shadowrocketを開き、クリップボードからのインポート通知を確認します。システムからペーストの許可を求められた場合は、操作内容を確認して許可してください。
- Homeで追加された項目を確認し、編集画面でアドレス、ポート、認証情報、通信方式を照合します。
- 元のサーバー設定が変わったら、再インポートするか手動で修正します。この項目にサブスクリプションの更新機能が自動で付くことはありません。
自分のサブスクリプションURLがある場合
- Homeの右上にある
+をタップし、TypeでSubscribeを選択します。 - URL欄にサブスクリプションURL全体を入力し、見分けやすい名前を付けて保存します。
- サブスクリプションを更新し、グループ内のサーバー項目を確認します。
- リモートの内容が変更された後、もう一度更新すると変更がローカルに反映されます。更新後に接続できるかは別途テストしてください。
単体リンクのインポートでは設定情報を保存し、サブスクリプションのインポートではリモートの入口と更新関係を保存します。どちらもサーバー側で有効な利用権限の代わりにはなりません。
サブスクリプションを更新すると、管理対象の項目が追加、置換、削除されることがあります。サブスクリプショングループ内で手動編集した内容を恒久的なバックアップとして扱わないでください。次回の更新でリモートの設定に上書きされる場合があります。変更前に差分を記録し、独立した設定を残したい場合は、サブスクリプション管理対象外の項目を使い、変更も自分で管理してください。
サブスクリプションのtokenは、アクセス認証情報として機能することがよくあります。問題を調べる際は、応答ステータス、エラーメッセージ、発生した段階だけを記録し、URL全体を公開しないでください。漏えいした場合は、自分のサービス管理画面で該当tokenをリセットまたは無効化し、新しいURLをShadowrocketに保存してください。
6. インポート後はGlobal Routingで問題の発生段階を切り分ける
共有リンクに記載されるのは主にサーバーへの接続方法であり、完全なルールによる振り分け設定が自動で含まれるわけではありません。Homeではサーバーの選択と接続を管理し、Configではルール設定を管理します。Global Routingを確認する際は、「選択したサーバーにリクエストが送られていない」のか、「サーバーには届いたが接続に失敗した」のかを区別してください。そうしないと、正しいリンクを何度も変更することになりかねません。
Config:現在のルールで通信がどこへ向かうか確認
推奨すでに有効なルール設定がある場合は、ルールに従って通信先を決めます。DOMAIN-SUFFIX、IP-CIDR、GEOIPなどのマッチ条件と、FINALの処理先を確認してください。すべてのリクエストが、インポートしたばかりのサーバーを使うとは限りません。
適しているケース:振り分け設定があり、普段のリクエストが想定したポリシーに一致するか確認したい場合
Proxy:ルールの影響を一時的に切り分ける
クライアントが処理する通信をプロキシモードで扱い、比較テストを行います。誤ったパスワード、UUID、TLS設定は修正されず、システム上のすべての通信がプロキシを通るとも限りません。
適しているケース:Configのルールによってテスト対象のリクエストが別の経路に振り分けられている疑いがある場合
Direct:ローカルネットワークの基準状態を確認
クライアントが処理する通信を直接接続します。ローカルネットワークが正常か確認できますが、このモードでウェブページが開いても、インポートしたサーバーが使える証明にはなりません。
適しているケース:ローカルネットワークの状態と比較し、基本的な接続障害を切り分けたい場合
まとめ:「解析 → 更新 → ハンドシェイク → 振り分け」の順に確認
項目が作成されない場合はリンク全体を確認します。サブスクリプション一覧を取得できない場合はURLと応答を確認します。項目があるのに接続できない場合は認証情報とTLSを確認し、接続後に特定のリクエストで問題が起きる場合は、最後にGlobal Routingとルールを確認してください。一度に変更するのは1項目だけにし、テスト後は元のモードに戻します。
7. よくある質問と対処方法
リンクをコピーしたのに、インポート通知が表示されないのはなぜですか?
まず、クリップボードの内容がss://などの完全なプレフィックスから始まっているか確認し、外側の引用符、チャットアプリが追加した説明文、途中の改行を取り除きます。次に、システムが今回のペーストを拒否していないか確認してください。HTTPSサブスクリプションは、Home → + → Type → Subscribeから手動で入力できます。サーバーの共有リンクをサブスクリプションURLとして入力しないでください。
サブスクリプションの更新は成功したのに、サーバーに接続できないのはなぜですか?
更新成功は、サブスクリプションの取得と内容の解析ができたことを示すだけで、各サーバーの接続テストに成功したことを意味しません。Homeで該当項目を選び、ポート、認証情報、通信方式、TLSを確認してください。また、サーバー側で項目が無効化されていないかも確認します。サブスクリプションの取得成功とプロキシのハンドシェイク成功は別の結果です。
サブスクリプションの更新で401、403、またはウェブページが返される場合は?
401は通常認証が必要なことを示し、403は通常リクエストが拒否されたことを示します。具体的な原因は、自分が利用しているサービスの案内を確認してください。tokenが完全か、期限切れでないか、管理画面のURLを誤ってコピーしていないかを確認します。応答がHTMLのログインページなら、自分の管理画面に戻ってサブスクリプションURLを取得し直してください。サーバーのポートを繰り返し変更する必要はありません。
vless://をtrojan://に書き換えれば、そのまま使えますか?
使えません。VLESSのUUIDとTrojanのパスワードは互換性のある認証情報ではなく、サーバー側で待ち受けるプロトコルも異なります。完全な元リンクに戻し、サーバーで実際に使われているプロトコルに合わせて再インポートしてください。どちらも443やTLSを使っているという理由だけで、プレフィックスを置き換えないでください。
インポートできても証明書エラーが出る場合、検証を無効にすべきですか?
まず端末の日付と時刻を確認し、元の設定情報と照らし合わせてSNI、サーバー名、証明書の有効性を確認してください。アドレスにIPを使っている場合は、特にTLSのサーバー名を確認します。証明書検証の無効化を一般的な対処方法にしないでください。本人確認の安全性が低下するうえ、誤ったUUID、パスワード、WebSocket Pathの問題も解決しません。
Shadowrocketの入手方法とインポート手順
iPhone/iPad版はApp Storeから入手でき、価格は2.99米ドルの買い切りです。Mac(Appleシリコン/Intel)、Windows、Android、Linux版は無料です。iPhone/iPadのシステム要件はApp Storeの製品ページでご確認ください。ダウンロードページで端末に合った入手方法を選び、手順に沿ってお手持ちの設定をインポートしてください。
当サイトではサーバー、サブスクリプション、接続サービスの提供・販売・推奨は行っていません。