モジュール
Chuteは、再利用可能で共有可能なルール、スクリプト、MitMホスト、DNSマッピングで設定を拡張するための外部モジュールファイル(.sgmodule)をサポートしています。モジュールはSurgeモジュール形式に従います。
モジュールは[Module]セクションで定義されます:
[Module]
https://example.com/my-module.sgmodule
/Users/me/.chute/custom-module.sgmodule
~/.chute/another-module.sgmodule
http://とhttps://のモジュールはリモートから取得されます。ローカルファイルは素のパスで書きます — /path/to/local-module.sgmodule または ~/.chute/local-module.sgmodule — 設定が書き戻されるときもこの形式です。file:/// URLで書いても動作します。読み取れないローカルモジュールファイルは、ログに警告を残して読み飛ばされます。
モジュールファイル構造
.sgmoduleファイルはメイン設定ファイルと同じ構文に従います。サポートされるセクション:
| セクション | 目的 |
|---|---|
[MITM] |
MitMホストリストにホスト名を追加 |
[Script] |
JavaScriptスクリプトを登録 |
[URL Rewrite] |
URL書き換えルールを追加 |
[Header Rewrite] |
ヘッダー書き換えルールを追加 |
[Rule] |
ルーティングルールを追加 |
[Host] |
DNSホスト-IPマッピングを追加 |
[Map Local] |
モックレスポンスのルールを追加 |
[Body Rewrite] |
ボディ書き換えルールを追加 |
[General] |
いくつかのリスト型オプションを拡張(下記参照) |
互換性のため、モジュール内の
[DNS]セクションは[Host]のエイリアスとして受け付けられます。
モジュールメタデータ
モジュールにはメタデータディレクティブ(#!で始まる行)を含めることができます:
#!name = My Custom Module
#!desc = Blocks ads and trackers for example.com
#!system = ios,macos
| ディレクティブ | 説明 |
|---|---|
#!name |
モジュール名(UIに表示) |
#!desc |
モジュールの説明 |
#!system |
プラットフォームフィルタ: ios、macos(カンマ区切り) |
#!arguments |
モジュール変数をデフォルト値付きで宣言(例: #!arguments = var1:default1, var2:default2) |
#!system_version |
Surgeの最低システムバージョン。情報として保持され、強制はされません |
#!REQUIREMENT |
Surgeのバージョン要件(//!REQUIREMENTとも書けます)。記録されますが無視されます |
#!systemはモジュールエディターに表示される情報メタデータです。現在は読み込みを制限せず、モジュールは全てのプラットフォームで適用されます。
#!argumentsは複数回記述でき、後の宣言が前の宣言を上書きします。モジュール本文中の{{{variable}}}プレースホルダーは、その変数の#!argumentsのデフォルト値に置換され、デフォルト値が宣言されていなければ空文字列になります。現在、モジュールの引数を上書きする手段を提供しているアプリは無いため、常に宣言されたデフォルト値が使われます。
#!IOS-ONLY、#!MACOS-ONLY、#!TVOS-ONLYを前に付けた行は、そのプラットフォームでだけ適用され、ほかでは取り除かれます。モジュール内でも設定ファイル本体でも、どこにあっても同じです:
[Rule]
#!IOS-ONLY DOMAIN-SUFFIX,mobile-ads.example,REJECT
#!MACOS-ONLY PROCESS-NAME,Updater,REJECT
アプリが設定を保存するとき、プレフィックスは書かれたまま保持されます。このプラットフォームで除外された行はファイルから削除されることもコメントに変わることもないため、同じプロファイルが他のプラットフォームでもそのまま機能します。
モジュール例
#!name = Ad Block Module
#!desc = Block common ad domains
#!system = ios,macos
[Rule]
DOMAIN-SUFFIX,doubleclick.net,REJECT
DOMAIN-SUFFIX,googlesyndication.com,REJECT
DOMAIN-SUFFIX,googleadservices.com,REJECT
[Host]
localhost = 127.0.0.1
[MITM]
hostname = *.google-analytics.com
[URL Rewrite]
^https://example\.com/old-api https://example.com/new-api 302
モジュールの
hostnameの値に含まれる%APPEND%/%INSERT%ディレクティブは取り除かれ、ホスト名はMitMリストにマージされます。ホスト名の先頭に付く除外プレフィックス-はそのまま保持されます。
モジュールの[General]セクションでは、%APPEND%(末尾に追加)または%INSERT%(先頭に追加)を使って、実行中の設定の5つのリスト型オプション(skip-proxy、tun-excluded-routes、tun-included-routes、dns-server、always-real-ip)を拡張できます。マージ自体は5つすべてで行われます。2つのルートリストをどのプラットフォームのトンネルが読むかは、含めるルートと除外ルートを参照してください。値はモジュールの適用時にマージされ、削除または無効化されると取り除かれます。リスト全体の置き換えはサポートされないため、ディレクティブのない値も通知付きで末尾に追加されます。その他の[General]キーは通知を出して無視されます。
[General]
skip-proxy = %APPEND% *.corp.example, 10.20.0.0/16
モジュールライフサイクル
- モジュールはメイン設定の解析後に読み込まれます。
- モジュールからのルール、スクリプト、MitMホスト、DNSホストはランタイムマネージャーに追加されます。
- モジュールの
[Rule]の行は、Tailscaleの自動ルールの後、設定自身のルールの前に、モジュールの読み込み順で並びます。Surgeと同じで、広告ブロックモジュールのREJECTが設定内のより前のルールに隠されることはありません。 - モジュールからの
[Map Local]、[Body Rewrite]、[General]のマージは、設定の再読み込み後にもう一度適用されます。 - モジュールが削除または無効化されると、その全てのルール、スクリプト、ホストが登録解除されます。
- リモートモジュールのコンテンツはトンネル起動時に取得され、設定の再読み込みで
[Module]のURLリストが変更された場合にのみ再取得されます。
本ページは英語版からの翻訳です。内容に相違がある場合は、英語版が優先されます。