クライアント・設定形式・サーバープロトコルを切り分ける

iPhoneでClashのサブスクリプションを使うには、まず対応する設定を読み込めるiOSクライアントが必要です。Clashの設定は通常YAML形式で、ノード、プロキシグループ、ルール、DNS設定などが含まれます。クライアントは設定の読み込みや表示、ネットワーク拡張の起動を担います。この2つは別の層にあるため、アプリ名に「Clash」と入っているだけで互換性があるとは限りません。

Clash Metaは現在mihomoという名称のコアプロジェクトです。デスクトップ版でmihomoを使っていても、iOSクライアントが同じコアを使っているとは限らず、サブスクリプション内のすべての項目がそのまま動作するとも限りません。同じプロトコル名でも、トランスポートのパラメーター、TLSオプション、ルール拡張などに違いがある場合があります。

クライアントまたは設定の種類読み込み前の確認事項安易に判断できないこと
StashClash形式の設定に対応。拡張項目やプロトコルの対応状況は、現行バージョンのドキュメントで確認してくださいmihomo専用の項目すべてに対応しているとは限りません
Shadowrocket対応するノードサブスクリプション、または専用の設定形式を使用してください完全なClash YAMLを、そのまま同等の設定として使えるわけではありません
sing-box系クライアントクライアントが求めるJSON構造とコアのバージョンを確認してくださいClash YAMLは、ファイルの拡張子を変えるだけでsing-boxの設定にはなりません

この記事では、Clash形式の設定に対応するクライアントを中心に解説します。Stashは確認例の一つであり、元のClashプロジェクトが公式に提供するiOS版ではありません。他のアプリについても、開発元、対応形式、現在のストア掲載情報を個別に確認してください。サイトのブランド名や似た名称だけで、プロジェクトとの正式な関係があると判断しないようにしましょう。

App Storeでの入手方法とアカウントの地域設定

まずApp Storeの掲載ページを確認し、地域制限を判断する

アプリを検索できるかどうかは、Apple Accountのストア地域、開発元が設定した配信地域、デバイスの互換性、現在の配信状況によって異なります。デバイスの言語やタイムゾーン、「設定」で選ぶデバイスの地域は、App Storeアカウントの地域とは別です。接続先のネットワークを変えても、ストアの地域は自動的に切り替わりません。

  1. 開発元の公式サイトにあるApp Storeへのリンクから商品ページを開き、アプリ名、開発元名、必要なiOSのバージョン、価格を確認してください。
  2. 「お住まいの国または地域ではご利用いただけません」と表示された場合は、iPhoneの言語を何度も変更するのではなく、「メディアと購入」で使用中のアカウントを確認してください。
  3. システムバージョンに対応していないと表示された場合は、「設定」→「一般」→「情報」でiOSのバージョンを確認してください。地域を変更しても、システムの互換性は解決しません。
  4. 購入前に、買い切り、サブスクリプション、その他の課金方式のいずれかを商品ページで確認してください。アプリの料金とノードサービスの料金は別々に発生します。

地域変更とアカウントの安全性

iOS 18を例にすると、アカウントの地域は「設定」→画面上部のApple Account→「メディアと購入」→「アカウントを表示」→「国または地域」で確認できます。システムのバージョンによって項目名が多少異なる場合があります。正式に変更する前に、Appleの案内に従ってアカウント残高、サブスクリプション、ファミリー共有、支払い方法を確認してください。

App Storeでの配信状況は変わるため、特定の地域で長期にわたり配信されることを保証するものではありません。TestFlightはテスト用の配信方法で、参加枠やビルドの有効期限に制限があり、恒久的なダウンロード手段ではありません。インストール先を探す場合は、まず当サイトのダウンロードセンターでプラットフォーム別の案内を確認し、開発元が提供する正式な配布方法を照合してください。

読み込み前の準備:サブスクリプションが完全な設定を返すか確認する

「サブスクリプションURL」に共通の形式はありません。完全なYAMLを返すもの、ノード一覧だけを返すもの、エンコード済みのノードURIを返すもののほか、リクエストのパラメーターやクライアント識別情報に応じて内容が変わるものもあります。ブラウザーでURLを開けても、応答が現在のクライアントに適しているとは限りません。

  • 完全なClash設定:通常は proxies または proxy-providers に加えて、proxy-groups、rules などの項目があります。
  • ノードプロバイダー:proxies の一覧だけが含まれ、メイン設定で proxy-providers から参照する必要がある場合があります。単独で完全な設定として起動できるとは限りません。
  • Webページの応答:ログインページ、プランの案内ページ、HTMLが表示される場合は、ページのURLを取得している、認証に失敗している、またはサーバーへのログインが必要な可能性があります。
  • 他のクライアント専用形式:サービス提供元に該当クライアント向けの配布リンクを確認してください。ファイルの拡張子だけで内容を判断しないでください。

サブスクリプションURLのクエリパラメーターには、アクセス認証情報が含まれることがよくあります。コピー時は末尾の文字まで含めてすべて保持してください。スクリーンショットを共有する場合は、URL全体を隠しましょう。有効なサブスクリプションを、信頼できないオンライン変換サービスに送信しないでください。変換が必要な場合は、サービス提供元の変換用リンクか、自分で管理できる変換ツールを優先してください。

