ノードの数がいくら多くても、スケジューリングがうまくできなければ意味がありません。混雑する時間帯にいちいち手動でノードを切り替えたり、深夜に放置している間にノードが落ちても誰も気づかなかったり……この記事では3種類の自動化されたプロキシグループを使って、スケジューリングをすべてClashクライアントに任せる方法を紹介します。目指すのは速いときはより速く、落ちたときは気づかせないことです。

3種類の自動プロキシグループのおさらい

種類スケジューリングの考え方最適なシーン
url-test定期的に全ノードの速度を測定し、常に最速のノードを使う日常的なブラウジング、低遅延を重視する場合
fallbackリストの順に生存確認を行い、最初に生きているノードを使う主系・副系の優先順位が明確なシーン
load-balance異なる接続を複数のノードに分散させるマルチスレッドダウンロード、単一ノードの帯域制限回避

url-test:toleranceでチャタリングを防ぐ

デフォルト設定のurl-testには厄介な問題があります。2つのノードの遅延が近いと切り替えが頻発してしまい、切り替えのたびに進行中の接続が切れてしまう可能性があります。解決策はtoleranceを設定することです。

チャタリング防止付きのurl-test
proxy-groups:
  - name: "自動速度テスト"
    type: url-test
    proxies: [香港 01, 香港 02, 東京 01, シンガポール 01]
    url: "http://www.gstatic.com/generate_204"
    interval: 300
    tolerance: 50   # switch only if 50ms+ faster than current

意味は「新しいノードが現在のノードより50ms以上速くなければ切り替えない」ということです。数値は必要に応じて調整し、大きくするほど安定志向、小さくするほど積極的な切り替えになります。

fallback:主系・副系構成の正しい使い方

高品質な専用回線と数本の一般的な回線を持っている場合、fallbackが最適です。通常時は専用回線を常に使い、専用回線に障害が起きると自動的に格下げされ、復旧すれば自動的に元に戻ります。

主系・副系のfallback
proxy-groups:
  - name: "主系・副系切り替え"
    type: fallback
    proxies: [香港-専用回線, 香港-一般01, アメリカ-バックアップ]   # priority order
    url: "http://www.gstatic.com/generate_204"
    interval: 120    # check more often for faster failover

ここで注意したいのは、proxiesの並び順がそのまま優先順位になるという点です。検知間隔はurl-testより短めに設定しておくと、フェイルオーバーが十分に速くなります。

load-balance:2種類の振り分け方式

load-balance の例
proxy-groups:
  - name: "ロードバランス"
    type: load-balance
    proxies: [香港 01, 香港 02, 香港 03]
    url: "http://www.gstatic.com/generate_204"
    interval: 300
    strategy: consistent-hashing   # or: round-robin
  • consistent-hashing:同じ宛先サイトへの通信は常に同じノードに固定されるため、ログイン状態が乱れません。通常はこちらを推奨します。
  • round-robin:接続を各ノードへ順番に割り振ります。マルチスレッドダウンロードの速度向上には効果的ですが、一部のサイトではIPの変化により再ログインを求められることがあります。

組み合わせ技:ネストで「速くて安定した」体系をつくる

プロキシグループは他のプロキシグループを参照できます。次の3階層構成はコミュニティでも評判の良い方法です。

ネスト構成の例
proxy-groups:
  # Layer 1: user-facing switch
  - name: "ノード選択"
    type: select
    proxies: [自動スケジューリング, 香港専用回線, 手動選択]

  # Layer 2: auto scheduling with failover
  - name: "自動スケジューリング"
    type: fallback
    proxies: [低遅延グループ, ロードバランスグループ]
    url: "http://www.gstatic.com/generate_204"
    interval: 120

  # Layer 3: workers
  - name: "低遅延グループ"
    type: url-test
    proxies: [香港 01, 香港 02, 東京 01]
    url: "http://www.gstatic.com/generate_204"
    interval: 300
    tolerance: 50

  - name: "ロードバランスグループ"
    type: load-balance
    proxies: [シンガポール 01, シンガポール 02, アメリカ 01]
    url: "http://www.gstatic.com/generate_204"
    interval: 300
    strategy: consistent-hashing

普段の通信は「低遅延グループ」で自動速度テストされたノードを使い、グループ全体が利用できなくなるとfallbackによって自動的に「ロードバランスグループ」に切り替わります。手動で切り替えたい場合は「ノード選択」でワンクリックで変更できます。3つの階層がそれぞれの役割を担う構成です。

