Shadowrocketのリンク形式と使い方|ss://・vmess://・vless://・trojan://・サブスクリプションを解説

ss://・vmess://・vless://・trojan://の共有リンクを解説。単体リンクとサブスクリプションの違いや、Add ServerとSubscribeでの使い分けを紹介します。

この記事の概要

Shadowrocketの単体共有リンクは1つの接続設定を表し、サブスクリプションURLは複数の設定を取得・更新するために使います。すでに利用中のサービスから接続情報やサブスクリプションを入手している方に向けて、リンクのプレフィックスを見分け、アドレス、ポート、認証情報、通信方式を確認する手順を解説します。単体設定はAdd Serverで、サブスクリプションはSubscribeで登録します。例に使うのはexample.comと説明用の認証情報のみです。形式の説明を目的としており、実際の接続には使えません。

1. 共有リンクとサブスクリプションURLの違い

ss://、vmess://、vless://、trojan://で始まる文字列は、通常、1つの接続設定を共有する形式です。プロトコルに必要な情報をコピー可能な文字列にまとめています。読み込むと、Shadowrocketは各項目をHomeの接続設定として保存します。名前は設定を見分けるためのメモであり、アドレス、ポート、認証情報の代わりにはなりません。

サブスクリプションURLは通常、https://で始まります。ShadowrocketがURLにアクセスし、サーバーから返された内容を読み込んで、その中の接続設定を解析します。そのため、サブスクリプションURL自体は特定のプロキシプロトコルではありません。1つのサブスクリプションに複数のプロトコルの設定が含まれることもあります。通常のWebページもHTTPSで始まる場合がありますが、ブラウザーで開けるからといってSubscribeに登録できるとは限りません。

4種類
この記事で解説する共有リンクのプレフィックス:ss / vmess / vless / trojan
8388
以下のShadowsocksのポート番号は例であり、固定値ではありません
443
以下のTLSのポート番号は例です。実際の値は利用中のサービスによって異なります

2. ss://:認証情報とサーバーアドレス

Shadowsocksでよく使われるSIP002形式の共有リンクでは、暗号化方式とパスワードをmethod:passwordの形にし、Base64URLでエンコードして@の前に配置します。その後にサーバーアドレスとポートが続きます。以下の例では、認証部分をデコードするとaes-128-gcm:testになります。testは説明用のパスワードです。

ss://[email protected]:8388#SS%20Demo
位置例確認方法
プロトコルのプレフィックスss://Shadowsocksを示します。HTTPSアドレスではありません。
認証情報YWVzLTEyOC1nY206dGVzdAデコードすると暗号化方式とパスワードが得られます。読み込み後、それぞれを確認します。
サーバーexample.com:8388ドメイン名とポートの両方が、利用中のサービスの設定と一致している必要があります。
メモ#SS%20Demo%20は空白を表し、表示名はSS Demoです。

以前の形式では、method:password@host:port全体をエンコードし、ss://の後ろに配置する場合もあります。この形式では、エンコードされた文字列の外側に@が見えませんが、それだけでサーバーアドレスが含まれていないとは判断できません。プラグイン情報をクエリパラメーターで指定するリンクもあります。利用中のサービスでプラグインが必要な場合、暗号化方式、パスワード、ポートだけを設定しても不十分です。

  • 認証情報がランダムな文字列に見えても、サブスクリプションURLとは限りません。単にエンコードされた設定項目の可能性があります。
  • Base64URLでは、通常のBase64で使われる一部の文字を-や_に置き換えます。末尾のパディングが省略される場合もあるため、手作業で書き換えないでください。
  • 暗号化方式はサーバー側の設定と一致させる必要があります。ポートに8388と書かれていても、すべてのShadowsocksサービスでそのポートを使うわけではありません。

3. vmess://:JSONをエンコードした形式

一般的なVMess共有形式は、vmess://の後ろにBase64でエンコードしたJSONを続けます。前述のShadowsocksの例とは異なり、サーバーアドレスは通常、リンク末尾に直接記載されず、JSONのaddフィールドに含まれます。以下はデコード後の構造を示したもので、Subscribeにそのまま貼り付けられるURLではありません。

{
  "v": "2",
  "ps": "VMess Demo",
  "add": "example.com",
  "port": "443",
  "id": "00000000-0000-4000-8000-000000000000",
  "aid": "0",
  "scy": "auto",
  "net": "tcp",
  "type": "none",
  "host": "",
  "path": "",
  "tls": "tls",
  "sni": "example.com"
}

