Clash链式代理配置

前置条件:本文需要 Clash Verge Rev(基于 Clash.Meta / Mihomo 内核)。dialer-proxy 字段是 Clash.Meta 专属特性,原版 Clash 及其他内核不支持。

1. 什么是链式代理

链式代理(Proxy Chain)指流量依次经过多个代理节点,最终从末端节点出口。典型场景:本机 → 中转节点(机场) → 落地节点(静态住宅 IP),这样既能利用机场线路的稳定性,又能获得住宅 IP 的「干净」出口。(Claude Code: ???)

%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#3B82F6', 'primaryTextColor': '#1E3A5F', 'primaryBorderColor': '#2563EB', 'lineColor': '#60A5FA', 'secondaryColor': '#10B981', 'tertiaryColor': '#F59E0B'}}}%%
flowchart LR
    A(["本机"]) -->|"加密隧道"| B["中转节点"]
    B -->|"SOCKS5"| C["落地节点"]
    C -->|"目标请求"| D(["目标网站"])

    classDef primary fill:#3B82F6,stroke:#2563EB,color:#fff
    classDef success fill:#10B981,stroke:#059669,color:#fff
    classDef warning fill:#F59E0B,stroke:#D97706,color:#fff

    class A primary
    class B warning
    class C success
    class D primary

中转节点由机场订阅提供,落地节点是购买的静态住宅 IP。Clash.Meta 通过落地节点上的 dialer-proxy 字段将两者串联:本机先通过加密隧道连到中转节点,再由中转节点代表本机发起对落地节点的 SOCKS5 连接,流量链路由内核自动编排,无需在中转节点上做任何配置。

2. 购买静态住宅 IP

这里使用 Webshare 的静态住宅代理服务。

购买后在控制台获取代理地址、端口、用户名和密码:

控制台概览

代理列表

代理详情

  • 可以买 Private,共享人数少一点。
  • 刷新 IP:ASN 选择 RCN 能刷出来纯净度高一点的 IP。

3. Clash Verge Rev 脚本配置

在 Clash Verge Rev 的「脚本」功能中添加以下 JavaScript 代码。脚本会自动向现有订阅中注入链式代理组,无需手动修改订阅配置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
// 链式代理组名称
const chainName = "🐶链式代理";
// 中转节点选择器名称
const dialerProxyName = chainName + "中转节点选择";

// 指定要挂载的代理组(留空则默认取订阅中的第一个代理组)
const addToSelectName = "";

// 落地节点列表(SOCKS5 协议)
const appendProxies = [
{
"name": "🐺家宽-xxxxxxx",
"dialer-proxy": dialerProxyName,
"type": "socks5",
"server": "xxxxxxx",
"port": 7137,
"username": "your-username",
"password": "your-password"
}
];

// 对代理名称中的正则特殊字符进行转义,防止 exclude-filter 误匹配
function escapeRegex(str) {
return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
}

// 代理组定义
const appendProxyGroups = [
{
"name": dialerProxyName,
"type": "select",
"include-all": true,
"exclude-filter": appendProxies.map(obj => escapeRegex(obj.name)).join('|')
},
{
"name": chainName,
"type": "select",
"proxies": appendProxies.map(obj => obj.name)
}
];

function main(config, profileName) {
const proxies = config.proxies || [];
config.proxies = proxies.concat(appendProxies);

const proxyGroups = config["proxy-groups"] || [];
let pg;
if (addToSelectName) {
pg = proxyGroups.find(obj => obj.name === addToSelectName);
} else if (proxyGroups.length) {
pg = proxyGroups[0];
}
if (pg) {
const pgps = pg.proxies || [];
pg.proxies = [chainName].concat(pgps);
}
config["proxy-groups"] = proxyGroups.concat(appendProxyGroups);

return config;
}

脚本引用自:https://linux.do/t/topic/953740

3.1 使用步骤

  1. 在「中转节点选择」组里选一个机场节点作为中转
  2. 在「链式代理」组里选一个落地节点(如有多个住宅 IP)
  3. 在「节点选择」等常规代理组中,切换到「链式代理」即可启用链路

3.2 脚本合并

如果已有全局脚本在使用,可以通过「套娃」方式合并:把旧脚本的 main 函数重命名,在新脚本的 main 中先调用旧函数,再执行新逻辑。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/* 新脚本 */
function main(config, profileName) {
// 先执行旧脚本逻辑
config = xxx_main(config, profileName);

// 新增规则示例(全局变量移到函数内避免冲突)
const prependRules = [
"DOMAIN-SUFFIX,example.com,DIRECT" // 替换为你需要直连的域名
];

const rules = config.rules || [];
config.rules = prependRules.concat(rules);

return config;
}

/* 原全局脚本(重命名 main → xxx_main) */
// 原全局变量...

function xxx_main(config, profileName) {
// 原逻辑...
return config;
}

操作要点:

  1. 找到原脚本 function main(config, profileName),加前缀重命名(如 xxx_main
  2. 新脚本 main 开头调用重命名后的函数
  3. 将新脚本全局变量移到 main 函数内部,避免命名冲突

4. 延迟影响

链式代理会引入额外的往返延迟(RTT)。最终延迟约等于「本机到中转节点延迟」加上「中转节点到落地节点延迟」之和,通常比直连高 50~200 ms。选择地理位置合适的中转节点可以有效控制叠加损耗。

5. 验证

配置完成后,通过以下两种方式确认链路是否生效:

1. 检查出口 IP

访问以下站点,确认显示的 IP 为购买的住宅 IP:

2. 在 Clash 面板确认双跳链路

打开 Clash Verge Rev 的「连接」(Connections)面板,发起一个请求后查看连接详情,Chains 字段应显示两跳节点,例如:

1
🐺家宽-xxxxxxx → 🐶链式代理中转节点选择 → <机场节点名>

如果 Chains 只显示一个节点,说明 dialer-proxy 未生效,需排查代理组名称是否与脚本中定义的完全一致。

6. 故障排查

现象可能原因排查方法
出口 IP 未变为住宅 IP未切换到「链式代理」组检查「节点选择」等顶层组是否已选择「链式代理」
Connections 面板 Chains 只有一跳dialer-proxy 名称与代理组名称不匹配对比脚本中 dialerProxyName 和实际代理组名,注意 emoji 和空格
落地节点连接失败SOCKS5 认证信息错误或端口不通curl -x socks5h://user:pass@host:port https://ip.sb 直接测试落地节点连通性
中转节点选择组为空include-all 未生效确认 Clash Verge Rev 版本支持 include-all,升级到最新版

7. 参考资料