パフォーマンスに関する注意 urlを持つプロキシグループはそれぞれ定期的に速度テストのリクエストを送信します。グループ数が多すぎたりintervalが短すぎたりすると、無視できないバックグラウンド通信量が発生します。一般的な用途なら自動グループ3〜5個、intervalは300秒程度で十分です。

結局どれを選ぶべきか:一言でまとめると

細かいパラメータの話を読んでも判断に迷う場合は、こう考えてみましょう。どのノードでもいいから、とにかく最速がいい→url-test。主系・副系の優先順位がはっきりしている→fallback。帯域を極限まで使い切りたく、時々の再ログインも気にしない→load-balance。ほとんどの人は日常使いであればurl-testグループ1つで十分で、fallbackとload-balanceは「はっきりした要望が出てきたとき」に追加する上級者向けの選択肢です。最初から複雑な構成を目指す必要はありません。

プロキシグループが機能していないときの調査方向

設定したのにスケジューリングが機能していないように見える場合は、次の順で確認しましょう。

  1. rulesがそのグループを本当に参照しているか確認する:プロキシグループを定義しただけでは使われません。何らかのルール(または最終的なMATCH)がそのグループを指していなければ機能しません。これは最も見落とされやすいポイントです。
  2. コントロールパネルのプロキシページでグループ内のノードの状態を確認する:グループ内のノードがすべてタイムアウトまたはオフラインになっていれば、url-test/load-balanceが「機能していないように見える」のは当然で、実際には選べるノードがない状態です。
  3. urlの速度テスト先が到達可能かを確認する:デフォルトのgenerate_204アドレスは、一部のネットワーク環境ではブロックされていることがあり、その場合すべての測定がタイムアウトになります。別の同種の検証用アドレスに変えて試してみましょう。
  4. fallbackのintervalが長すぎないか確認する:検知間隔を600秒以上に設定していると、ノード障害の検知と切り替えに時間がかかり、体感的には「機能していない」ように感じられます。

スケジューリングに一発で正解となる設定はありません。まずは最もシンプルな単層のurl-testグループでしばらく運用し、実際に困った点を観察してから、必要に応じてfallbackやload-balanceを重ねていく方が、最初から3階層構成を組むよりも維持しやすくなります。

多層ネスト構成に時間をかける価値があるのはどんなときか

この記事の前半で紹介した3階層構成は、すべての人に必要なものではありません。複雑なスケジューリングを組む前に、次の点を自問してみましょう。自宅やオフィスに品質の異なる複数の回線があり、主系・副系を分ける必要があるか。マルチスレッドダウンロードを頻繁に行い、単一ノードの帯域では明らかに不足しているか。「ノードが突然落ちたのに誰も気づかなかった」という経験がすでにあるか。これらの答えの多くが「ない」であれば、シンプルなurl-testグループだけで十分で、「見た目が本格的」という理由だけで設定を積み重ねる必要はありません。逆に、家族やチーム全体のネットワーク出口を提供している場合は、多層スケジューリングによる安定性の向上は実質的なメリットとなり、時間をかけて調整する価値があります。

もう一つ、プロキシグループの名前はできるだけ直感的に付けましょう(例えば「香港専用回線」「ロードバランス-シンガポール」など)。半年後に自分で設定ファイルを開いたときも、なぜこの設計にしたのかが一目でわかり、select/fallback/url-testが並ぶ中で頭を抱えることもなくなります。

まとめ

3種類のプロキシグループはそれぞれ役割が異なります。url-testは「常に最速」を追求し、ほとんどの日常的なシーンに適しています。fallbackは「主系・副系の明確な区別」を追求し、回線の優先順位がはっきりしているユーザーに適しています。load-balanceは「帯域を使い切る」ことを追求し、マルチスレッドダウンロードや単一ノードの帯域制限を避けたいシーンに適しています。toleranceintervalという2つのパラメータを軽視してはいけません。正しく調整すれば、原因不明の「ノードのチャタリング」や「切り替えが遅い」といった悩みをかなり減らせます。まずはシンプルなurl-testグループから始め、本当に必要になったタイミングで機能を積み重ねていく方が、最初から複雑な構成を組むよりも、多くの人の実際の使い方に合っています。