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

Shadowrocketの共有リンクの構成とエンコード方式を解説。単一の接続リンクとサブスクリプションURLの取り込み方法・更新方法の違いも、example.comの架空例で紹介します。

この記事の概要

この記事は、利用中のサービスから設定情報やサブスクリプションを入手し、iPadまたはiPhoneのShadowrocketに取り込む方を対象としています。リンクのプレフィックスで単一の接続リンクとサブスクリプションを見分け、アドレス、ポート、認証情報、通信パラメータを確認したうえで、取り込み・更新・トラブルの確認方法を説明します。例はすべて実際の接続には使えない架空の値です。当サイトでは接続先、サブスクリプション、その他の接続サービスを提供・販売・推奨していません。

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

単一の共有リンクには、通常、プロトコル、サーバーアドレス、ポート、認証情報など、1つの接続設定が記載されています。一方、サブスクリプションURLは設定情報を取得するための入口です。ShadowrocketがURLにアクセスし、返された内容を解析して1つ以上の項目として登録します。そのため、ss://のリンクを1つコピーする場合と、サブスクリプションURLを保存する場合とでは、取り込む対象も、その後の更新方法も異なります。

入力形式主な内容更新方法
ss://Shadowsocksの接続パラメータ通常は再取り込み、または手動で編集
vmess://VMessのエンコード設定。一般的にはBase64でラップされたJSON通常は再取り込み、または手動で編集
vless://VLESSのUUID、接続先、クエリパラメータ通常は再取り込み、または手動で編集
trojan://Trojanのパスワード、接続先、クエリパラメータ通常は再取り込み、または手動で編集
https://example.com/sub?token=xxxx設定情報を返すURLの例サブスクリプションを更新して再取得

https://で始まるだけでは、サブスクリプションURLとは限りません。通常のWebページ、アカウントページ、サブスクリプションの入口はいずれもHTTPSを使用できます。Subscribeから取り込めるのは、サービス提供元が明示したサブスクリプションURLで、応答内容を使用中のクライアントが解析できる場合です。また、応答に複数の接続先が含まれるとは限りません。1つだけでも、リモート更新の仕組みを利用できます。

判断のポイント:変更を同期するならサブスクリプションを使う

サブスクリプションURLと、そこからコピーした単一リンクの両方がある場合は、用途に応じて選びます。接続項目の変更を同期したいならサブスクリプションを保存し、1つの設定だけを独立して保持するなら単一リンクを取り込みます。コピーした項目が元のサブスクリプションと自動的に連動することはありません。

2. リンクに共通する基本構造を読む

URI形式の共有リンクの多くは、scheme、認証情報、ホストとポート、クエリパラメータ、備考に分けて確認できます。各プロトコルでそれぞれの意味は異なるため、あるプロトコルのユーザー名の位置を、別のプロトコルのパスワードの位置とみなすことはできません。以下ではTrojanを例に構造を説明します。パスワードとアドレスは架空の値です。

trojan://[email protected]:443?security=tls&sni=example.com#Demo-Trojan
8388
以下のShadowsocksの例で使用するポート。固定値ではありません
443
この記事のTLSの例で使用するポート。実際の値は手元の設定に従ってください
1–65535
接続設定で指定できる一般的な宛先ポートの範囲

パーセントエンコードとBase64は別のものです。たとえば備考の空白は%20と表せます。Base64はバイト列を伝送可能な文字列に変換する方式です。どちらも認証情報を暗号化するものではありません。共有リンク、QRコード、サブスクリプションURLにアクセス用の認証情報が含まれる場合があります。公開コメント欄に投稿したり、提供元が不明なオンラインデコードページに貼り付けたりしないでください。

3. ss://:暗号化方式とエンコード範囲を確認する

Shadowsocksで一般的なSIP002形式の共有リンクは、ss://userinfo@host:port#remarkの形式です。一般的なAEAD設定では、userinfoは通常、method:passwordをURL-safe Base64でエンコードしたものです。以下のエンコード部分をデコードすると、aes-128-gcm:demo-passwordになります。