vは共有形式のバージョンを示すもので、Shadowrocketのアプリバージョンではありません。psはメモ、addとportは接続先、idはUUID形式の認証情報、aidはAlter IDに対応します。例にある全桁がゼロのUUIDは形式を示すためのものです。実際には、利用中のサービスから提供された完全な値を使ってください。認証エラーはメモを変更しても解決しません。

  • netは通信方式を示します。利用中の設定でWebSocketを使っている場合は、通常、hostとpathも確認が必要です。上記のTCPの例をそのまま適用しないでください。
  • tlsとsniはTLSの設定に関係します。接続先アドレスとTLSのserver nameは異なる場合があるため、元の設定どおりに保持してください。
  • scyはVMessの暗号化設定を示します。TLSとは別の項目であり、相互に置き換えることはできません。
  • エンコードされた文字列にはパディング文字が含まれる場合や、転送時に改行が挿入される場合があります。元の完全なリンクをコピーし、先頭の1行だけを使ったり、リンクを囲む引用符までコピーしたりしないでください。

4. vless://とtrojan://:似た形式、異なる認証方式

VLESSとTrojanの共有リンクは、どちらもURIに似た構造です。プレフィックスの後ろに認証情報、@の後ろにサーバーアドレスとポート、?の後ろにクエリパラメーター、#の後ろにメモが続きます。形式が似ていても、プレフィックスを書き換えるだけでは使えません。VLESSでは通常UUID、Trojanではパスワードを使い、サーバー側のプロトコルも一致している必要があります。

vless://[email protected]:443?encryption=none&security=tls&type=tcp&sni=example.com#VLESS%20Demo

trojan://[email protected]:443?security=tls&type=tcp&sni=example.com#Trojan%20Demo
項目VLESSの例Trojanの例
認証UUIDパスワード demo-password
接続先example.com:443example.com:443
通信方式type=tcptype=tcp
TLSsecurity=tlssecurity=tls
server namesni=example.comsni=example.com

VLESSの例にあるencryption=noneはプロトコルの項目であり、この接続でTLSを使っていないという意味ではありません。クエリパラメーターにはWebSocketのパス、Host、flow、その他の通信設定が含まれる場合があります。項目名の規則は共有形式によって異なることがあります。読み込み後も、設定を開いて元の内容が保持されているか確認してください。

  • パスワードに@、#、?などの予約文字が含まれる場合は、URIの規則に従ってエンコードしてください。エンコードしないと、項目の区切りとして誤認されることがあります。
  • IPv6アドレスは、URIでは通常、角括弧で囲んでからポートを続けます。アドレス内のコロンとポートの区切りを混同しないためです。
  • メモは識別しやすい名前に変更できますが、UUID、パスワード、SNI、パスは名前から推測してはいけません。
  • 443は例示用のポート番号です。TLSの有無、使用するポート、証明書に対応するserver nameは、いずれも利用中のサービスによって異なります。

5. Add ServerとSubscribeの使い分け

最初に、受け取ったものが単体の共有リンクかサブスクリプションURLかを確認し、適切な入口を選びます。Homeでは接続設定、Configでは設定ファイル、Settingsではアプリの設定を管理します。サブスクリプションURLを通常の接続設定のサーバー欄に入力しても、自動的にサブスクリプションとして解析されることはありません。

  1. プレフィックスを確認

    文字列の先頭を確認します。4種類のプロトコルのプレフィックスは単体の共有リンクとして扱います。HTTPSのURLは、アカウント用のWebページではなく、利用中のサービスから提供されたSubscribe用URLかどうかを確認してください。

  2. 単体設定を確認

    Homeの右上にある「+」をタップしてAdd Serverを開きます。手動で追加する場合は、Typeで該当するプロトコルを選び、利用中の設定に従ってアドレス、ポート、認証情報を入力します。共有リンクから読み込んだ場合も、設定を開いて各項目を確認してください。

  3. サブスクリプションを追加

    Home →「+」→ Add Serverを開き、TypeをSubscribeに設定します。自分が利用しているサブスクリプションURLをURL欄に入力し、識別しやすいメモを付けて保存してください。単体のss://リンクをサブスクリプションURL欄に入力しないでください。

  4. 更新を確認

    Homeに戻り、画面を下に引いてサブスクリプションを更新し、設定が表示されるか確認します。更新後は件数、プロトコル、重要な項目を確認してください。サーバー側で内容が変更されている場合、一覧も変わることがあります。

  5. 接続を確認

    テストする設定を選び、システムの案内に従ってVPN構成を許可して接続を開始し、実際の通信を確認します。項目の解析、サブスクリプションの更新、目的のWebサイトへのアクセスは、それぞれ別の結果です。個別に確認してください。

https://example.com/sub?token=xxxx

上記のURLはHTTPSサブスクリプションの形式を示す例であり、実際に使えるURLではありません。実際のURLでは、パス、パラメーター、tokenを含めて完全な状態を保ち、不要に見えるクエリパラメーターも削除しないでください。サブスクリプションの更新によって、サブスクリプション管理下の設定が置き換わることがあります。手動で変更した設定を長く使う場合は、元の値を記録し、更新後の状態も確認してください。

6. 読み込み後はプロトコルではなくGlobal Routingを確認

