まずアプリと設定ファイルの形式を確認

iPhoneでClash Metaのルールを使う際は、同じ名前のアプリを探す前に、利用するアプリがどの設定形式に対応しているかを確認しましょう。Clash Metaはその後mihomoの名称で開発が続いています。mihomoはプロキシのコア、サブスクリプションは設定やノード情報を取得するための入口、ルールは通信をどの出力先に振り分けるかを決めるものです。それぞれ役割が異なります。

iOSアプリは通常、システムのNetwork Extensionを使ってVPNトンネルを構築します。VPNのマークが表示されても、トンネルが有効になったことを示すだけで、アプリ内でmihomoが動作している証拠にはなりません。また、設定内のすべてのルールに対応しているとも限りません。デスクトップで使えるYAMLファイルを、iPhoneにそのままインポートできるとは限りません。

アプリの種類インポート前の確認事項ルールの扱い
Stashなど、Clash形式のYAMLに対応するアプリ現在のバージョンで対応するプロトコル、項目、ルールセット形式を確認する設定構造の一部は流用できますが、mihomo独自の拡張項目は個別に確認が必要です
Shadowrocketなど、独自の設定形式を使うアプリプロバイダーが提供する対応形式のサブスクリプションを選ぶノードのサブスクリプションとルール設定を別々にインポートする場合があります
その他のiOSプロキシアプリ開発元のドキュメントとApp Storeの製品ページを確認するアプリ名から推測せず、アプリが明示している解析・対応機能を基準にする

App Storeでの入手とApple IDのストア地域

まずクライアントのダウンロードページでiOS向けの案内を確認し、App Storeでアプリ名、開発元、購入情報を照合してください。App Storeでダウンロードできるアプリは、Apple Accountに設定されたストアの国または地域によって異なります。iPhoneの表示言語や「言語と地域」を変更しても、App Storeの国または地域は切り替わりません。

現在のストア地域を確認する

  1. iPhoneの「設定」を開き、画面上部に表示されているApple Accountの名前をタップします。
  2. 「メディアと購入」→「アカウントを表示」の順に進み、画面の案内に従って認証します。
  3. 「国または地域」を確認します。iOSのバージョンによって表示が多少異なる場合があるため、アカウント画面を確認してください。
  4. App Storeに戻り、アプリの正確な名前で検索して開発元を確認します。アイコンだけで判断しないでください。

アプリが見つからない場合は、ストア地域で配信されていないのか、iOSのバージョン要件を満たしていないのか、配信状況が変更されたのかを切り分けましょう。iPhoneの地域設定を何度も変更したり、サードパーティーのサイトにあるインストールボタンをApp Storeのページと見なしたりしないでください。

アカウントの国または地域を変更する前に購入条件を確認

  • Appleの案内に従い、アカウント残高、サブスクリプション、ファミリー共有、有効な支払い方法を確認してください。国または地域を変更する前に、これらの対応が必要な場合があります。
  • 自分で管理しているアカウントを使い、Apple Accountのパスワードや2ファクタ認証コードを代行インストール業者に渡さないでください。
  • アプリのダウンロードは「メディアと購入」に関する操作です。プロキシアプリをインストールするために、iCloud全体からサインアウトする必要はありません。
  • 有料アプリの購入情報はアカウントに紐づきます。今後のアップデート、再ダウンロード、購入済みアイテムの復元にも、購入時のアカウントが必要になる場合があります。

アプリの料金とプロキシサービスの料金は別です。アプリを購入しても、利用可能なノードが自動で提供されるわけではありません。また、サブスクリプションを契約済みでも、特定のアプリを購入したことにはなりません。ダウンロード後は、まずアプリが正常に起動することを確認してから設定をインポートしましょう。

サブスクリプションURLのインポート手順

まずサブスクリプション提供元のアカウントページで、利用するアプリに合った形式を選びます。mihomo用のYAML設定一式、ノードだけのサブスクリプション、他のアプリ専用の設定は、それぞれ別の入口から取得する場合があります。ファイル名が同じでも、URLがいずれもHTTPSで始まっていても、内容の形式が同じとは限りません。

  1. エクスポート形式を選ぶ:Clash形式の設定を使うアプリでは、対応するYAML形式を確認します。Shadowrocketを使う場合は、プロバイダーが対応アプリ向けと明記している入口を選びましょう。
  2. URLを最後までコピーする:パス、クエリパラメーター、トークンを省略せずに含めます。チャットアプリで改行されたり、末尾の文字が抜けたりすると、認証に失敗する場合があります。
  3. リモート設定を追加する:アプリの設定またはサブスクリプション管理画面から、「追加」「URLからダウンロード」「リモート設定」などの項目を選びます。項目名はアプリによって異なります。URLを個別ノードのサーバー欄に貼り付けないでください。
  4. ダウンロードして設定を選択する:一覧に設定名と更新日時が表示されたことを確認します。現在使用する設定を別途選ぶ必要があるアプリでは、インポート後に選択してください。
  5. プロキシグループを確認する:ポリシーまたはプロキシ画面を開き、最終的な出力先が空のグループではないことを確認して、有効なノードを選びます。