すでにパソコンでサブスクリプションを使っている場合は、現在選択中のプロキシグループ、実際に使っているノード名、サブスクリプション提供元が案内する形式の3点を記録してください。iPhoneに読み込んだあと、ノード数だけでなく各項目を照らし合わせて確認できます。

サブスクリプションの読み込み手順:ダウンロード・選択・更新をそれぞれ確認

クライアントのバージョンによってボタン名は異なりますが、「リモート設定の追加」「ダウンロード」「現在の設定として選択」の3つの操作が必要です。Stashのようなクライアントでは、設定一覧からURLのソースを追加します。現在のバージョンでQRコードやファイルからの読み込みに対応している場合も、読み込むのがリモートURLなのかローカルコピーなのかを確認してください。

  1. 設定管理を開く。クライアントの設定一覧を開き、新しい設定を追加するか、URLからダウンロードする項目を選びます。サブスクリプションをHTTPプロキシ、DNS、ノードサーバーの入力欄に貼り付けないでください。
  2. サブスクリプションURLをそのまま貼り付ける。空白、改行、日本語の句読点、チャットアプリによって付加された説明文が混ざっていないか確認します。「普段使いのルール」など、見分けやすい名前を付けてください。
  3. ダウンロードを実行する。クライアントによる解析が終わるまで待ちます。エラーが発生した場合は、単に「読み込み失敗」と記録するのではなく、ステータスコードとエラーが発生した項目の位置を残してください。
  4. 現在の設定として選択する。ダウンロード後に設定一覧へ戻り、その設定が選択されていることを確認してください。複数の設定がある場合、新しく追加できても自動で切り替わるとは限りません。
  5. プロキシグループを確認する。プロキシまたはルールの画面を開き、メインのプロキシグループに選択可能なノードがあること、ルールが参照するグループ名が存在することを確認してください。
  6. 更新元を確認する。リモートURLが保持されているか、自動更新が有効か、手動更新の項目があるかを確認してください。ローカルファイルは通常、元のサブスクリプションの変更を自動で取得しません。

何度も再試行せず、エラーの種類に応じて対処する

  • 401 または 403:まず認証情報、URLの有効性、サーバー側のアクセス制限を確認してください。最初にDNSを変更する必要はありません。
  • 404:URLのパス全体を確認し、以前のサブスクリプションURLが置き換えられていないか調べてください。
  • YAMLの解析エラー:インデント、重複キー、エラーが示す行を確認してください。サーバーがYAMLではなくHTMLを返している可能性もあります。
  • ダウンロードのタイムアウト:インターネット接続とサブスクリプションのドメインにアクセスできるか確認してください。既存のプロキシ経由で更新できるクライアントでは、接続が確立している状態でその方法を試せます。

VPN構成の許可:iOSのネットワーク拡張による通信の取り扱い

初めて接続を開始すると、iOSからVPN構成の追加を許可するか確認されるのが一般的です。アプリの入手元を確認したうえで、システムの案内に従って許可し、デバイスのパスコードまたはシステム認証で承認してください。ここでいうVPNは、システムのネットワーク拡張を利用する仕組みです。サブスクリプション内のすべてのノードが従来型のVPNプロトコルを使うことや、すべての通信が必ずリモートノードを経由することを意味するものではありません。

iOS 18では、「設定」→「一般」→「VPNとデバイス管理」→「VPN」で構成と接続状況を確認できます。会社のVPN、他のプロキシクライアント、セキュリティソフトのVPNがすでにある場合は、別の個人用VPN接続を停止してからテストしてください。管理対象デバイスの制限については、デバイス管理者に確認が必要です。

デスクトップのシステムプロキシやTUNとの違い

デスクトップのシステムプロキシは通常、アプリがHTTPまたはSOCKSのプロキシ設定に従う必要があります。一方、iOSのこの種のクライアントは、Network ExtensionのPacket Tunnelを通じてシステムのネットワークに接続することがよくあります。どちらもネットワーク層の通信を制御しますが、許可、ルーティング機能、除外する通信、動作期間はそれぞれのOSの制約を受けます。Windowsのサービスモードの手順をそのまま流用することはできません。

  • 先にWi-FiのHTTPプロキシを変更する必要はありません。クライアントのVPNネットワーク拡張を使う場合、Wi-Fiの詳細設定にある手動プロキシは通常必要ありません。
  • ポート番号はVPNの許可設定ではありません。デスクトップ設定の mixed-port: 7890 はローカルの待ち受けポートの例であり、iPhoneのシステム許可に使う値ではありません。
  • LANへの公開範囲を管理する。他のデバイスからの接続が本当に必要な場合を除き、iPhone自身のインターネット接続のためだけにLANアクセスを許可しないでください。
  • アイコンだけでは十分な確認になりません。システムにVPN接続中と表示されても、確認できるのはトンネルの状態だけです。ルール、ノード、対象リクエストも確認してください。

ルールモードの切り替え:プロキシグループと最終的な接続先を確認

