Clash链式代理配置
2026/7/3大约 4 分钟
0.前置条件
前置条件:本文需要 Clash Verge Rev(基于 Clash.Meta / Mihomo 内核)。dialer-proxy 字段是 Clash.Meta 专属特性,原版 Clash 及其他内核不支持。
1. 什么是链式代理
链式代理(Proxy Chain)指流量依次经过多个代理节点,最终从末端节点出口。典型场景:本机 → 中转节点(机场) → 落地节点(静态住宅 IP),这样既能利用机场线路的稳定性,又能获得住宅 IP 的「干净」出口。

中转节点由机场订阅提供,落地节点是购买的静态住宅 IP。Clash.Meta 通过落地节点上的 dialer-proxy 字段将两者串联:本机先通过加密隧道连到中转节点,再由中转节点代表本机发起对落地节点的 SOCKS5 连接,流量链路由内核自动编排,无需在中转节点上做任何配置。
2. 购买静态住宅 IP
一些提供纯净IP的网站参考:
尽量买静态住宅,IP会稳定一些
3. Clash Verge Rev 脚本配置
在 Clash Verge Rev 的「脚本」功能中添加以下 JavaScript 代码。脚本会自动向现有订阅中注入链式代理组,无需手动修改订阅配置。


// 链式代理组名称
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 使用步骤
- 在「中转节点选择」组里选一个机场节点作为中转

- 在「链式代理」组里选一个落地节点(如有多个住宅 IP)

- 在「节点选择」等常规代理组中,切换到「链式代理」即可启用链路

3.2 脚本合并
如果已有全局脚本在使用,可以通过「套娃」方式合并:把旧脚本的 main 函数重命名,在新脚本的 main 中先调用旧函数,再执行新逻辑。
/* 新脚本 */
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;
}操作要点:
- 找到原脚本 function main(config, profileName),加前缀重命名(如 xxx_main)
- 新脚本 main 开头调用重命名后的函数
- 将新脚本全局变量移到 main 函数内部,避免命名冲突
4. 延迟影响
- 链式代理会引入额外的往返延迟(RTT)。最终延迟约等于「本机到中转节点延迟」加上「中转节点到落地节点延迟」之和,通常比直连高 50~200 ms。选择地理位置合适的中转节点可以有效控制叠加损耗。
- 并且因为短板效应,带宽会按整个链路中最低的一个
5. 验证
配置完成后,通过以下两种方式确认链路是否生效:
- 检查出口 IP
访问以下站点,确认显示的 IP 为购买的住宅 IP:
- 在 Clash 面板确认双跳链路
打开 Clash Verge Rev 的「连接」(Connections)面板,发起一个请求后查看连接详情,Chains 字段应显示两跳节点,例如:
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,升级到最新版 |