リンクで決まるのは「サーバーへの接続方法」、Ruleで決まるのは「リクエストに適用するポリシー」です。接続設定が接続できても、リクエストが意図した経路を通らない場合は、Home → Global Routingを確認してください。以下の推奨設定は、既存のルールを使う日常的な利用方法に関するものであり、プロトコルやサービスを推奨するものではありません。

Config

推奨

現在の設定に従ってリクエストを処理します。Configで有効な設定と、Ruleの順序および適用先のポリシーを確認してください。設定でDIRECTが指定されたリクエストは、接続設定を選んだだけでは自動的にプロキシ経由になりません。

適した用途:ルールが設定済みで、接続先ごとにリクエストを振り分けたい場合。

Proxy

プロキシ経由のルーティングを使い、Ruleによる振り分けがテストに影響しているかを一時的に切り分けます。切り替える前に、選択中のプロキシまたはポリシーグループを確認してください。テスト後は元のルーティング設定に戻します。

適した用途:接続項目を確認済みで、ルールの問題を切り分けたい場合。

Direct

直接接続のルーティングを使います。この状態でWebページが開いても、読み込んだプロキシ設定が使える証明にはなりません。プロキシ経由の接続をテストする場合は、対応するルーティングに明示的に切り替えてください。

適した用途:直接接続時の通信状況を一時的に確認する場合。

Global RoutingのSceneはシーン設定に使います。アプリ内で対応するシーン条件を確認し、共有リンクのプロトコルパラメーターと混同しないでください。Settings → On Demandではオンデマンド接続の動作を管理しますが、リンクにないUUID、パスワード、通信パスを補うことはできません。各項目の詳細は設定項目の解説、基本用語は用語一覧をご覧ください。

[Rule]
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT

この例はルールの順序だけを示しています。example.comとそのサブドメインへのアクセスにはPROXYを使い、ほかのルールに一致しないリクエストはFINALによってDIRECTにします。DOMAIN-SUFFIXはドメインの末尾に基づいて一致します。GEOIPとIP-CIDRはIP関連のルールであり、共有リンクの認証情報には記述できません。リンクのメモをPROXYに変更しても、振り分けルールは作成されません。

7. 形式エラー、更新失敗、認証情報の保護

コピー後に形式エラーが出たら、まずどこを確認する?

まず、先頭まで正しくコピーされているか確認し、空白、改行、日本語の句読点、メッセージ中の説明文が混ざっていないかを調べます。VMessの場合は、エンコードされた文字列全体をコピーしているか確認します。VLESSとTrojanの場合は、@の後ろにアドレスとポートが残っているか確認してください。プロトコルのプレフィックスを書き換えて、無理に読み込ませないでください。

サブスクリプションURLは開けるのに設定が表示されない場合は?

Home →「+」→ TypeがSubscribeになっているか、URLにサブスクリプションURL全体が入力されているか確認します。ログインページ、エラーページ、通常のHTMLを返すURLは、有効なサブスクリプションとは限りません。利用中のサービスの管理元に返却内容の形式を確認し、Homeで再度更新してください。

サブスクリプションの更新がタイムアウトするときは?

まず、ネットワークのタイムアウトか、サーバーから返された認証エラーかを区別します。利用可能な接続設定がある場合は、Settings → SubscribeでUpdate via Proxyを確認してから、Homeに戻って更新します。この設定で変わるのはサブスクリプションのリクエスト経路のみです。無効なtoken、誤ったURL、サーバー側の問題は解決できません。

読み込みは成功したのにアクセスできない場合は?

設定を開き、プロトコル、アドレス、ポート、認証情報、TLS server name、通信パラメーターを順に確認してから、Home → Global Routingを確認します。ルーティングを切り替えて動作が変わる場合は、ConfigのRuleを確認してください。どのルーティングでも接続を確立できない場合は、ポートをむやみに変更せず、利用中のサービスの設定と照合してください。

問い合わせ用のスクリーンショットでは、何を隠す?

パスワード、UUID、サブスクリプションURL全体、tokenを隠し、完全なQRコードも公開しないでください。QRコードは通常、共有リンクの文字列を別の形で表したものです。認証情報を公開してしまった場合は、利用中のサービスの管理画面から該当する認証情報をリセットし、Shadowrocketの設定も更新してください。

Shadowrocketの入手先と確認方法

ShadowrocketはAppleプラットフォーム向けの有料クライアントです。入手先はApp Storeのみです。デベロッパ名がShadow Launch Technology Limitedであること、公式アイコン、アプリIDが932747118であることを確認してください。クライアントの買い切り購入は、接続サービスのプランとは別です。システム要件はApp Storeのページで確認してください。初期設定には、すでに利用しているサービスの情報を使ってください。

App Storeの正規ページを確認 使い方を見る
App Storeで正規版を確認購入と復元の手順を見る