ss://[email protected]:8388#Demo-SS

デコード後の認証情報:
aes-128-gcm:demo-password

サーバー:example.com
ポート:8388
暗号化方式:aes-128-gcm
パスワード:demo-password

また、method:password@host:port全体をエンコードした旧形式のリンクもあります。どちらの形式も「先頭から決まった文字数を切り出す」方法では解析できません。Base64文字列末尾の=によるパディングは省略されることがあり、URL-safe形式では-や_が使われる場合もあります。パディングがないだけでリンクが壊れているとは限りません。

4. vmess://:外側のBase64と内側のJSON

一般的なVMess共有形式では、vmess://の後にBase64でエンコードされたJSONが続きます。この形式では、見た目に@host:portがなくても、アドレスが欠けているわけではありません。アドレスとポートはJSONのフィールドに含まれています。以下は一般的な形式をデコードした内容の一例で、そのまま貼り付けて取り込める完全なURIではありません。

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

この例では、addが接続先アドレス、idが明らかに架空のUUID、netがWebSocket通信方式、pathがWebSocketのパスを表します。hostとsniはそれぞれHTTP HostとTLS SNIに使われる場合があり、接続先アドレスと同じとは限りません。vフィールドはこの共有形式の構造を示すもので、Shadowrocketのアプリバージョンではありません。

5. vless://とtrojan://:似た構造、異なる認証情報

どちらの共有リンクも、内容を読み取りやすいURI形式がよく使われます。VLESSでは通常、@の前にUUIDを置き、Trojanではパスワードを置きます。どちらも通信方式やTLSのパラメータを含む場合がありますが、プレフィックスを置き換えるだけで一方のプロトコルをもう一方に変換することはできません。

vless://[email protected]:443?encryption=none&security=tls&type=ws&host=example.com&path=%2Fdemo&sni=example.com#Demo-VLESS

trojan://[email protected]:443?security=tls&sni=example.com#Demo-Trojan
確認項目VLESSの例Trojanの例
認証情報UUIDパスワード
通信方式type=wsはWebSocketを表しますこの例では追加の通信ラッパーを指定していません
TLSsecurity=tlssecurity=tls
ホスト名の検証に関するフィールドsni=example.comsni=example.com

VLESSのencryption=noneは、「接続全体でTLSを使用しない」という意味ではありません。security=tlsとは異なる階層の設定です。また、ポートが443だからといって、証明書が必ず有効とは限りません。証明書、SNI、実際のサーバー設定が一致している必要があります。検証エラーが発生した場合は、手元の設定を確認してください。証明書検証を無効にすることを、通常の解決策として行わないでください。

この記事で取り上げた4種類のプレフィックスは、プロトコルの全リストではありません。Hysteria2やWireGuardなどは、それぞれ独自のパラメータ構成と取り込み要件があり、この記事の項目一覧をそのまま当てはめることはできません。同じプロトコルでも共有形式に拡張が含まれる場合があります。項目として解析できたことは、取り込みが完了したことを示すだけで、すべてのパラメータがサーバーに適合しているとは限りません。

6. iPadとiPhoneで取り込み・更新する

