banner
oldcatY

oldcatY

中轻度LoveLive厨,主推莲团,二推水+虹团(缪团是神,星团……)
twitter
github
bilibili
steam

【科学上网】Clash VergeでClash for WindowsのParsers機能を達成する

前書き#

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;
}
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。