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

4種類の共有リンクの構造と各項目の意味を解説。単体リンクとサブスクリプションURLの読み込み方法・更新の違いも比較します。例はすべて架空です。

この記事の概要

自分で用意したサービス設定を持っていて、読み込み方法を確認したい方を対象に解説します。まず単体の共有リンクとサブスクリプションURLを区別し、Shadowsocks、VMess、VLESS、Trojanの各項目を確認したうえで、Shadowrocketで読み込み・更新・接続確認を行います。ドメイン、パスワード、UUIDはすべて説明用の架空データで、実際の接続には使えません。

1. 接続情報を示すリンクと設定一覧を取得するURLを区別する

Shadowrocketの単体サーバー設定には、プロトコル、サーバーアドレス、ポート、認証情報が保存されます。ss://、vmess://、vless://、trojan://で始まる共有リンクには、通常これらの項目が直接エンコードされています。読み込みで行われるのは項目の復元であり、サーバーが利用可能かどうかの確認ではありません。

一方、サブスクリプションURLは通常HTTPS形式です。ShadowrocketがURLにリクエストを送信して応答内容を読み取り、サーバー設定を作成または更新します。そのため、「共有リンクを解析できるか」と「サブスクリプションサーバーにアクセスできるか」は別の問題です。HTTPSはアクセス方法にすぎず、一般のWebページやログインページでも使われています。URLの先頭だけでサブスクリプションだと判断しないでください。

4種類
この記事で扱う共有リンクの形式:ss / vmess / vless / trojan
443
この記事のTLS例で使用するポート。すべての接続で固定ではありません
2ステップ
サブスクリプションの処理:URLにリクエストを送り、応答を解析

単体の設定は、元のサーバーアドレスが変更されても通常は自動更新されません。サブスクリプションに含まれる設定は、更新時に新しいパラメーターを取得できます。更新によって古い項目が削除されたり、サブスクリプション管理下の項目が上書きされたりする場合があるため、手動変更を長期的な管理方法にするのは避けましょう。この記事では、ユーザーがすでに持っている設定の使い方を説明します。接続サービスやサブスクリプションの提供・販売・推奨は行いません。

2. ss://:Shadowsocksの認証情報とポートを確認する

ss://はShadowsocksの共有リンク形式です。一般的なSIP002形式では、暗号化方式とパスワードをBase64でエンコードしたユーザー情報に続けて、@サーバー:ポートを記述します。以下の認証情報をデコードするとaes-128-gcm:passwordになります。ドメインとパスワードは架空の値です。

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

古い形式のリンクでは、「暗号化方式、パスワード、サーバー、ポート」がまとめてエンコードされ、@が見当たらないこともあります。見た目が異なっても、プロトコルが異なるとは限りません。Base64はテキストのエンコード方式であり、情報を秘匿するものではありません。リンク全体を入手した人は、通常、接続情報も復元できます。

3. vmess://:JSONをデコードして転送方式とTLSを確認する

一般的なVMess共有リンクは、vmess://の後ろにBase64でエンコードされたJSONが続きます。VLESSのURI形式とは異なるため、プロトコルを変換する目的で先頭をvless://に書き換えることはできません。以下はデコード後の説明用JSONで、読み込みに使える完全な共有リンクではありません。

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

addとportは接続先、idは認証用UUID、psは備考を指定します。net=wsはWebSocketの使用、pathはそのパス、hostは転送時のHost情報を示します。TLSの有効化を示すのはtls=tlsです。ポートを443にしただけでは、TLS設定は自動的に追加されません。

読み込み後、アドレスとUUIDが正しくても接続できない場合は、転送方式、パス、Host、SNIをあわせて確認してください。サーバーアドレスが正しいだけでは、WebSocketとTLSを使う設定で接続を確立できるとは限りません。

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

VLESSとTrojanの一般的な共有リンクは、どちらも標準的なURIに近い形式です。認証情報は@の前、サーバーとポートはその後ろにあり、疑問符の後ろにパラメーター、シャープ記号の後ろに備考が続きます。以下は構造を示すだけの例で、接続に使える設定ではありません。