初回はルールモードを選ぶのがおすすめです。ルールモードでは、対象に順番にルールを照合してポリシーを適用します。グローバルモードでは、通常その制御対象となる通信をグローバルポリシーに渡し、DIRECTモードでは直接接続します。実際に制御される範囲は、クライアントのルーティング設定やシステムの制約にも左右されます。「グローバル」を、デバイス上のすべての通信を例外なく制御するものと考えないでください。

以下はルールの順番を確認するための抜粋で、単独で読み込める完全な設定ではありません。「プロキシ選択」は、既存の設定にあるプロキシグループ名と一致させてください。実際のグループ名が異なる場合は、正しい名前に変更する必要があります。

mode: rule
rules:
  - DOMAIN-SUFFIX,apple.com,DIRECT
  - IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
  - MATCH,プロキシ選択

この設定では、apple.comとそのサブドメインへの通信を直接接続し、指定したLANのIPアドレス範囲に属する宛先も直接接続します。それ以外のリクエストは「プロキシ選択」に渡します。これはルールの構造を示す例で、すべてのユーザーに推奨する振り分け設定ではありません。特に、ドメインサフィックスのルールだけでは、企業が利用するすべてのドメインを網羅できません。

同じリクエストで3点を確認する

  1. プロキシグループの選択:クライアントのプロキシ画面で、ルールが参照するグループを見つけ、ノードを一つ選択します。自動選択グループの場合は、現在どのメンバーが選ばれているか確認してください。
  2. 遅延テスト:クライアントに用意されているテストを実行します。結果が 120 ms でも、そのテスト先とテスト方法での所要時間がわかるだけです。これは数値の例であり、この記事で実測した値ではありません。帯域幅や実際のサービスの利用可否を確認する代わりにはなりません。
  3. 接続ログ:プロキシ経由になると想定されるWebサイトを開き、クライアントの接続ログまたはリクエストログを確認します。対象ドメイン、適用されたルール、ポリシーの経路、実際に使用されたノードを照合してください。

接続先のIPアドレスが引き続き現地の通信事業者のものなら、まず今回の確認リクエストがDIRECTのルールに一致していないか調べてください。IPアドレスの確認サイト自体が直接接続になっている場合もあります。確認結果を同じ時刻の接続ログと照らし合わせ、IPアドレスを一つ見ただけでiPhone全体のプロキシが動作していないと判断しないでください。

iPhoneでよくある問題:DNS、更新失敗、ネットワーク切り替え

ノードの遅延は測定できるのにWebページが開かない

まず、実際に利用するリクエストと遅延テストで使った接続先が同じかを比べ、その後DNSとルールを確認してください。ノードとのハンドシェイクが成功しても、対象サイトへアクセスできるとは限りません。ログにドメイン名の名前解決エラーがある場合は、クライアントが設定内のDNS項目を受け付けているか、クライアント側のDNS設定で上書きされていないか確認してください。Fake-IPを使う場合は、クライアント自体がそのモードに対応している必要があります。enhanced-mode: fake-ip を追加しただけで有効になるとは限りません。

デスクトップでは動作するのに、iOSで未対応の項目と表示される

エラーになった項目名を控え、現在のクライアントバージョンに対応する設定ドキュメントを確認してください。mihomo専用の拡張、ルールプロバイダーの動作、トランスポートオプションなどは、クライアントによって違いがある場合があります。エラーを消すためにルール全体やDNS設定を削除しないでください。まずサブスクリプション提供元が用意するiOS向けの出力を使い、重要なポリシーが維持されているか確認しましょう。

Wi-Fiでは使えるが、モバイル通信では使えない

まずプロキシをオフにした状態で、モバイルデータ通信が正常に使えることを確認します。次に、「設定」→「モバイル通信」で、クライアントに必要なデータ通信の許可があるか確認してください。Wi-Fiとモバイル通信を切り替えた後、トンネルが再接続するか、ノードが再度ハンドシェイクするかを確認します。ネットワーク経路によってUDPの扱いが異なる場合があります。Hysteria2などQUICベースのプロトコルでは、UDPに到達できるかを特に確認し、アカウントの地域設定が原因だと決めつけないでください。

サブスクリプションの更新後、以前の選択が消えた

更新によってノード名、プロキシグループ名、グループ構成が変わった可能性があります。まず更新後の設定を確認し、メンバーを選び直してください。アプリが選択状態の保存に対応していても、適用条件に合う場合にのみ選択を復元できます。サーバー側で削除されたノードは、ローカルの設定を残しても使い続けられません。

設定の停止・削除が必要な場合

まずクライアントで接続を停止し、必要に応じた接続や自動接続が有効になっていないか確認してください。設定によってはシステムがすぐに再接続する場合があります。削除する場合は、その後システムのVPN一覧から該当する構成を削除します。問題を報告する際は、クライアントのバージョン、iOSのバージョン、ネットワークの種類、エラーが発生した時刻、関連ログを記録し、サブスクリプションの認証情報、ノードのパスワード、個人用ドメインは隠してください。詳しい対処方法はよくある質問をご覧ください。