インポートに失敗したら、まずレスポンスの種類を確認

HTTP 401または403が表示された場合は、トークン、アカウントの状態、アクセス制限を確認します。404の場合は、コピーしたパスがすべて含まれているか確認してください。YAMLの解析エラーが表示されたら、実際のレスポンスがログイン画面やエラーページではないか確認します。未対応のプロトコルやルール形式が原因の場合は、エラー行を削除して接続するのではなく、利用するアプリに適したエクスポート形式を選び直してください。

ブラウザーでプロバイダーのトップページを開けても、サブスクリプションURLから設定を取得できるとは限りません。サブスクリプション用のAPIが別ドメインを使っていたり、リダイレクトされたりする場合があります。調査時はエラー文と発生時刻を記録し、認証情報を含むレスポンス全体を公開の掲示板に貼り付けないでください。

ローカルYAMLとルールの依存関係

設定ファイルが手元にある場合は、いったんiPhoneの「ファイル」アプリに保存し、クライアントのファイル読み込み機能から選択します。共有機能に対応するアプリなら、共有メニューからファイルを受け取ることもできます。読み込むのが実際の設定ファイルであることを確認してください。Webページへのショートカットや、チャットアプリによってテキスト形式に変換されたファイルではないことにも注意しましょう。

ファイルの拡張子は通常.yamlまたは.ymlですが、拡張子だけでは互換性は判断できません。設定一式にはノード、プロキシグループ、ルール、リモートルールセットなどが含まれる場合があります。rulesだけの断片にはプロキシノードが含まれません。以下は一般的なルールの優先順を示すもので、そのまま接続できる完全な設定ではありません。

# 設定例:PROXY は proxy-groups に定義済みである必要があります
rules:
  - DOMAIN-SUFFIX,example.com,DIRECT
  - IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
  - MATCH,PROXY
  • DOMAIN-SUFFIXはドメインのサフィックスで照合します。例のドメインは構文の説明用です。実際には、直結が必要なドメインに置き換えてください。
  • 192.168.0.0/16はプライベートアドレスの範囲です。すべてのローカルネットワークアドレスを網羅するわけではなく、プロキシアプリがLAN通信を必ず処理するという意味でもありません。
  • no-resolveは、このIPルールの適用時にドメインを能動的に名前解決しないようにする指定です。DNSを全体的に無効にするものではありません。
  • MATCHは最後のフォールバックとして配置します。前のルールに一致すると、通常、その接続の振り分けでは後続のルールは評価されません。

mihomoの設定を移行するときに確認する3項目

1つ目は、ポリシー名の一致です。ルールがPROXYを参照する場合、同じ名前で利用可能なメンバーを持つポリシーグループが必要です。2つ目は、リモートルールセットがダウンロードできるだけでなく、形式と動作タイプにも対応していることです。3つ目は、GEOSITEとGEOIPがそれぞれ対応するデータと実装を必要とする点です。一方への対応を、両方への対応と見なさないでください。

デスクトップ設定のコントロールポート、リッスンアドレス、TUNのルーティングパラメーターを、iOSの手順にそのまま流用しないでください。iPhoneのトンネルはアプリとシステムが連携して構築します。DNS、UDP、ルーティングの具体的な挙動は、利用するアプリの実装によって異なります。リモートサブスクリプションを変更する場合は、次回の更新で手動編集が上書きされないよう、アプリのオーバーライド機能やローカルコピーを優先して使いましょう。

初回接続とVPN設定の許可

設定をインポートしただけでは、データを読み込んだ段階です。初めて接続をタップすると、iOSからアプリによるVPN設定の追加を求められるのが一般的です。要求元がインストールしたクライアントであることを確認してから「許可」をタップし、必要に応じて端末のパスコードを入力するか認証を完了してください。ここで許可するのはシステムのネットワークトンネルであり、プロキシサービスの購入ではありません。

  1. 現在の設定が選択されていることと、プロキシグループに有効な出力先が少なくとも1つあることを確認します。
  2. ルールに基づいて通信を振り分けるモードを選びます。アプリによって「ルール」「設定」など表記が異なるため、クライアントの説明に従ってください。
  3. 「接続」をタップしてシステムのVPN設定を許可し、アプリに接続状態が表示されるまで待ちます。
  4. 「設定」→「一般」→「VPNとデバイス管理」→「VPN」を開き、該当する設定の接続状態を確認します。

