返回笔记索引

Notes

Clash Verge 按应用与端口分流

用 Clash Verge 同时处理两种本机代理需求:

  • 按应用分流:指定桌面应用始终使用某个代理组。
  • 按端口分流:只有主动连接本地代理端口的程序才使用代理。
  • 其他流量默认直连。

下面让 ChatGPT Desktop 固定使用日本节点,浏览器通过本地端口按需使用代理。

最终效果

配置完成后,扩展脚本会按顺序处理三类流量:

  1. ChatGPT Desktop 按可执行文件路径进入 🤖GPT 代理组。
  2. 进入本地 26001 端口的流量使用 🔰国外流量 代理组。
  3. TUN 捕获到的其他应用流量全部直连。
ChatGPT Desktop
    → 🤖GPT
    → 日本节点

Browser
    → 127.0.0.1:26001
    → 🔰国外流量
       ├─ 🤖GPT
       └─ 🌍其他

Other Apps
    → DIRECT

浏览器通过 SwitchyOmega 连接本地代理 127.0.0.1:26001,按需启用。

配置步骤

  1. 在 Clash Verge 中开启 TUN,关闭系统代理,并手动选择 Rule 模式。

  2. 在 Clash Verge 的扩展脚本中填入:

    Clash Verge 扩展脚本入口

    function main(config, profileName) {
      // 创建一个仅供主动连接的程序使用的本地 HTTP/SOCKS 混合端口。
      // 浏览器通过 SwitchyOmega 等工具决定是否连接这个端口。
      const browserProxyPort = 26001;
      config["mixed-port"] = browserProxyPort;
       
      // 从订阅中提取所有节点名称。
      const nodes = (config.proxies || [])
        .map((proxy) => proxy.name)
        .filter(Boolean);
       
      // 这里将日本节点作为示例应用的首选节点;其他地区单独折叠到一个组里。
      const japanNodes = nodes.filter((name) => name.includes("日本"));
      const otherNodes = nodes.filter((name) => !name.includes("日本"));
       
      // 订阅可能暂时没有日本节点,此时退回全部节点,
      // 避免生成空代理组导致配置加载失败。
      const gptNodes = japanNodes.length > 0 ? japanNodes : nodes;
       
      // 建立应用与端口分流所需的代理组。
      config["proxy-groups"] = [
        {
          name: "🤖GPT",
          type: "select",
          proxies: gptNodes,
        },
        {
          name: "🌍其他",
          type: "select",
          proxies: otherNodes.length > 0 ? otherNodes : nodes,
        },
        {
          name: "🔰国外流量",
          type: "select",
          proxies: ["🤖GPT", "🌍其他"],
        },
      ];
       
      config.rules = [
        // 按应用分流:TUN 捕获流量后,按可执行文件的完整路径
        // 将 ChatGPT Desktop 固定送到 GPT 代理组。
        "PROCESS-PATH,/usr/lib/chatgpt/ChatGPT,🤖GPT",
       
        // 按端口分流:显式连接本地 26001 端口的程序统一走“国外流量”。
        `IN-PORT,${browserProxyPort},🔰国外流量`,
       
        // TUN 捕获到、但没有被上面规则指定的程序全部直连。
        "IN-TYPE,TUN,DIRECT",
       
        // 其他入站类型和情况也使用直连兜底。
        "MATCH,DIRECT",
      ];
       
      return config;
    }

这份脚本会重建 proxy-groupsrules,订阅原有的代理组和规则不会保留。

添加其他应用

按应用分流前,先确定进程名或可执行文件的完整路径。Linux 上可以查找正在运行的程序,例如:

pgrep -af chatgpt

Fedora 上的 ChatGPT Desktop 当前可以看到:

/usr/lib/chatgpt/ChatGPT

对应的规则是:

PROCESS-PATH,/usr/lib/chatgpt/ChatGPT,🤖GPT

其他应用同理:

PROCESS-PATH,/path/to/application,代理组

分流规则会按从上到下的顺序匹配。新增的应用规则必须放在:

IN-TYPE,TUN,DIRECT

之前,否则该应用会先命中 TUN 直连规则。其他匹配方式可查看路由规则文档