vless://[email protected]:443?encryption=none&security=tls&type=ws&host=ws.example.com&path=%2Fconnect&sni=tls.example.com#Example-VLESS
trojan://[email protected]:443?security=tls&type=tcp&sni=tls.example.com#Example-Trojan
項目の位置VLESSの例Trojanの例
@より前UUID認証情報接続パスワード
security=tlsこの例のTLS設定この例のTLS設定
typews,WebSockettcp:この例ではTCPで転送
sniTLSのサーバー名TLSのサーバー名
#より後表示名表示名

VLESSの例にあるencryption=noneは、VLESS自体の暗号化項目を示すもので、接続全体にTLSがないという意味ではありません。この例では、別途security=tlsで転送のセキュリティ設定を指定しています。共有パラメーターは実装によって異なる場合があります。元の情報にflowなどが含まれている場合は値をそのまま保持して、読み込み結果を確認してください。他のリンクからパラメーターを継ぎ足さないでください。

%2Fconnectをデコードすると/connectになります。パスワードに@、#、&などの予約文字が含まれる場合、正しくパーセントエンコードしないと、解析時にパスワードの一部が区切り文字として扱われることがあります。IPv6のリテラルアドレスをURIに含める場合は、[2001:db8::1]:443のように角括弧で囲みます。このアドレスも説明用の例です。

5. Homeで単体リンクとサブスクリプションURLを読み込む

操作を始める前に、手元の情報の種類を確認してください。Configで管理するのはルール設定です。URLであるというだけで、サーバーのサブスクリプションURLをルール設定として読み込まないでください。Homeのサーバー設定、サブスクリプショングループ、Configのルーティングルールは、それぞれ用途が異なります。

読み込み対象の違い:単体の接続設定とリモートのサブスクリプション一覧

単体の共有リンク
  • リンク全体をコピーします。クリップボードからの読み込みが表示されたら、まずプロトコルの種類を確認してください。
  • Homeで読み込んだあと、設定を開いてサーバー、ポート、認証項目を確認します。
  • 次にTLS、SNI、転送パラメーターを確認します。備考の名前だけでプロトコルを判断しないでください。
  • パラメーターが変更された場合は、設定を再読み込みするか編集してください。サブスクリプションの更新で反映されるとは限りません。
すでにお持ちのサブスクリプションURL
  • Home → +を開き、TypeをSubscribeに設定します。
  • URL欄にサブスクリプションURL全体を貼り付け、識別しやすい名前を入力して保存します。
  • サブスクリプションを更新し、該当グループにサーバー設定が表示されることを確認します。
  • 次回以降も元のサブスクリプションから更新します。更新のたびに新しいサブスクリプションとして追加しないでください。

読み込みに成功したということは、項目または応答内容を解析できたというだけです。現在の設定が使えるかどうかは、接続テストと実際のアクセスで確認してください。

サブスクリプションURLは、たとえばhttps://example.com/sub?token=xxxxのような形式です。ドメインとtokenは架空の値です。実際のtokenはアクセス権限を示す場合があるため、クエリパラメーターを省略せずに保持し、公開の掲示板などには投稿しないでください。ブラウザーで開けても、アプリが有効なサブスクリプションを取得できるとは限りません。ログインページやエラーページ、未対応形式が返されることがあります。

  1. 保存後、次回の更新結果と比較できるよう、グループ名と項目数を記録しておきます。
  2. 更新を実行し、エラーの有無やサーバーアドレス、項目の変化を確認します。
  3. 項目を1つ選んでConnectivity Testを実行し、その後接続を有効にして実際にアクセスします。
  4. サブスクリプション内の項目を編集する場合は、先に元のパラメーターを記録してください。次回の更新でサブスクリプション管理下の項目が上書きされることがあります。

6. 手動更新と自動更新の使い分け