ほかのVPN、DNSツール、ネットワークフィルタリングアプリを使っている場合は、同種のトンネルを使用する可能性のある接続をいったん停止し、個別にテストしてください。Network Extensionの種類が異なるアプリ同士で共存できるかは実装次第です。すべてのネットワークツールを同時に使えるとは限りません。通常のプロキシ接続の問題を解決するために、システムのセキュリティ機能を無効にしないでください。

ルール、DNS、実際の出力先を検証する

接続後は「ノードへの到達性 → ルールの適用 → 実際の通信」の順に確認します。遅延テストに成功しても、その時点でテスト先に到達できたことしか分かりません。動画、ゲーム、すべてのWebサイトが正常に利用できるとは限りません。ノードの遅延、ページの読み込み時間、帯域幅もそれぞれ異なる指標です。ミリ秒の値をダウンロード速度と混同しないでください。

再現可能な方法で一通り検証する

  1. テスト結果を確認する:選択したノード名、テスト先、タイムアウトの有無を記録します。テストが終わる前に、ポリシーを何度も切り替えないでください。
  2. プロキシ経由と分かっているサイトを開く:クライアントの接続ログで、接続先ドメイン、適用されたルール、最終的なノードを確認します。詳細なログを表示できないアプリもあるため、実際の画面に従ってください。
  3. 出口IPアドレスを比較する:同じIPアドレス確認ページを使い、切断時と接続時の結果を記録します。その確認先ドメインがプロキシポリシーに一致していなければ、結果が同じでも設定どおりの可能性があります。
  4. 直結を確認する:直結に設定したことが明確なサービスにアクセスし、引き続き利用できるか確認します。プロキシの出口だけを検証して、ローカルのサービスを見落とさないようにしましょう。

接続ログに接続先ドメインが表示されるのに名前解決に失敗する場合は、まずDNS設定とDNSサーバーへの到達性を確認してください。fake-ipを使う設定では、アプリがその方式に対応しているかも確認します。仮想的なマッピングアドレスをWebサイトの実サーバーアドレスと見なしたり、ログの合成アドレスを消す目的だけでDNS設定全体を書き換えたりしないでください。

テスト中は、可能な限りWi-Fiまたはモバイル通信のどちらかに固定し、ネットワーク切り替えによる変数を避けます。iCloudプライベートリレー、ブラウザーの既存接続、キャッシュも比較結果に影響する場合があります。古いページを閉じてリクエストを再実行し、プロキシログとあわせて確認してください。一度ページが開けたことだけでは、ルールが適用された証拠になりません。

よくあるトラブルと日常的な更新

サブスクリプションをインポートできたのに、選択できるノードがないのはなぜ?

まず、インポートしたものがノードのサブスクリプション、設定一式、個別のルールファイルのどれかを確認します。リモートのプロキシグループからノードを読み込む設定なら、そのグループのダウンロード結果と参照名も確認してください。設定ファイルの解析に成功しても、外部リソースのダウンロードがすべて完了したとは限りません。

VPNは接続済みなのにWebページを開けない場合、まず何を確認する?

プロキシグループのメンバー、ノードのテスト結果、DNSエラー、最終的に適用されたルールを順に確認します。比較のために、明らかに利用可能なノードへ一時的に切り替えても構いませんが、DNS、ルール、動作モードを同時に変更しないでください。一度に変更するのは1項目だけにし、復元できるよう元の設定を残しておきましょう。

デスクトップで使えるサブスクリプションが、iPhoneでエラーになるのはなぜ?

デスクトップ版mihomoとiOSアプリでは、プロトコル対応、ルールの解析、拡張項目の扱いが異なる場合があります。まずエラーが示す項目とアプリの対応状況を確認し、プロバイダーが提供する対応形式を選んでください。ファイル名をYAMLに変えたり、サブスクリプションURLを貼り直したりしても、解析機能の違いは解決しません。

サブスクリプションを更新したら、手動で追加したルールが消えたのはなぜ?

リモート設定の更新によって、ローカルの内容が置き換わる場合があります。個別の変更は、アプリが対応するオーバーライド、マージ機能、または独立したローカル設定に保存し、バックアップも残してください。更新後は現在の設定、プロキシグループの選択、リモートルールセットの状態を確認します。更新日時が変わったことだけで判断しないでください。

日常のメンテナンスでは、確認の順番をシンプルに保ちましょう。App Storeからアプリを更新し、必要に応じてサブスクリプションを更新してから、ノード、ルール、DNSが正常か確認します。アプリを乗り換えるときは設定形式を改めて確認し、以前のアプリのメニュー手順、リッスンポート、TUNパラメーターを新しいアプリの初期設定として流用しないでください。