本文へ移動

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

4種類の共有リンクの構造とエンコード方法を解説。単一サーバーのリンクとサブスクリプションURLの用途・更新方法の違い、Shadowrocketでの読み込み先を紹介します。

この記事の要点

単一サーバーの共有リンクには、通常、接続パラメータが直接含まれます。一方、サブスクリプションURLは、インターネット経由で取得するコンテンツを指すのが一般的です。利用中のサービス事業者から設定情報を受け取っている方向けに、まず接頭辞で入力の種類を見分け、アドレス、認証情報、通信方式、TLSを確認してから、Shadowrocketで適切な読み込み方法を選ぶ手順を説明します。例は形式の説明用であり、接続には使用できません。

1. 単一サーバーのリンク・サブスクリプションURL・設定ファイルの違い

ss://、vmess://、vless://、trojan://は共有形式のscheme、つまりコロンより前にある種類を示す文字列です。続く文字列の解釈方法をクライアントに伝えるもので、WebページのURLとは異なり、通信方式の詳細すべてを定めるものでもありません。Shadowrocketに読み込むと、これらの文字列は編集可能な接続項目に変換されます。

サブスクリプションURLは通常、https://で始まります。たとえば、https://example.com/sub?token=xxxxのような形式です。通常、URL自体にサーバーの接続パラメータが含まれているわけではなく、コンテンツを取得するためのアドレスです。サーバーから返される内容には複数の共有リンクが含まれる場合や、全体がBase64でエンコードされている場合があります。URLの末尾だけでは、返される形式を特定できません。

入力の種類主な内容更新方法
単一サーバーの共有リンクアドレス、認証情報、接続パラメータ一式新しいリンクを再読み込みするか、該当項目を手動で変更
サブスクリプションURLサービス側で管理されているリストを取得するURL元のURLに再度アクセスしてサブスクリプションの一覧を更新
設定ファイルGeneral、Rule、DNS、ポリシー関連の設定を含む場合があるローカルファイルを再読み込みするか、リモート設定を更新

HTTPSのURLは、サブスクリプションではなくWebページやリモート設定を指している場合もあります。まず、利用中のサービス事業者が案内する用途を確認してください。ノードのサブスクリプションを更新しても、ルーティングルールが自動で設定されるわけではありません。また、リモート設定の読み込みは、接続先を1つ追加する操作とは異なります。

4種類
この記事で解説する共有scheme:ss / vmess / vless / trojan
1組
単一サーバーのリンクには通常、接続パラメータ一式が記述される
2種類
接続パラメータとルーティング設定をそれぞれ確認

見分け方:内容の用途を確認してから読み込み先を選ぶ

HTTPSのURLを受け取ったら、ノード一覧が返るのか、設定全体が返るのかをまず確認します。4種類の共有schemeの場合は、単一サーバーのリンクとして解析します。ブラウザで開けるという理由だけで、サブスクリプションとして使えると判断しないでください。

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

一般的なSIP002形式のリンクでは、認証情報とサーバーの場所が分かれています。認証部分は通常、method:passwordをBase64またはURL-safe Base64で表したもので、その後に@host:portが続きます。次の例では、エンコード部分をデコードするとaes-128-gcm:testになります。ここでのパスワードは説明用です。

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

method:password@host:port全体をエンコードした旧形式の共有リンクが使われることもあります。@がそのまま見えるかどうかは異なりますが、それだけで一方が無効とは判断できません。リンクによってはpluginクエリパラメータも含まれます。これらのパラメータは、該当する拡張機能が実際にサポートされ、正しく設定されている場合にのみ意味があります。

3. vmess://:JSONをデコードしてフィールドを確認

一般的なVMess共有形式は、vmess://の後にBase64エンコードされたJSONが続きます。アドレス、ポート、UUID、通信方式、TLSの情報はこのオブジェクトに含まれるため、通常のURLのように@を区切りとして探すことはできません。以下はデコード後の構造例であり、そのまま読み込める完全な共有リンクではありません。

{
  "v": "2",
  "ps": "Demo",
  "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"
}

生成元によっては、任意項目が省略されていたり、ポートが文字列として保存されていたりします。デコード結果が完全なJSONにならない場合は、リンク全体をコピーできているか、特に末尾がメッセージアプリで切れていないか確認してください。JSON全体をサーバーアドレスとして入力しないでください。

4. vless://とtrojan://:URLの形式は似ていても認証情報は異なる

この2種類の共有リンクは、「認証情報、アドレス、クエリパラメータ、メモ」というURL形式を使うことがよくあります。見た目は似ていますが、@より前の内容は互換性がありません。VLESSでは通常UUIDを、Trojanでは通常パスワードを指定します。以下のアドレス、認証情報、パスは説明用です。

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

trojan://[email protected]:443?security=tls&type=tcp&sni=example.com#Demo
フィールドVLESSの例での意味Trojanの例での意味
@より前の内容UUID。ユーザー認証に使用Password。ユーザー認証に使用
security=tlsTLSセキュリティレイヤーを指定この例で使用するTLS設定を表す
type例ではws例ではtcp
sniTLSハンドシェイクで使用するサーバー名TLSハンドシェイクで使用するサーバー名
host / pathこの例ではWebSocket用このTCPの例ではこれらのパラメータは不要

VLESSのencryption=noneは、プロトコル層における設定を示します。URL内のTLSが自動的に無効になるという意味ではありません。TLSを使うかどうかは、セキュリティレイヤーのパラメータと実際の読み込み結果で確認してください。TrojanではTLSを使うのが一般的です。トラブルシューティングでは、ポートに接続できるかだけでなく、Password、SNI、証明書のドメイン名もあわせて確認します。