サブスクリプションの更新はリモートの一覧を再取得する操作です。すべてのサーバーをテストするものでも、単体の共有リンクに自動同期機能を追加するものでもありません。初回の読み込みでは、まず手動で更新して配信元と応答内容を確認してください。繰り返し確認できる方法を整えた後、必要に応じてSettings → Subscribeで更新設定を調整します。

Subscribeを手動更新

おすすめ

初回の読み込みやトラブルの確認時は、手動で更新を実行すると、エラー表示や項目の変化をその操作と関連づけて確認できます。パラメーターを確認する前に何度も更新する事態も避けられます。

適した場面:初回の読み込み、パラメーター確認、サブスクリプション更新のトラブル対処

Subscribeを自動更新

サブスクリプションが正常に更新できることを確認したうえで、アプリの更新設定に従って一覧を管理します。実際の更新はネットワークやアプリの動作状態にも左右されるため、バックグラウンドで常時確認される保証ではありません。

適した場面:利用できることを確認済みで、リモート一覧を継続的に管理したい場合

サブスクリプションへのリクエストに既存のプロキシ接続が必要な場合は、Settings → Subscribe → Update via Proxyを確認してください。有効にする前に、接続が正常に使える必要があります。この設定で無効なtokenが直ったり、使えないサーバーが復旧したりすることはありません。接続が使えない状態で経由を強制すると、かえってタイムアウトすることがあります。

7. よくある質問:解析エラーから更新後の接続不良まで

リンクをコピーしたのに、読み込んでも何も表示されないのはなぜ?

まず、プロトコルの接頭辞がすべて含まれているか、末尾がチャットアプリで切れていないか、改行・引用符・説明文が混入していないかを確認します。VMessの場合は、JSONの一部ではなくエンコードされた内容全体を取得できているか確認してください。元の情報源からコピーし直し、接頭辞を書き換えてプロトコルを推測しないでください。

サブスクリプションの更新に成功したのに、個別のサーバーがタイムアウトするのはなぜ?

更新成功が示すのは、サブスクリプションURLにアクセスでき、応答内容を解析できたことだけです。Homeで対象の設定を選び、Connectivity Testを実行してから、アドレス、ポート、認証情報、TLS設定を確認してください。一部の設定だけが失敗する場合は、その項目を個別に調べ、サブスクリプション全体を何度も更新しないでください。

ポートが443なのに、なぜSNIも確認する必要があるのですか?

ポートが決めるのは接続先のポート番号だけです。TLSを使う場合、SNI、証明書名、検証結果もハンドシェイクに影響します。設定を開いてTLSとサーバー名を確認し、元の設定に沿って正しい値に戻してください。証明書検証を無効にすることを通常の解決方法にしないでください。

更新後に自分で変更した名前やパラメーターが変わったのはなぜ?

サブスクリプションで管理されている設定は、更新時に再作成または上書きされる場合があります。更新前に保存した情報と照らし合わせ、名前だけが変わったのか、サーバー、ポート、認証情報も変わったのかを確認してください。長期的に保持したい独自の変更は、サブスクリプション管理下の設定と分けて管理しましょう。元のサービス設定が変更された場合は、手動で同期する必要があります。

トラブル対処のためにリンクを他の人へ送ってもよいですか?

元のリンクをそのまま送らないでください。パスワード、UUID、tokenなどの機密情報を隠し、プロトコルの種類、ポート、転送方式、エラーの状況だけを共有します。サブスクリプションURL全体が漏れた場合は、元のサービスが用意しているアカウント管理方法でアクセス情報を再設定し、HomeでサブスクリプションURLを更新してください。

トラブル対処は「種類の確認 → 全体をコピー → 項目を確認 → サブスクリプションへのリクエスト → 個別テスト → 実際のアクセス」の順で進められます。共有リンクには接続パラメーターが含まれ、サブスクリプションURLは一覧を取得するための入口です。まず問題の箇所を特定すれば、ルーティングの問題を形式の問題と取り違えたり、リモートサーバーの障害を読み込みエラーと誤認したりするのを防げます。

App Storeでダウンロード