前書き#
Clash for Windows が削除された後、Clash Verge は一般的な選択肢となりました(Clash for Windows が使えなくなったわけではなく、単に更新がないだけです)。このソフトウェアに移行した際、**Parsers 機能** がないことに非常に残念に思いました。
そこで、Clash Verge の設定ファイルを通じて、Parsers 機能に似たものを Clash Verge に追加する解決策を見つけました。
設定ファイル(個人修正版、簡単な機能のみ実現)#
スクリプト部分#
// `main`関数を定義
// function main(params) {
// return params;
// }
// `main`関数を定義
function main(params) {
// すべての地域
const allRegex = /自動|故障|トラフィック|公式サイト|パッケージ|空港|サブスクリプション/;
const allProxies = params.proxies
.filter((e) => !allRegex.test(e.name))
.map((e) => e.name);
// ノード選択
const Proxy = {
name: "Proxy",
type: "select",
proxies: allProxies.length > 0 ? allProxies : ["DIRECT"]
};
// フェイルオーバー
const Speedtest = {
name: "Speedtest",
type: "select",
proxies: allProxies.length > 0 ? allProxies : ["DIRECT"]
};
const groups = params["proxy-groups"] = [];
// ルール
const rules = [
"AND,(AND,(DST-PORT,443),(NETWORK,UDP)),(NOT,((GEOIP,CN))),REJECT",// quic
// "GEOSITE,Category-ads-all,REJECT", // 一部のウェブサイトにアクセスできなくなる可能性があります
"GEOSITE,sogou,REJECT",
"GEOSITE,qihoo360,REJECT",
"DOMAIN,b23.tv,REJECT",
"DOMAIN-SUFFIX,db.laomoe.com,Speedtest",
"GEOSITE,speedtest,Speedtest",
"GEOSITE,category-scholar-!cn,Proxy",
"GEOSITE,youtube,Proxy",
"GEOSITE,google,Proxy",
"GEOSITE,bilibili@!cn,Proxy",
"GEOSITE,cn,DIRECT",
"GEOSITE,private,DIRECT",
"GEOSITE,steam@cn,DIRECT",
"GEOSITE,category-games@cn,DIRECT",
"GEOSITE,geolocation-!cn,Proxy",
"GEOSITE,private,DIRECT",
"GEOSITE,telegram,Proxy",
"GEOIP,private,DIRECT,no-resolve",
"GEOIP,telegram,Proxy,no-resolve",
"GEOIP,CN,DIRECT",
"DOMAIN-SUFFIX,.cn,DIRECT",
"MATCH,Proxy"
];
// グループを挿入
groups.unshift(Proxy, Speedtest)
// ルールを挿入
params.rules = rules;
return params;
}
マージ部分#
# clash verge用のマージテンプレート
# プロファイルを強化するために使用される`Merge`形式
mode: rule # ルールモード:rule(ルール) / global(グローバルプロキシ)/ direct(グローバルダイレクト)/ script (スクリプト)
ipv6: true # IPv6の全体スイッチをオンにし、すべてのIPv6リンクとDNSリクエストのAAAAレコードをブロックします
log-level: info # ログ出力レベルを設定 (5つのレベル:silent / error / warning / info / debug)
mixed-port: 20810 # 混合ポート、HTTPとSOCKS5で1つのポートを使用
unified-delay: true # 統一遅延、遅延計算方法を変更し、ハンドシェイクなどの追加遅延を除去
tcp-concurrent: true # 【Meta専用】すべてのIPに対してTCP同時接続、最速のハンドシェイクのTCPを使用
keep-alive-interval: 15 # TCPキープアライブ間隔
geodata-mode: true # 【Meta専用】geoip.datデータベースを使用(デフォルト:falseはmmdbデータベースを使用)
geox-url: # カスタムgeodata URL、プロキシが必要な前提でgeoipとgeositeをダウンロード
geoip: "https://gcore.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geoip.dat"
geosite: "https://gcore.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geosite.dat"
mmdb: "https://gcore.jsdelivr.net/gh/Hackl0us/GeoIP2-CN@release/Country.mmdb"
find-process-mode: strict # すべてのプロセスをマッチ(always/strict/off)
global-client-fingerprint: chrome # グローバルTLSフィンガープリント、プロキシ内のclient-fingerprintより優先
# オプション: "chrome","firefox","safari","ios","random","none".
profile:
store-selected: true # 選択記録を保存
store-fake-ip: true # fake-ipを永続化
sniffer: # ドメインをスニファーするオプション設定
enable: true
parse-pure-ip: true # スニファー結果を実際のアクセスとして使用するか、デフォルトはtrue
sniff:
TLS: # TLSデフォルトスニファー443
ports: [443, 8443]
HTTP:
ports: [80, 8080-8880]
override-destination: true
force-domain: [] # このドメインに対して強制的にスニファーを実行
dns:
enable: true # 無効にするとシステムDNSを使用
prefer-h3: true # DOHのhttp/3を有効にするか
ipv6: true # IPV6解析スイッチ;falseの場合、ipv6結果は空になります
enhanced-mode: fake-ip # モード:redir-hostまたはfake-ip
listen: 0.0.0.0:1053 # DNSリスニングアドレス
use-hosts: true # システムhostsをクエリするか
fake-ip-range: 198.18.0.1/16 # fakeipのIP範囲設定、tunネットワークカードのデフォルトipもこの値を使用
fake-ip-filter: ['+.lan', '+.msftncsi.com', 'msftconnecttest.com', '+.msftconnecttest.com', '*.msftncsi.com', '*.msftconnecttest.com']
# Fake-ipフィルタ、リスト内のドメインは実際のIPを返します
default-nameserver: [223.5.5.5, 119.29.29.29]
# 非IPのdns用のdnsサーバー、純粋なIPのみサポート(Metaは暗号化できます)
nameserver: [tcp://208.67.222.222#Proxy, tcp://8.8.8.8#Proxy]
# デフォルトDNSサーバー、udp/tcp/dot/doh/doqをサポート
proxy-server-nameserver: [https://223.5.5.5/dns-query, https://1.12.12.12/dns-query]
# プロキシDNSサーバー、udp/tcp/dot/doh/doqをサポート
nameserver-policy:
"geosite:cn,private,geolocation-!cn@cn,bytedance,steam@cn,epicgames,microsoft@cn,apple@cn": [223.5.5.5#DIRECT, 119.29.29.29#DIRECT]
"geosite:steam": [tcp://1.1.1.1#Proxy]
# 指定されたドメインクエリの解析サーバー、geositeを使用でき、nameserver/fallbackクエリより優先されます
大佬のオリジナル設定ファイル(多地域多プラットフォームの分流を実現)#
スクリプト部分#
// `main`関数を定義
// function main(params) {
// return params;
// }
// `main`関数を定義
function main(params) {
// 香港地域
const hongKongRegex = /香港|HK|Hong|🇭🇰/;
const hongKongProxies = params.proxies
.filter((e) => hongKongRegex.test(e.name))
.map((e) => e.name);
// 台湾地域
const taiwanRegex = /台湾|TW|Taiwan|Wan|🇨🇳|🇹🇼/;
const taiwanProxies = params.proxies
.filter((e) => taiwanRegex.test(e.name))
.map((e) => e.name);
// 狮城地域
const singaporeRegex = /新加坡|狮城|SG|Singapore|🇸🇬/;
const singaporeProxies = params.proxies
.filter((e) => singaporeRegex.test(e.name))
.map((e) => e.name);
// 日本地域
const japanRegex = /日本|JP|Japan|🇯🇵/;
const japanProxies = params.proxies
.filter((e) => japanRegex.test(e.name))
.map((e) => e.name);
// アメリカ地域
const americaRegex = /アメリカ|US|United States|America|🇺🇸/;
const americaProxies = params.proxies
.filter((e) => americaRegex.test(e.name))
.map((e) => e.name);
// その他の地域
const othersRegex = /香港|HK|Hong|🇭🇰|台湾|TW|Taiwan|Wan|🇨🇳|🇹🇼|新加坡|SG|Singapore|狮城|🇸🇬|日本|JP|Japan|🇯🇵|アメリカ|US|States|America|🇺🇸|自動|故障|トラフィック|公式サイト|パッケージ|空港|サブスクリプション/;
const othersProxies = params.proxies
.filter((e) => !othersRegex.test(e.name))
.map((e) => e.name);
// すべての地域
const allRegex = /自動|故障|トラフィック|公式サイト|パッケージ|空港|サブスクリプション/;
const allProxies = params.proxies
.filter((e) => !allRegex.test(e.name))
.map((e) => e.name);
// 香港
const HongKong = {
name: "HongKong",
type: "url-test",
url: "http://www.gstatic.com/generate_204",
interval: 300,
tolerance: 20,
lazy: true,
proxies: hongKongProxies.length > 0 ? hongKongProxies : ["DIRECT"]
};
// 台湾
const TaiWan = {
name: "TaiWan",
type: "url-test",
url: "http://www.gstatic.com/generate_204",
interval: 300,
tolerance: 20,
lazy: true,
proxies: taiwanProxies.length > 0 ? taiwanProxies : ["DIRECT"]
};
// 狮城
const Singapore = {
name: "Singapore",
type: "url-test",
url: "http://www.gstatic.com/generate_204",
interval: 300,
tolerance: 20,
lazy: true,
proxies: singaporeProxies.length > 0 ? singaporeProxies : ["DIRECT"]
};
// 日本
const Japan = {
name: "Japan",
type: "url-test",
url: "http://www.gstatic.com/generate_204",
interval: 300,
tolerance: 20,
lazy: true,
proxies: japanProxies.length > 0 ? japanProxies : ["DIRECT"]
};
// アメリカ
const America = {
name: "America",
type: "url-test",
url: "http://www.gstatic.com/generate_204",
interval: 300,
tolerance: 20,
lazy: true,
proxies: americaProxies.length > 0 ? americaProxies : ["DIRECT"]
};
// その他
const Others = {
name: "Others",
type: "url-test",
url: "http://www.gstatic.com/generate_204",
interval: 300,
tolerance: 20,
lazy: true,
proxies: othersProxies.length > 0 ? othersProxies : ["DIRECT"]
};
// 自動
const Auto = {
name: "Auto",
type: "url-test",
url: "http://www.gstatic.com/generate_204",
interval: 300,
tolerance: 20,
lazy: true,
proxies: allProxies.length > 0 ? allProxies : ["DIRECT"]
};
// 負荷分散
const Balance = {
name: "Balance",
type: "load-balance",
url: "http://www.gstatic.com/generate_204",
interval: 300,
strategy: "consistent-hashing",
lazy: true,
proxies: allProxies.length > 0 ? allProxies : ["DIRECT"]
};
// フェイルオーバー
const Fallback = {
name: "Fallback",
type: "fallback",
url: "http://www.gstatic.com/generate_204",
interval: 300,
lazy: true,
proxies: allProxies.length > 0 ? allProxies : ["DIRECT"]
};
// 海外グループ
const G = ["Proxy", "Auto", "Balance", "Fallback", "HongKong", "TaiWan", "Singapore", "Japan", "America", "Others"];
// 国内グループ
const M = ["DIRECT", "Proxy", "Auto", "Balance", "Fallback", "HongKong", "TaiWan", "Singapore", "Japan", "America", "Others"];
// AIグループ
const AI = ["Proxy", "America", "Japan", "Singapore", "TaiWan", "HongKong", "Others"];
// 漏れ
const Final = { name: "Final", type: "select", proxies: ["DIRECT", "Global", "Proxy"] };
// 手動選択
const Proxy = { name: "Proxy", type: "select", proxies: allProxies.length > 0 ? allProxies : ["DIRECT"] };
// 海外サイト
const Global = { name: "Global", type: "select", proxies: G };
// 国内サイト
const Mainland = { name: "Mainland", type: "select", proxies: M };
// 人工知能
const ArtIntel = { name: "ArtIntel", type: "select", proxies: AI };
// YouTube動画
const YouTube = { name: "YouTube", type: "select", proxies: G };
// 哔哩哔哩
const BiliBili = { name: "BiliBili", type: "select", proxies: ["DIRECT", "HongKong", "TaiWan"] };
// 国際メディア
const Streaming = { name: "Streaming", type: "select", proxies: G };
// テレグラム情報
const Telegram = { name: "Telegram", type: "select", proxies: G };
// Googleサービス
const Google = { name: "Google", type: "select", proxies: G };
// ゲームプラットフォーム
const Games = { name: "Games", type: "select", proxies: G };
const groups = params["proxy-groups"] = [];
// ルール
const rules = [
"AND,(AND,(DST-PORT,443),(NETWORK,UDP)),(NOT,((GEOIP,CN))),REJECT",// quic
// "GEOSITE,Category-ads-all,REJECT", // 一部のウェブサイトにアクセスできなくなる可能性があります
"GEOSITE,Private,DIRECT",
"GEOSITE,Category-games@cn,Mainland",
"GEOSITE,Microsoft@cn,Mainland",
"GEOSITE,Apple@cn,Mainland",
"GEOSITE,Bing,ArtIntel",
"GEOSITE,Openai,ArtIntel",
"GEOSITE,Category-games,Games",
"GEOSITE,Github,Global",
"GEOSITE,Telegram,Telegram",
"GEOSITE,Youtube,YouTube",
"GEOSITE,Disney,Streaming",
"GEOSITE,Netflix,Streaming",
"GEOSITE,HBO,Streaming",
"GEOSITE,Primevideo,Streaming",
"GEOSITE,Bilibili,BiliBili",
"GEOSITE,Google,Google",
"GEOSITE,Geolocation-!cn,Global",
"GEOIP,CN,Mainland,no-resolve",
"MATCH,Final"
];
// グループを挿入
groups.unshift(HongKong, TaiWan, Japan, Singapore, America, Others, Auto, Balance, Fallback);
groups.unshift(Final, Proxy, Global, Mainland, ArtIntel, YouTube, BiliBili, Streaming, Telegram, Google, Games);
// ルールを挿入
params.rules = rules;
return params;
}