用 Clash Verge 同时处理两种本机代理需求:
- 按应用分流:指定桌面应用始终使用某个代理组。
- 按端口分流:只有主动连接本地代理端口的程序才使用代理。
- 其他流量默认直连。
下面让 ChatGPT Desktop 固定使用日本节点,浏览器通过本地端口按需使用代理。
最终效果
配置完成后,扩展脚本会按顺序处理三类流量:
- ChatGPT Desktop 按可执行文件路径进入
🤖GPT代理组。 - 进入本地
26001端口的流量使用🔰国外流量代理组。 - TUN 捕获到的其他应用流量全部直连。
ChatGPT Desktop
→ 🤖GPT
→ 日本节点
Browser
→ 127.0.0.1:26001
→ 🔰国外流量
├─ 🤖GPT
└─ 🌍其他
Other Apps
→ DIRECT
浏览器通过 SwitchyOmega 连接本地代理 127.0.0.1:26001,按需启用。
配置步骤
-
在 Clash Verge 中开启 TUN,关闭系统代理,并手动选择 Rule 模式。
-
在 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-groups 和 rules,订阅原有的代理组和规则不会保留。
添加其他应用
按应用分流前,先确定进程名或可执行文件的完整路径。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 直连规则。其他匹配方式可查看路由规则文档。