ルール分岐:通信先に応じて出口を選ぶ
ルールモードは日常利用に適しています。カーネルは設定順にドメイン、アドレス、ルールセットを照合し、該当した通信を指定の出口へ渡します。個別のドメインを先に、最後にフォールバックルールを置き、条件の広いルールが先に通信を捕捉しないようにします。問題を調べるときは接続ログを開き、実際に適用されたルールを確認してください。ブラウザーでページが開くかどうかだけでは判断できません。以下の例はDIRECTルールのみで、プロキシサーバーは含みません。プロキシ経由にする場合は、完全な設定内で対応するノードまたはプロキシグループを定義してから、ルールで参照してください。
rules:
- DOMAIN-SUFFIX,example.com,DIRECT
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
- MATCH,DIRECT
プロキシグループの切り替え:手動選択と自動テスト
プロキシグループを使うと、複数の出口をまとめてルールから参照できます。手動選択にはselect、テスト結果に基づく選択にはurl-test、障害時の切り替えにはfallbackを検討してください。自動テストで測るのは指定先への応答状況であり、ダウンロード速度ではありません。テスト先、タイムアウト、ネットワーク環境によって結果は変わります。以下ではDIRECTを例としてメンバーに加え、ルールから参照する「自動選択」グループを定義しています。実際に使うときは、完全な設定内に存在するノード名に置き換えてください。グループ名だけをコピーしてもプロキシ接続はできません。
proxy-groups:
- name: 自動選択
type: url-test
proxies:
- DIRECT
url: https://www.gstatic.com/generate_204
interval: 300
rules:
- MATCH,自動選択
TUNによる全通信の制御:システムプロキシの対象外をカバー
システムプロキシを参照しないアプリは、システムプロキシを有効にしただけでは通信を捕捉できません。TUNは仮想NICとルーティングで通信を取り込み、対象範囲を補います。通常、管理者権限またはクライアントのサービス機能が必要です。TUNが変えるのは通信をカーネルへ届ける方法であり、ルールモードを自動的にグローバルプロキシへ切り替えるものではありません。まず通常の接続が使えることを確認してからTUNを有効にし、ルーティング、DNS、ほかの仮想NICとの競合を順に確認してください。以下はmihomoの設定例です。プロトコルスタックや権限は、クライアントとOSに合わせて調整してください。
tun:
enable: true
stack: system
auto-route: true
auto-detect-interface: true
dns-hijack:
- any:53
サブスクリプション管理:完全な設定とノード一覧を区別する
完全な設定を含むサブスクリプションには、通常ノード、プロキシグループ、ルールが含まれます。読み込み後、該当する設定を選択して初めて有効になります。一方、proxy-providersはノード一覧を読み込む機能で、完全な設定の代わりにはなりません。更新前にローカルルールやオーバーライドを保存し、直接編集した内容が次回の更新で上書きされないようにしましょう。以下はローカルプロバイダーの構成例です。指定したパスにファイルが実在し、プロバイダー形式のproxiesリストを含んでいる必要があります。また、完全な設定内のプロキシグループでuseを使って参照してください。リモートのサブスクリプションURLにはアクセス情報が含まれる場合があるため、公開しないでください。
proxy-providers:
local-proxies:
type: file
path: ./providers/local.yaml
proxy-groups:
- name: 手動選択
type: select
use:
- local-proxies
外部コントロールパネル:カーネルの稼働状況を確認
コントロールAPIでは、接続の確認、プロキシグループの切り替え、稼働状況の管理ができます。サーバーやカーネル単体での運用に適しています。デスクトップクライアントには管理画面が統合されていることが多く、通常の利用でAPIを別途公開する必要はありません。待ち受け先は可能な限りローカルループバックに限定してください。リモート接続が必要な場合は、認証とアクセスを制限したネットワーク経路を併用します。以下はローカル待ち受けの例です。ポートは混合ポートと重複させないでください。コントロールAPIを設定してもWebパネルが自動で用意されるわけではありません。パネルのファイル、アクセス方法、認証は別途設定が必要です。
external-controller: 127.0.0.1:9090
log-level: info