ClashVerge使用
系统代理 / Tun 模式
代理模式决定本机网络请求程序发出的流量如何抵达监听在本地的代理程序,即入站。
| 代理模式 | 说明 | 特点 |
|---|---|---|
| 系统代理 | 1. 代理程序会在系统**“约定”的特定位置(如注册表、系统变量等)设置好代理程序监听请求的端口信息,进行网络请求的应用会自发性地尝试读取这部分信息,并将请求发送至代理程序。不同操作系统的“约定”方式各异。 2. 系统代理更像是一种行业内的“约定”,并非所有程序都遵守这种非强制性的“约定”**,最终采取哪种方式发生请求往往取决于开发人员的意愿。 | 1. 具有自发性,网络请求程序尝试使用”约定“配置或使用网络请求程序里额外指定的配置。 2. 不能代理 UDP流量(如游戏数据包)。 |
| Tun 模式 | 代理程序会创建一张虚拟网卡,通过配置操作系统的路由将网络请求重定向到这张虚拟网卡,代理程序从虚拟网卡中读取并处理这些网络请求。 与系统代理不同的是,该步骤发生在网络请求程序发出请求之后,因此这种方法不依赖开发人员的意愿。 | 1. 拦截和处理所有流量(TCP/UDP)重定向到本地的代理程序。 2.网络请求程序无需额外配置。 |
规则/ 全局 / 直连模式
路由模式决定监听在本地的代理程序的流量如何出去,即出站。
| 路由模式 | 说明 |
|---|---|
| 规则模式 | 根据配置文件中的规则(集)进行条件匹配,决定流量是从哪个代理节点/本地网络出去。 |
| 全局模式 | 所有流量均从手工选定的代理节点/本地网络出去。 |
| 直连模式 | 所有流量均从本地网络出去。 |
全局扩展脚本

CAUTION
- DOMAIN-SUFFIX - 域名后缀匹配,
DOMAIN-SUFFIX,google.com,代理策略匹配 *.google.com - DOMAIN-KEYWORD - 域名关键词匹配,
DOMAIN-KEYWORD,google,代理策略匹配包含 google 的域名
js
//https://www.clashverge.dev/guide/script.html#_1
// 规则
function genRule(proxyGroupName) {
return [
// IPv4地址段,处理局域网内(公司内部系统)的访问
`IP-CIDR,127.0.0.1/32,DIRECT,no-resolve`,
`IP-CIDR,172.16.0.0/12,DIRECT,no-resolve`,
`IP-CIDR,192.168.0.0/16,DIRECT,no-resolve`,
//定义不用翻墙访问的地址
`DOMAIN-SUFFIX,cn,DIRECT`, //国内网站直连
`DOMAIN-SUFFIX,cloudflare.com,DIRECT`,
//定义需要翻墙的地址
`DOMAIN-SUFFIX,github.com,${proxyGroupName}`,
`DOMAIN-SUFFIX,github.io,${proxyGroupName}`, // Github Pages
`DOMAIN-SUFFIX,ghcr.io,${proxyGroupName}`, // Github的docker镜像
`DOMAIN-SUFFIX,githubusercontent.com,${proxyGroupName}`,
`DOMAIN-SUFFIX,githubassets.com,${proxyGroupName}`,
// google
`DOMAIN-SUFFIX,google.com,${proxyGroupName}`,
`DOMAIN-SUFFIX,youtube.com,${proxyGroupName}`, // youtube.com
`DOMAIN-SUFFIX,ytimg.com,${proxyGroupName}`, // youtube image
`DOMAIN-SUFFIX,googleapis.com,${proxyGroupName}`, //googleapis
`DOMAIN-SUFFIX,googlevideo.com,${proxyGroupName}`,
`DOMAIN-SUFFIX,google.com.hk,${proxyGroupName}`,
// cloudflare
`DOMAIN-SUFFIX,cloudflare-dns.com,${proxyGroupName}`,
`DOMAIN-SUFFIX,repo.maven.apache.org,${proxyGroupName}`,
`DOMAIN-SUFFIX,hub.docker.com,${proxyGroupName}`, // Docker hub
`DOMAIN-SUFFIX,t.me,${proxyGroupName}`, // t.me
`DOMAIN-SUFFIX,vercel.app,${proxyGroupName}`, // vercel.app
`DOMAIN-SUFFIX,npmjs.org,${proxyGroupName}`, // npmjs.org
//机场导航
`DOMAIN-SUFFIX,go52pokemon.com,${proxyGroupName}`,
`DOMAIN-SUFFIX,杰帝.cc,${proxyGroupName}`, //av
// 其他规则
`GEOIP,HK,${proxyGroupName},no-resolve`, // 香港
`GEOIP,JP,${proxyGroupName},no-resolve`, // 日本
`GEOIP,KR,${proxyGroupName},no-resolve`, // 韩国
`GEOIP,SG,${proxyGroupName}`, // 新加坡
`GEOIP,US,${proxyGroupName},no-resolve`, // 美国
`GEOIP,GB,${proxyGroupName}`, // 英国
`GEOIP,AU,${proxyGroupName}`, // Australia、
`GEOIP,DE,${proxyGroupName}`, // Germany |
`GEOIP,NL,${proxyGroupName}`, // 荷兰
// 'GEOIP,LAN,DIRECT,no-resolve',
`GEOIP,CN,DIRECT`, // 放在最后可以和下面的配置协同,开启 no-resolve 跳过DNS解析
`MATCH,${proxyGroupName}`, //剩余的路由都走代理推荐()
// `MATCH,DIRECT`, //剩余的路由都走直连
];
}
// 程序入口
function main(config) {
const proxyCount = config?.proxies?.length ?? 0;
const proxyProviderCount =
typeof config?.['proxy-providers'] === 'object' ? Object.keys(config['proxy-providers']).length : 0;
if (proxyCount === 0 && proxyProviderCount === 0) {
throw new Error('配置文件中未找到任何代理');
}
//proxies和proxy-groups保持不动
// 获取第一个配置组名称
const proxyGroupName = config['proxy-groups'][0].name;
config['rules'] = genRule(proxyGroupName); // 覆盖原配置中的规则
// 配置域名解析的host,需要dns中配置useHosts
config.hosts = { 's.test.istr.cn': '192.168.3.144', 'home.istr.cn': '192.168.3.16', 'h2.istr.cn': '192.168.3.30' }
console.log(`修改完成: ${JSON.stringify(config)}`); //打印日志
return config;
}