クエリパラメータはパーセントエンコードされます。たとえば%2Fdemoは/demoにデコードされます。パスワードに@、#、?が含まれる場合、リンク生成時に該当箇所のルールに従ってエンコードしないと、パーサーが認証部分を途中で終わりと判断することがあります。IPv6アドレスをURLのホスト部分に指定する際は、通常、[2001:db8::1]:443のように角括弧で囲みます。

5. Shadowrocketでの読み込みと更新方法

以下の手順は、利用者自身がサービス事業者の接続パラメータまたはサブスクリプションをすでに持っていることを前提としています。Shadowrocketは買い切りのクローズドソース商用アプリで、App Storeから入手できます。アプリの購入と接続サービスの契約は別です。本サイトではノードやサブスクリプションの提供・販売・推奨は行っていません。

入力の種類を見分ける 読み込み先を選ぶ 解析された項目を確認する 接続情報を保存する 接続結果を確認する

単一サーバーの共有リンク

  1. リンク全体をコピーし、説明文、引用符、コードフェンスを一緒にコピーしないでください。QRコードは文字列を別の形で記録したものです。中身が何かを先に確認しましょう。
  2. Homeを開き、利用できるクリップボードからの読み込み案内またはQRコード読み取りを使います。案内が表示されない場合は、右上の+からAdd Serverを開き、正しいTypeを選んで、手元のパラメータを入力してください。
  3. 保存前にAddress、Port、認証情報、TLS、SNI、通信方式を確認してください。単一サーバーのリンクに含まれるメモをPasswordやAddressに入力しないでください。
  4. Homeに戻り、追加した接続情報が表示されていることを確認してから選択し、テストします。保存できたことは、クライアントが項目を受け付けたことを示すだけで、サーバー認証の成功を意味するわけではありません。

サブスクリプションURLとリモート設定

  1. ノードのサブスクリプションを追加するには、通常、Home → + → Add Serverの順に開き、TypeをSubscribeに設定します。完全なURLをURL欄に入力して保存してください。表示される項目は、アプリの現在の画面に従ってください。
  2. 読み込み後、該当するサブスクリプショングループに想定した接続情報が表示されるか確認してください。リストを更新するには、同じURLのサブスクリプションを重複して作らず、元のグループを更新します。
  3. ルールを含むリモート設定のURLを受け取った場合は、設定の用途に応じてConfigから追加し、読み込んでください。設定全体のURLを単一サーバーのAddressとして入力しないでください。

サブスクリプションを更新すると、サーバーからリストが再取得されます。サブスクリプション内の接続情報を手動で変更していても、更新後に置き換わる場合があります。変更を残したい場合は、必要な項目を記録してから、独立した接続情報として保存するか判断してください。ローカルでの変更がサーバーに同期されるとは限りません。サブスクリプションURL内のtokenも認証情報として扱ってください。

6. 読み込みエラーは解析・接続・ルールの順に切り分ける

まず「接続情報として解析されたか」、次に「接続を確立できるか」、最後に「リクエストが実際にどのルールで処理されるか」を確認します。この順で調べれば、Base64の文字列の問題をネットワーク障害と誤認したり、ルールでプロキシが選ばれていないのにパスワードを何度も変更したりするのを避けられます。

vmess://をコピーしたのに接続情報が追加されないのはなぜですか?

接頭辞と末尾が欠けていないか確認し、コピー時に付いた改行や句読点を削除してください。内容を確認する場合は、信頼できるローカル環境でBase64をデコードし、完全なJSONになっているか、特にadd、port、idを確認します。実際に使うリンクを公開デコードサイトに送信しないでください。

vless://を読み込めたのにPathが正しく表示されない場合は?

追加した接続情報の編集画面を開き、通信方式がwsになっているか確認してから、PathとHostを確認します。URL内の%2Fは解析後にスラッシュになります。項目が誤って表示される、または欠落している場合は、利用中のサービス事業者から受け取ったパラメータに合わせて修正し、TLSとSNIも確認してください。

サブスクリプション更新後に、手動で変更した名前やパラメータが変わるのはなぜですか?

サブスクリプションを更新すると、サーバー側のリストが再読み込みされるため、ローカルでの変更が維持されない場合があります。まず元のサブスクリプショングループを更新していることを確認し、サーバー側の現在のパラメータと照合してください。ローカルで変更した内容を残す必要がある場合は、更新で置き換わる項目を変更し続けるのではなく、別の接続情報として保存します。

接続先を選択しているのに、Webサイトの通信がそこを経由しないのはなぜですか?

HomeでGlobal Routingを確認してください。Directでは選択中のプロキシを経由しません。Configは現在の設定ルールに従い、Proxyはプロキシ経由のルーティングに使用します。Sceneではシーンごとの設定に従って動作します。まず現在のルーティングモードを確認し、次に接続スイッチと該当するルールを確認してください。

Global RoutingでConfigを使う場合、ルールの順序も結果に影響します。たとえば、DOMAIN-SUFFIX,example.com,DIRECTに一致するドメインはDIRECTで処理されます。後続のFINAL,PROXYは、それ以前のルールに一致しなかったリクエストだけを処理します。新しい共有リンクを読み込んでも、既存のDOMAIN-SUFFIX、GEOIP、IP-CIDRルールが自動的に上書きされるわけではありません。

App Storeで正規アプリを確認する