ShadowrocketのHomeでは接続状態とサーバー項目を確認でき、Configでは構成ファイルを管理し、Settingsではアプリの設定を行います。サブスクリプションURLをサーバーのドメイン欄に入力しないでください。また、拡張子だけでConfigファイルだと判断することもできません。まず手元の内容が単一リンク、サブスクリプションの入口、完全な設定ファイルのどれかを確認し、適切な手順を選びます。

  1. アプリを確認する

    ShadowrocketはApp Storeから入手し、デベロッパがShadow Launch Technology Limitedであることを確認してください。本アプリは買い切りのクローズドソース商用アプリです。クライアントの購入に接続サービスは含まれません。iPhoneとiPadのシステム要件はApp Storeの掲載内容を確認してください。

  2. 単一リンクを取り込む

    手元にある完全な共有リンクをコピーしてHomeに戻ります。クリップボードからの取り込み案内が表示されたら、内容を確認して追加してください。案内が表示されない場合は、Home右上の「+」から該当するTypeを選び、元の設定を項目ごとに入力します。URI全体をサーバーアドレス欄に入力しないでください。

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

    Home右上の「+」→ Type → Subscribeを選び、URL欄に手元のサブスクリプションURLを貼り付けて保存します。例のURLはhttps://example.com/sub?token=xxxxです。構造を示すためだけのものです。

  4. 更新を確認する

    Homeに戻り、下に引いてサブスクリプションを更新し、対象のグループに項目が表示されるか確認します。更新によって項目が追加、削除、変更される場合があります。手動設定を残したい場合は、更新前に別途記録してください。

  5. 接続を確認する

    既存の項目を選び、接続時にシステムの案内に従ってVPN構成を許可したうえで、Home → Connectivity Testを実行します。Home → Global Routingの設定も確認してください。項目を取り込んだだけで、Directが自動的にProxyやConfigに変わることはありません。

サブスクリプションは主に接続項目の取得と同期に使われ、ルールによる振り分け設定まで自動的に完了するわけではありません。Global Routing → Configを使う場合は、Configで使用中の設定と適用対象のポリシーも確認してください。DOMAIN-SUFFIX、GEOIP、IP-CIDR、FINALはルールキーワードであり、接続先の共有プロトコルではありません。サブスクリプションの更新に成功しても、ルールが想定どおりに適用されたとは限りません。

7. 取り込み・更新・接続に失敗したときの確認事項

発生した段階に応じて確認してください。保存前に形式エラーが表示される場合は、まずリンクのテキストを確認します。サブスクリプションの取得に失敗する場合は、入口とネットワーク経路を確認します。項目が表示されても接続できない場合は、認証情報、通信方式、ルーティングを確認します。これら3つの段階を混同すると、正しい設定まで何度も変更してしまうことがあります。

コピーしても認識されない。リンクが壊れていますか?

まずプレフィックスが完全か確認し、リンクの前後に付いた引用符、説明文、コードフェンスを取り除きます。リンク内の&が文字列&に変わっていないかも確認してください。クリップボードの案内が表示されないだけなら、Home →「+」から該当するTypeを手動で確認してください。そのためにプロトコルのプレフィックスを変更する必要はありません。

サブスクリプションの更新がタイムアウトします。先にプロトコルを変更すべきですか?

まずSubscribeのURLが有効か、tokenが完全か、現在のネットワークから入口にアクセスできるかを確認してください。利用可能なプロキシがすでにあり、サブスクリプションの入口へのアクセスにプロキシが必要な場合に限り、Settings → SubscribeでUpdate via Proxyを確認します。この項目では、無効な認証情報や誤ったURLは修正できません。

項目を取り込めたのに接続できないのはなぜですか?

項目を開き、アドレス、ポート、パスワードまたはUUIDを確認し、続けてTLS、SNI、通信方式、パスを確認してください。その後、HomeでConnectivity Testを実行し、Global Routingも確認します。取り込みの成功はテキストを解析できたことを示すだけで、認証情報が有効であることや、接続先サーバーに到達できることを保証しません。

名前を変更したのに、サブスクリプション更新後に元に戻るのはなぜですか?

サブスクリプションの更新では、リモートの内容に基づいて項目が再作成または上書きされる場合があります。サブスクリプショングループ内で手動変更した内容が、常に保存されるとは限りません。個別に管理する場合は、対象項目の完全なパラメータを先に別途保存してください。その後、独立した項目と元のサブスクリプションを分けて管理し、同じ設定として扱わないようにします。

App Storeで正規アプリを確認して取り込む方法

まずShadowrocketのApp Store上のアプリ情報と購入情報を確認し、手元にあるサブスクリプションや設定をチュートリアルに沿って取り込みます。入手先はApp Storeのみです。アプリの購入に接続サービスは含まれません。互換性とシステム要件はApp Storeの掲載内容を確認してください。

正規アプリの確認ページへ 使い方を見る
App Storeで正規アプリを確認