まずクライアントとClashのサブスクリプション形式を確認
iPhoneでClashのサブスクリプションを使うには、Windows用のインストーラーをスマートフォンにコピーするのではなく、該当する設定形式に対応したiOSクライアントを選ぶ必要があります。Clashはプロキシコアや設定エコシステムの名称であり、App Storeに統一された公式iPhoneアプリがあるという意味ではありません。検索結果に似た名前のアプリがあっても、設定に互換性があるとは限りません。
この記事では、Clash形式のYAML設定に対応したStashを例に手順を紹介します。Stashは独立したクライアントであり、デスクトップ版ClashのiOS版ではありません。また、mihomoコアを使用しているとも限りません。配信地域、価格、最低システム要件、各機能については、インストール時のApp Store掲載情報と開発元のドキュメントを確認してください。
| 入手したもの | 見分け方 | 読み込み前の確認事項 |
|---|---|---|
| Clash YAML設定 | よく使われるキーは proxies、proxy-groups、rules です |
クライアントが使用されているプロトコル、ルールの種類、拡張フィールドに対応しているか |
| ノードのリンクまたはノード一覧 | 個別のリンクは ss://、trojan:// などで始まります |
完全な設定ではなく、ノードの読み込みが必要か |
| 別のクライアント向け設定 | 設定の構造がClash YAMLとは異なります | 現在のクライアントに対応した形式をサービス提供元に問い合わせる |
どちらのクライアントもYAMLを読み込めるからといって、すべてのフィールドが共通で使えるわけではありません。特に「mihomo専用」と記載された新しいプロトコルや拡張構文は、項目ごとに確認してください。Shadowrocketなどのアプリにも独自のサブスクリプションや設定方式があります。一部のノードプロトコルに対応しているだけで、Clash設定全体に互換性があるとは限りません。
App Storeから対応クライアントを入手する
App Storeの掲載情報を確認してインストール
- iPhoneでApp Storeを開き、「検索」タブでクライアント名(例:
Stash)を検索します。 - アプリのページを開き、開発元、説明、バージョン履歴、「互換性」の要件を確認します。Clash設定やYAMLの読み込みに対応していることが明記されているか、特に確認してください。
- アプリのページに表示される入手または購入手順に従ってインストールします。クライアントの料金とプロキシサービスの料金は別です。アプリをインストールしても、ノードやサブスクリプションが自動的に利用可能になるわけではありません。
- 初回起動後は、設定の追加方法とヘルプを確認してから、自分のサブスクリプションを読み込んでください。提供元が不明なサンプルノードをそのまま有効にしないでください。
アプリが検索結果に表示されない場合は、まず現在のAppleアカウントのストア地域で配信されているか確認します。iPhoneの「言語と地域」とApp Storeアカウントの地域は別の設定です。アカウントの購入設定は、「設定」→画面上部のAppleアカウント→「メディアと購入」→「アカウントを表示」から確認できます。表示項目はシステムのバージョンによって異なる場合があります。
この記事では、特定のアプリのバージョンや価格を固定していません。App Storeの掲載情報は随時更新されます。問題を調べる際は、クライアントの「バージョン情報」またはApp Storeのバージョン履歴で実際のバージョンを確認し、iOSのバージョンとあわせて記録してください。「最新版」とだけ伝えるより、互換性の問題を特定しやすくなります。
読み込み前の準備:サブスクリプションURL、ネットワーク、バックアップ
サービス提供元のアカウントページから、Clashまたは使用中のiOSクライアント向けのサブスクリプションURLを取得します。通常はHTTPSリンクで、アカウントのトークンが含まれる場合があります。URL全体が認証情報に相当するため、グループチャットに貼り付けたり、公開スクリーンショットに写したり、公開の問い合わせ窓口に送ったりしないでください。
- コピーした内容を確認:クエリパラメーターをすべて含め、ページのタイトルや改行、末尾の句読点を一緒にコピーしないでください。
- 有効期限を確認:アカウントのサービスが有効で、サブスクリプションURLがリセットされておらず、デバイス数の上限にも達していないことを確認してください。
- ネットワークを確認:まずSafariで一般的なWebページを開き、ホテルや学校のWi-Fiでログイン認証を済ませてください。
- 既存の設定を保存:使用中の設定がある場合は、上書きする前にバックアップをエクスポートするか、現在の設定名を記録して、元に戻せるようにしてください。
サービス提供元のトップページをブラウザーで開けても、サブスクリプション用のAPIに接続できるとは限りません。別のドメインが使われている場合があります。一方、Safariに大量の設定テキストが表示されたり、ファイルのダウンロードが始まったりするのは、APIの正常な応答である可能性があります。ログインページ、認証画面、HTML形式のエラーページが表示された場合は、YAML設定として読み込めません。
サブスクリプションURLから設定を読み込み、有効にする
Stashで「設定」ページを開き、追加メニューからURLを使って設定をダウンロードする項目を選びます。バージョンによって「ダウンロード」「URLからダウンロード」など表記は異なります。操作の目的はリモート設定を作成することで、ノード一覧にサーバーを手動で追加することではありません。
- サブスクリプションURLを省略せずに貼り付けます。名前の入力を求められた場合は、「普段使い」など、見分けやすい名前を付けてください。
- ダウンロードを実行し、クライアントが設定を取得して解析するまで待ちます。最初のトラブルシューティングでは一度手動でダウンロードし、自動更新だけを設定して終わらせないでください。
- 設定一覧から読み込んだ設定を選び、現在使用中になっていることを確認します。ファイルが一覧にあるだけでは、有効になっているとは限りません。
- プロキシグループのページを開き、選択できるノードが表示されているか確認します。
selectタイプの手動選択グループでは、用途に応じてノードまたは下位のポリシーグループを選択します。 - 動作モードを確認します。普段使いでは、まずルールモードを選び、
rulesに直接接続、プロキシ、拒否を振り分けさせます。全般モードを初期設定代わりにしないでください。
サブスクリプションの更新とノードの速度測定は別々に確認
サブスクリプションの更新は設定やノード一覧を再取得する操作で、速度測定はノードの接続をテストする操作です。両者は別の機能です。更新に成功しても、証明できるのはサブスクリプションを取得できたことだけで、すべてのノードが使えるとは限りません。速度測定で数値が表示されても、テスト先への結果を示すにすぎず、すべてのWebサイトに接続できる保証にはなりません。
設定によっては、proxy-providersを使って外部のノードファイルを参照します。この場合、メイン設定のダウンロードが成功しても、プロバイダーのURLに接続できず、グループにノードが表示されないことがあります。メイン設定を何度も削除するのではなく、プロバイダーの更新結果も確認してください。
YAMLファイルから設定を読み込む
完全な設定ファイルを入手済みの場合や、サブスクリプションを直接取得できない場合は、ファイルから読み込む方法が便利です。まず .yaml または .yml ファイルを、iPhoneの「ファイル」アプリに保存します。「このiPhone内」またはiCloud Driveなどを選んでください。ファイルの横に雲のアイコンが表示されている場合は、ダウンロードが完了するまで待ちます。
- クライアントの設定ページを開き、ファイルから読み込む項目を探します。
- システムのファイル選択画面でYAMLファイルを選び、解析が終わるまで待ちます。
- 読み込み後の設定を選択し、プロキシグループ、ノード数、ルールモードを確認します。
- 構文エラーが表示された場合は、元のファイルに戻り、インデント、コロン、引用符を確認してください。拡張子だけ変えて再試行する方法では解決しません。
以下は設定の構造を確認するための断片です。接続可能な完全設定ではなく、利用できるノードも含まれていません。ルールがプロキシグループ名を参照し、そのグループが別の場所で定義されることを示しています。
mode: rule
log-level: info
rules:
- DOMAIN-SUFFIX,example.com,Webプロキシ
- MATCH,DIRECT
この例の「Webプロキシ」は、proxy-groups内のグループ名と完全に一致している必要があります。一致しない場合、参照エラーが発生します。YAMLのインデントにはスペースを使い、Tabは避けてください。#などの特殊文字を含む値は、引用符の使用にも注意が必要です。デスクトップ向け設定をそのままコピーし、リスニングポート、ルーティング、TUNの設定がiOSでも同じように動作すると期待しないでください。
初回起動時:VPN構成の追加を許可する
設定を選択したら、クライアントのホーム画面に戻り、接続スイッチをオンにします。システムトンネルを初めて作成する際、通常はiOSからVPN構成の追加を許可するよう求められます。ダイアログに表示されたアプリ名を確認し、インストールしたクライアントのものだと確かめてから「許可」をタップし、画面の案内に従って認証を完了してください。
この許可により、アプリはiOSのNetwork Extensionを通じて対象のネットワーク通信を処理できるようになります。サブスクリプションの検証が済んだことを示すものでも、すべての通信がリモートノードを経由するという意味でもありません。DIRECTに一致する通信は直接接続される場合があります。iOSのステータスバーに表示されるVPNアイコンやコントロールセンターの状態で確認できるのは、主にトンネルが確立されたかどうかです。
- 誤って「許可しない」をタップした場合:クライアントに戻って接続を再開し、案内に従ってもう一度許可を求めます。それでも失敗する場合は、システムのVPN設定を確認してください。
- 設定の状態を確認:「設定」→「一般」→「VPNとデバイス管理」→「VPN」の順に開き、現在の構成と接続状態を確認します。システムのバージョンによっては、VPNへのショートカットが表示されます。
- 別のVPNを使用中の場合:接続が別のアプリに切り替わらないよう、個人用VPNクライアントと自動接続設定を一時停止してください。組織の管理下にあるデバイスでは、管理者に問い合わせてください。
サブスクリプションを読み込むために、サービス提供元のルート証明書を完全に信頼する必要はありません。通常のプロキシ接続でMDM管理プロファイルを追加インストールする必要もありません。こうした権限を求められた場合は、いったん中止して用途を確認してください。HTTPS通信の復号は別の機能であり、この記事で扱う通常の設定手順には含まれません。
接続後の確認:VPNアイコンだけでなくルールの適用状況を見る
許可が完了したら、「トンネルの状態→ポリシーの選択→実際のリクエスト」の順に確認します。まずクライアントに接続済みと表示されていることを確かめ、Safariで新しいページを開き、通常どおりアクセスできるサイトと、プロキシ経由でアクセスする想定のサイトをそれぞれ開きます。以下は確認手順であり、一定の遅延を示す性能テストではありません。
- クライアントの接続履歴またはリクエストログを開き、直前にアクセスしたドメインを探します。
- 適用されたルールとポリシーグループが想定どおりか確認します。通常、ルールは上から順に評価され、先に一致した場合は後続のルールを調べません。
- ポリシーグループで
DIRECTが選択されている場合、VPNが接続中でも、そのリクエストがリモートプロキシを経由したことにはなりません。 - モバイルデータに切り替えてもう一度試し、現在のWi-Fiによる制限と設定の問題を切り分けます。モバイルデータの通信量にも注意してください。
デスクトップ向けの解説でよく見かける mixed-port: 7890 は、ローカルのHTTP/SOCKS5混合ポートです。iPhoneでサブスクリプションを読み込む際に必須のパラメーターではありません。iPhone上のクライアントがトンネル経由で接続する場合、現在のWi-Fiの「プロキシを構成」に 127.0.0.1:7890 を入力する必要もありません。これは別の手動プロキシ方式であり、混同するとトラブルシューティングが複雑になります。
同様に、デスクトップ向けの手順をそのまま使って、まったく同じ「TUNモード」スイッチを探す必要はありません。iOSではクライアントがシステムのネットワーク拡張と連携して通信を処理します。DNSやルーティングの機能はクライアントとシステムの制約を受けるため、デスクトップ版mihomoのすべての tun フィールドをそのまま使えるわけではありません。
設定の読み込みや接続でよくある問題
| 症状 | まず確認すること | 次に試すこと |
|---|---|---|
| ダウンロード時に401または403が返る | トークン、権限、サブスクリプションの有効期限、APIへのアクセス制限 | アカウントページからURLをコピーし直します。それでも失敗する場合は、サービス提供元に確認してください。 |
| YAMLの解析エラーが表示される | 応答がWebページではないか、ファイルのインデントが正しいか | サブスクリプション形式を確認し、エラーが発生した行とその直前の行を確認します。 |
| 未対応のプロキシタイプと表示される | プロトコルや拡張フィールドがクライアントの対応範囲外ではないか | 対応形式の設定を提供元に依頼するか、そのプロトコルに対応していることが明確なクライアントに変更します。 |
| 設定の読み込みは成功したが、ノード一覧が空 | 新しい設定が選択されているか、リモートプロバイダーの更新が成功したか | 設定とプロバイダー、それぞれのダウンロードエラーを確認します。 |
| VPNは接続済みだがWebページがタイムアウトする | 選択したノード、適用ルール、DNS、現在のネットワーク | ノードを1つだけ切り替えて再試行し、リクエストログと照らし合わせます。 |
一度に変更する設定は1つだけ
トラブルシューティングでは、まず元の設定を残し、エラーが起きた時刻、クライアントのバージョン、iOSのバージョン、接続中のネットワークを記録します。最初にノードを1つ切り替え、次に別のネットワークで試すなど、変更は1つずつ行ってください。モードの切り替え、DNSの再設定、ルールの変更、アプリの再インストールを同時に行うと、どの操作が効果的だったのか判断できません。
DNSエラーが表示されたら、サブスクリプションのドメイン、ノードサーバーのドメイン、接続先サイトのどの名前解決に失敗したのかを切り分けます。それぞれ問題のある段階が異なるため、共通のパブリックDNSアドレスを設定しても解決するとは限りません。会社、学校、管理対象ネットワークでは、外部DNSやVPN接続が制限される場合もあります。利用中のネットワークのルールに従ってください。
問い合わせる際は、エラーの原文と個人情報を隠したスクリーンショットがあれば十分です。サブスクリプションURLのクエリパラメーター、ノードのパスワード、アカウントのメールアドレス、サーバーの認証情報全体は隠してください。「設定を解析できる」「現在の設定が選択されている」「VPNの許可が完了している」「ルールとノードの選択が想定どおり」の4点を確認してから、特定のサイトの問題を調べるほうが、最初から再インストールするより効率的です。