Clash for Windows配置文档大全

配置文件

Clash 配置文件格式为YAML,具体写法参考:https://github.com/Dreamacro/clash/wiki/configuration

CFW 启动的过程会使用到两个配置文件,分别是:

  • Home Directory/config.yaml
  • Home Directory/profiles/xxxx.yaml

config.yaml

这是 Clash 的启动文件,位于Home Directory中,如果此文件有错,则 Clash 核心将无法启动,一般会出现如下界面:

::: danger 此文件关乎 Clash 核心是否能正常启动,如非必要,请勿更改 :::

Profiles/xxxx.yaml

Profiles 文件夹下文件均由用户导入,CFW 统一生成的,一般命名为时间戳

这些文件可以不完整,通常只需要有:proxies/proxy-groups/rules三个字段组成即可:

proxies:
  - name: Shadowsocks
    type: socks5
    server: 127.0.0.1
    port: 1080
proxy-groups:
  - name: Proxy
    type: select
    proxies:
      - Shadowsocks
rules:
  - "MATCH,DIRECT"

除此外,还可以添加tun/dns/hosts等字段,但在使用 CFW 时不建议添加

加载过程

CFW 启动流程如下:

  1. 使用基础配置文件 config.yaml 启动 Clash 核心
  2. 根据用户上次使用的配置文件(Profiles/xxxxx.yml)进行恢复
  3. 恢复用户上次操作的策略情况

解读

步骤 1 完成后,Clash 会按照 config.yaml 设置启动

步骤 2 完成后,用户配置文件中以下字段的内容会被提交至 Clash 核心并替换原有字段(这就是 Profiles 里配置文件可以不完整的原因)

  • proxies
  • proxy-providers
  • proxy-groups
  • rule-providers
  • rules
  • tun
  • dns
  • hosts

::: tip 如果TUN ModeMixin中配置了对应字段,用户配置文件中的字段也会被覆盖。

配置优先级Mixin>TUN Mode>Profile :::

::: tip 从0.20.7开始,可点击 Clash Core 右侧的按钮预览最终提交至 Clash 核心的配置文件

原因

之所以不进行全替换,是因为每一个配置文件所设定的端口号可能是不一样的,这样每次切换配置文件后,需要重新设置系统代理以及其他软件的代理端口,这显然太麻烦

所以采用上面的方案,使得用户配置文件以 Plugin 的方式加载 如果需要修改端口号,只需要在 General 界面点击 Port 右侧的端口号即可更改

URL Scheme

下载配置

CFW 支持使用 URL Scheme 快速导入配置文件:

clash://install-config?url=<encoded URI>

响应头

content-disposition

如果响应头中存在content-disposition字段,则使用filename对应的值作为配置文件名(例如),否则使用 URL 最后一部分作为配置文件名

content-disposition: attachment; filename="abc.yaml"

profile-update-interval

如果响应头中存在profile-update-interval字段,则配置文件自动更新间隔设置为对应的值,以小时为单位

profile-update-interval: 12

subscription-userinfo

如果响应头中存在subscription-userinfo字段,则其对应的流量及到期信息会显示在 Profiles 模块中,规范参考此处

subscription-userinfo: upload=455727941; download=6174315083; total=1073741824000; expire=1671815872

::: tip 此外,CFW 支持识别添加在配置文件首行的subscription-userinfo,格式以#开头,以;结尾。示例

# upload=455727941; download=6174315083; total=1073741824000; expire=1671815872;

因此可以使用预处理脚本定期更新本地配置文件中的订阅信息,参考案例。 :::

profile-web-page-url

如果响应头中存在profile-web-page-url字段,则在右键点击 profile 菜单中会显示Open web page选项,允许用户跳转到对应的门户首页

退出软件

clash://quit

绕过系统代理

Clash for Windows 在 v0.4.5 版本后可以自定义系统代理需要绕过的域名或 IP

设置方式

  1. 进入 Settings 页面
  2. 点击 System proxy Bypass 右边 Edit 小字打开编辑界面
  3. 若要增加绕过example.com域名,只需在修改编辑界面内容为:
    bypass:
      - "example.com" # 下面字段可不删除
      - 127.0.0.1
      - ...
  4. 点击编辑器右下角保存

bypass 类型为数组,item 为需要绕过的域名或节点,支持通配符*

::: tip 最后一行对应系统中“请勿将代理服务器用于本地(Intranet)地址”选项,请确保此项在最底部 :::

打断连接

默认情况下,CFW 不会在任何时候主动打断正在进行的连接(Connections),连接会被保持到主动断开。如果在特定情况下,需要在切换节点后或切换配置文件前先打断连接,操作:

  1. 进入 Settings 页面
  2. 点击滚动至 Connections 设置
  3. 根据需求进行选择或开关

选项说明

Break When Proxy Change

  • None:默认值,不进行打断
  • Chain:打断所有 chains 中包含此策略组的连接
  • All:打断所有连接

Break When Profile Change

  • 开:切换配置前先打断所有连接
  • 关:不打断

Break When Mode Change

  • 开:切换代理模式时断开所有连接
  • 关:不打断

便携模式

版本要求

从 0.13.1 版本开始,便携模式开启方式进行简单调整。

开启方法

当软件可执行文件当前目录中新建一个名为data的文件夹,便携模式会将此文件夹将作为基础启动文件夹,作为Home Directory

在不同系统上,可执行文件位置有所不同:

  • Windows:安装目录中Clash for Windows.exe
  • macOS:软件包目录中/Contents/MacOS/Clash for Windows

当文件夹存在时,重启软件即可进入便携模式,此时软件将会读取/写入数据至该目录

更新软件

多数情况下,如果需要更新软件版本,只需要先下载新版本,然后将原目录里的data文件夹复制到新安装目录即可

但要注意的是,如果是使用.exe安装包,不能在原目录中直接覆盖安装,因为安装包会先将目录清空,再写入新版本。这样会导致data文件夹丢失

实际上,可以通过在安装目录中建立一个data文件夹的链接实现将其分离于安装目录,这样即使使用.exe版本,只要在安装后,重新建立链接即可

在不同系统中建立链接的命令如下,假设用户定义的配置文件名称为cfw-portable

Windows

mklink /D "C:\Program Files\Clash for Windows\data" "C:\cfw-portable"

macOS

ln -s "/home/cfw-portable" "/Applications/Clash\ for\ Windows.app/Contents/MacOS/data"

::: tip 此方法也可以用于自定义Home Directory :::

旧版本(已过时)

从 0.4.0 开始,Clash for Windows 提供简单的便携支持

使用方法

进入安装目录/resources/static/files/目录中进行如下操作:

  1. 新建 config.yaml(文件可以为空,但一定要创建)
  2. 重新启动 Clash for Windows

此时文件夹目录中还有其他文件及文件夹,请勿对其修改

TUN 模式

对于不遵循系统代理的软件,TUN 模式可以接管其流量并交由 CFW 处理,在 Windows 中,TUN 模式性能比 TAP 模式好::: warning 注意 近期大部分浏览器默认已经开启“安全 DNS”功能,此功能会影响 TUN 模式劫持 DNS 请求导致反推域名失败,请在浏览器设置中关闭此功能以保证 TUN 模式正常运行 。

Windows

启动 TUN 模式需要进行如下操作:

  1. 点击GeneralService Mode右边Manage,在打开窗口中安装服务模式,安装完成应用会自动重启,Service Mode 右边地球图标变为绿色即安装成功(无法安装参考:这里)
  2. 点击GeneralTUN Mode右边开关启动 TUN 模式

::: tip NOTICE 如果使用system作为 TUN stack,需要同时在系统防火墙中将 clash core 放行,方法如下:

0.19.27及以上版本中,点击 General 页面的盾牌按钮,并在 UAC 弹窗(若有)中允许运行,CFW 将自动配置对应的防火墙规则。

成功配置防火墙规则后该图标作为指示灯亮起。

在 Scoop 版上使用此功能需要0.20.3及以上版本,并且每次更新 CFW 后都需要更新防火墙规则。如果要通过 Scoop 安装脚本实现自动更新规则,可以参考:manifest script :::

::: tip NOTICE 由于查询防火墙权限受限等原因,指示灯可能无法正常工作,请以系统防火墙列表及 Clash 网卡运行状态为准。

这里提供一个可用于自查的 PowerShell 脚本(可能需要管理员权限):

#Requires -Version 3
#Requires -Modules NetSecurity

$List = Get-NetFirewallRule -Enabled True -Action Allow -Description 'Work with Clash for Windows.' | Where-Object { 'Clash Core' -eq $_.DisplayName }
$Report = foreach ($Rule in $List)
{
    $Program = (Get-NetFirewallApplicationFilter -AssociatedNetFirewallRule $Rule).Program

    [pscustomobject] @{
        Enabled     = $Rule.Enabled
        Action      = $Rule.Action
        Protocol    = (Get-NetFirewallPortFilter -AssociatedNetFirewallRule $Rule).Protocol
        Program     = $Program
        IsPathValid = Test-Path -PathType Leaf -LiteralPath $Program
    }
}
$Report
Pause

以 x86-64 版本为例,如果输出类似以下内容,那么规则添加成功(请自行验证 Program 路径的有效性):

Enabled     : True
Action      : Allow
Protocol    : TCP
Program     : C:\Program Files\Clash for Windows\resources\static\files\win\x64\clash-win64.exe
IsPathValid : True

Enabled     : True
Action      : Allow
Protocol    : UDP
Program     : C:\Program Files\Clash for Windows\resources\static\files\win\x64\clash-win64.exe
IsPathValid : True

:::

  1. 在使用的配置文件中加入如下内容:
dns:
  enable: true
  enhanced-mode: fake-ip
  nameserver:
    - 8.8.8.8 # 真实请求DNS,可多设置几个
    - 114.114.114.114
# interface-name: WLAN # 出口网卡名称,或者使用下方的自动检测
tun:
  enable: true
  stack: gvisor # 使用 system 需要 Clash Premium 2021.05.08 及更高版本
  dns-hijack:
    - 198.18.0.2:53 # 请勿更改
  auto-route: true
  auto-detect-interface: true # 自动检测出口网卡

::: tip NOTICE 从Clash Premium 2021.05.08开始,使用auto-*代替macOS-auto-*,往后数个版本将暂时兼容旧字段名。此版本同时添加了system stack支持。参考 :::

注意事项

enhanced-mode设置为fake-ip时,会出现系统检测到网卡无法联网,微软系 APP 无法登陆使用等问题,可以通过添加fake-ip-filter解决:

dns:
  enable: true
  enhanced-mode: fake-ip
  nameserver:
    - 114.114.114.114
  fake-ip-filter:
    - "dns.msftncsi.com"
    - "www.msftncsi.com"
    - "www.msftconnecttest.com"

::: tip TUN 模式更推荐使用 fake-ip 模式 :::

macOS

启动 TUN 模式需要进行如下操作:

  1. 点击GeneralService Mode右边Manage,在打开窗口中安装服务模式,安装完成应用会自动重启,Service Mode 右边地球图标变为绿色即安装成功
  2. 点击GeneralTUN Mode右边开关启动 TUN 模式
  1. 在使用的配置文件中加入如下内容:
dns:
  enable: true
  enhanced-mode: fake-ip
  nameserver:
    - 114.114.114.114 # 真实请求DNS,可多设置几个
# interface-name: en0 # 出口网卡名称,或者使用下方的自动检测
tun:
  enable: true
  stack: system # 或 gvisor
  dns-hijack: # DNS劫持设置为系统DNS
    - 114.114.114.114 # 可任意设置,但为了保证CFW关闭后能不影响联网,建议设置真实能访问的DNS服务器
  auto-route: true
  auto-detect-interface: true # 自动检测出口网卡

::: tip NOTICE 从Clash Premium 2021.05.08开始,使用auto-*代替macOS-auto-*,往后数个版本将暂时兼容旧字段名。 :::

::: tip dns-hijack 不可以劫持局域网地址的 DNS,如 192.168.0.0/16,请务必手动设置系统 DNS :::

::: tip 若要将此 Mac 设置为代理网关,打开 IP 转发即可:

sudo sysctl -w net.inet.ip.forwarding=1

这种做法将在机器下次重启后失效,如果想要永久保存,编辑文件/etc/sysctl.conf,配置下面变量:

net.inet.ip.forwarding=1
net.inet6.ip6.forwarding=1

或者使用 LaunchDaemons 进行配置:

  1. 新建 network.forwarding.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>Network Forwarding</string>
    <key>UserName</key>
    <string>root</string>
    <key>GroupName</key>
    <string>wheel</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/sbin/sysctl</string>
        <string>-w</string>
        <string>net.inet.ip.forwarding=1</string>
        <string>net.inet6.ip6.forwarding=1</string>
    </array>
    <key>KeepAlive</key>
    <false/>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>
  1. 将文件添加进 /Library/LaunchDaemons
  2. sudo launchctl load /Library/LaunchDaemons/network.forwarding.plist

Linux

启动 TUN 模式需要进行如下操作:

  1. 点击GeneralService Mode右边Manage,在打开窗口中安装服务模式,安装完成应用会自动重启(某些系统需要手动重启 APP),Service Mode 右边地球图标变为绿色即安装成功
  2. 点击GeneralTUN Mode右边开关启动 TUN 模式
  3. 在使用的配置文件中加入如下内容:
dns:
  enable: true
  enhanced-mode: fake-ip
  nameserver:
    - 114.114.114.114 # 真实请求DNS,可多设置几个
tun:
  enable: true
  stack: system # 或 gvisor
  dns-hijack:
    - 1.0.0.1:53 # 请勿更改

::: tip Linux 下一般不需要设置interface-name字段 :::

配置文件参考

Clash Wiki

::: tip NOTICE 如熟悉使用代码启动,也可以使用 mixin 功能进行其他配置 :::

TAP 模式

对于不遵循系统代理的软件,TAP 模式可以接管其流量并交由 CFW 处理对于 0.13.8 及以后版本,更推荐使用TUN 模式

安装 TAP 网卡

点击General页面中TAP Device选项的Manage按钮,在弹出对话框中选择Install将会安装 TAP 网卡,此网卡用于接管系统流量,安装完成可在系统网络连接中看到名为cfw-tap的网卡

启动 TAP 模式

使用的 Profile 中包含 listen 设置:

dns:
  enable: true
  enhanced-mode: redir-host # 或 fake-ip
  listen: 0.0.0.0:53
  nameserver:
    - 223.5.5.5

工作原理

此版本可以通过设置 Interface Name (自动识别) 属性避免回环,并且支持了 UDP 及 IP 类请求,请在Settings页面Interface Name选项中选择出站网卡(通常为本机物理网卡)

注意事项

enhanced-mode设置为fake-ip时,会出现系统检测到网卡无法联网,微软系 APP 无法登陆使用等问题,可以通过添加fake-ip-filter解决:

dns:
  enable: true
  enhanced-mode: fake-ip
  listen: 0.0.0.0:53
  nameserver:
    - 223.5.5.5
  fake-ip-filter:
    - "dns.msftncsi.com"
    - "www.msftncsi.com"
    - "www.msftconnecttest.com"

::: tip TAP 模式更推荐使用 redir-host 模式 :::

Mixin

版本要求

0.9.5 版本更新后,支持向所有配置文件中注入公共属性设置

配置文件

例如:在配置文件中统一添加dns字段,操作如下:

  1. 进入 Settings 页面
  2. 滚动至 Profile Mixin 栏
  3. 点击 YAML 右边 Edit 小字打开编辑界面
  4. 在修改编辑界面内容为:
    mixin: # 注意下面缩进
      dns:
        enable: true
        listen: :53
        nameserver:
          - 8.8.8.8
  5. 点击编辑器右下角保存

在启动或切换配置时,上面内容将会替换到原有配置文件中进行覆盖

::: tip 配置文件内容不会被修改,混合行为只会发生在内存中,可以通过任务栏图标菜单开关这个行为 :::

JavaScript

0.10.1 版本更新后,支持使用 JavaScript 进行 mixin 配置,需要传入一个字符串(yaml 多行字符串使用

具体步骤如上,只需要将代码填入 JavaScript 栏中,并将 Type 设置成 JavaScript 即可:

module.exports.parse = async (
  { content, name, url },
  { axios, yaml, notify }
) => {
  const extra = {
    dns: {
      enable: true,
      listen: ":53",
      nameserver: ["8.8.8.8"],
    },
  };
  return { ...content, ...extra };
};

参数说明

CFW 调用用户定义的parse方法时,会传入 2 个参数,分别是配置文件元数据以及工具类对象/方法

配置文件元数据

包括:

  1. content:yaml 格式化后的 JavaScript 对象
  2. name:配置文件文件名
  3. url:配置文件下载地址

工具类对象/方法

包括:

  1. axios:网络请求框架,GitHub
  2. yaml:yaml 框架,GitHub
  3. notify:发出系统通知方法,签名为function notify(title:string, message:string, silent:bool)

返回说明

parse方法需要返回一个对象,CFW 会将返回的对象序列化后直接载入

配置文件预处理

版本要求

0.10.1 版本更新后,支持使用 JavaScript 对下载后的配置文件进行预处理

0.11.10 版本更新后,支持使用 YAML 对下载后配置文件进行简单预处理

简便方法(YAML)

如果需要对下载地址为https://example.com/profile.yaml的配置文件进行预处理,操作如下:

  1. 进入 Settings 界面
  2. 滚动至 Profiles 栏
  3. 点击 Parsers 右边 Edit 打开编辑器,填入:
    parsers:
      - url: https://example.com/profile.yaml
        yaml:
          prepend-rules:
            - DOMAIN,test.com,DIRECT # rules最前面增加一个规则
          append-proxies:
            - name: test # proxies最后面增加一个服务
              type: http
              server: 123.123.123.123
              port: 456
  4. 点击编辑器右下角保存按钮

当配置文件触发刷新(包括自动更新)时,CFW 会读取yaml字段定义的值,将对应值插入/合并到原配置文件中

参数说明

值类型 操作
append-rules 数组 数组合并至原配置rules数组
prepend-rules 数组 数组合并至原配置rules数组
append-proxies 数组 数组合并至原配置proxies数组
prepend-proxies 数组 数组合并至原配置proxies数组
append-proxy-groups 数组 数组合并至原配置proxy-groups数组
prepend-proxy-groups 数组 数组合并至原配置proxy-groups数组
mix-proxy-providers 对象 对象合并至原配置proxy-providers
mix-rule-providers 对象 对象合并至原配置rule-providers
mix-object 对象 对象合并至原配置最外层中
commands 数组 在上面操作完成后执行简单命令操作配置文件

Commands 使用方法(beta)

commands 是一组简单的命令,作为上面操作的补充

例子:

commands:
  - dns.enable=false # 命令1
  - proxy-groups.0.proxies.2+DIRECT # 命令2

每个命令可以被分为三个部分,分别是:定位+操作+设定值

命令 1 中,定位是dns.enable,操作是=,设定值是false

命令 2 中,定位是proxy-groups.0.proxies.2,操作是+,设定值是DIRECT

定位

定位中每个层级以.分割,数组类型的定位下标由 0 开始计算,命令 2 中proxy-groups.0即表示定位至第 1 个策略组,.proxies表示访问第一个策略组的 proxies 属性,.proxies.2表示 proxies 属性的第 3 个位置

如果不想用序号定位,也可以使用name值定位,proxies以及proxy-groups中的每个项目都会有name属性。例如在proxies中已经定义了名为debug的节点,那么修改其udp参数的定位即为proxies.(debug).udp,名称两边的()是保证识别,如果节点名不包括+.=这几个符号,也可以省略不写

操作

目前支持三种操作:

  • =:覆盖
  • +:插入
  • -:删除

命令 1 中,=表示将dnsenable的值覆盖为false

命令 2 中,+表示在定位的策略组中的proxies数组中添加一个名为DIRECT的值,原本其他值被向后移动 1 位。如果此处改成=,则会覆盖原来第一个值

设定值

设定值是用于插入或覆盖的值,如果操作是-,则此值可有可无,例如:

commands:
  - proxies.0- # 命令3

此处可以将配置文件proxies的第 1 个节点删除

如果设定值为纯数字,则会被识别为整数,为true|false则识别为布尔类型,如果 JSON 编码通过则识别为对象

v0.13.7 版本更新后,支持 3 个内置值用于设置策略组节点,分别是[]proxyNames[]groupNames[]shuffledProxyNames,并支持使用正则过滤其中节点,例子如下:

yaml:
  prepend-proxy-groups:
    - name: myGroup # 建立新策略组
      type: fallback
      url: "http://www.gstatic.com/generate_204"
      interval: 300
      proxies:
        - DIRECT

  commands:
    - proxy-groups.myGroup.proxies=[]proxyNames|HK # 向策略组添加所有定义的节点名,并按“HK”正则表达式过滤

进阶方法(JavaScript)

如果需要对下载地址为https://example.com/profile.yaml的配置文件进行预处理,操作如下:

  1. 进入 Settings 界面
  2. 滚动至 Profiles 栏
  3. 点击 Parsers 右边 Edit 打开编辑器,填入:
    parsers:
      - url: https://example.com/profile.yaml
        code: |
          module.exports.parse = async (raw, { axios, yaml, notify, console }, { name, url, interval, selected }) => {
            const obj = yaml.parse(raw)
            return yaml.stringify(obj)
          }
  4. 点击编辑器右下角保存按钮

当配置文件触发刷新(包括自动更新)时,CFW 会调用此方法对下载的配置文件内容进行处理,再写入本地文件中

当然,parsers 也支持使用路径引入代码:

parsers:
  - url: https://example.com/profile.yaml
    file: "C:/Users/cfw/parser.js"

::: tip 使用文件时,允许调用该文件目录下的 node_modules 模块 :::

版本 0.20.10 开始支持从远端获取

parsers:
  - url: https://example.com/profile.yaml
    remote:
      url: https://gist.githubusercontent.com/Fndroid/40e6117252f794aa629b875aa1ecadea/raw/d1ba6d230746c9d2ecfbef211c52fd9a567a781e/parser.js
      cache: true # 默认为false,指示是否对重复下载此预处理代码使用缓存

::: danger 注意 使用远端配置请选择可信的代码提供者,如不能信任代码提供者,可以从远端拷贝代码然后使用code填入而非使用remote方式引入! :::

参数说明

CFW 调用用户定义的parse方法时,会传入 3 个参数,分别是配置文件文本内容工具类对象/方法以及配置文件元数据

配置文件文本内容

raw 是一个字符串,一般需要用 yaml 库解析成 JavaScript 对象

工具类对象/方法

包括:

  • axios:网络请求框架,GitHub
  • yaml:yaml 框架,GitHub
  • notify:发出系统通知方法,签名为function notify(title:string, message:string, silent:bool)
  • console:日志输出至文件,方便调试,在 Settings 界面中 Parser 设置下方打开
  • homeDir:Home Directory 目录

:::tip 除了以上工具类,在使用.js文件时,也可以通过npm引入第三方模块 :::

配置文件元数据

元数据为 JavaScript 对象,包括:

  • name:名称
  • url:下载地址
  • interval:更新周期
  • selected:策略组选择缓存,数组
  • mode:模式缓存

:::tip 元数据在配置文件首次下载时只有 url 参数 :::

返回说明

parse方法需要返回一个字符串,CFW 会将返回的字符串存入对应的配置文件中

多处理器及正则匹配

正则匹配

上面例子中,使用url匹配配置文件地址,如果一个处理器需要处理多个配置文件,也可以使用正则表达式进行匹配,使用关键字reg设置

parsers:
  - reg: ^https://test\.com/.+$ # 正则匹配域名
    yaml:
      prepend-rules:
        - DOMAIN,test.com,DIRECT

多处理器

parser 定义的数组支持多个处理器从上至下按顺序执行,例如:

parsers:
  - reg: https://test.com.+$ # 第一个执行的parser
    file: "C:/Users/cfw/parser.yaml"
  - url: https://example.com/profile.yaml # 对上一个parser执行的结果进行处理
    file: "C:/Users/cfw/parser.js"

::: tip file 同时支持 yaml 及 js 格式的文件 :::

使用案例

向本地配置文件添加订阅信息

  1. 准备一个本地配置文件的副本,记下文件名和路径。为方便后续说明,以下用myprofile.yml指代此文件名,用C:\...\myprofile.yml指代此文件路径。

::: tip NOTICE 配置完成后,此副本文件将作为 CFW 配置文件的订阅源使用,对配置文件的非临时性修改需要在此副本文件中进行编辑,并在修改后执行订阅更新。移动、重命名此文件后需要修改 CFW 中相应的配置选项。 :::

::: tip 此处使用 CFW 创建的配置文件本身而非副本作为订阅源虽然可以实现相同的功能,但无法保证运行时的可靠性,如果没有特殊情况不建议这样使用。 :::

  1. 准备一个包含订阅信息subscription-userinfo的订阅链接。为方便后续说明,以下用https://example.com/subscription_url指代此订阅链接。

::: tip 可使用curl -I 'https://example.com/subscription_url'检查订阅链接是否包含订阅信息。 :::

  1. 修改 CFW 中的配置文件选项,在URL中填写副本文件的本地映射地址file:///C:\...\myprofile.yml。保存后执行订阅更新并确保没有报错。
  2. 添加对应的预处理脚本,并确保正常匹配到配置文件。
parsers: # array
  - reg: "myprofile.yml"
    code: |
      module.exports.parse = async (raw, { axios, yaml, notify, console }) => {
        raw = raw.replace(/# upload=\d*; download=\d*; total=\d*; expire=\d*;*\n/gm,'')
        const url = 'https://example.com/subscription_url'
        let { headers:{"subscription-userinfo": si = ""}={}, status } = await axios.head(url)
        si = si.replace(/;*$/g,'')
        if (status === 200 && si) {
          return `# ${si};\n${raw}`
        }
        return raw
      }
  1. 执行订阅更新,配置文件模块中出现订阅信息即说明配置成功。

::: tip 配置完成后可自行设置自动更新选项。 :::

Actions

版本要求

0.18.8 版本更新后,支持使用 JavaScript 定义 proxy 及 profile 右键菜单中 Run script 选项行为

定义行为

  1. 进入 Settings 界面
  2. 滚动至 Actions 栏
  3. 点击 Scripts 右边 Edit 打开编辑器,填入:
    scripts:
      proxy:
        code: |
          module.exports.run = (payload, { dialog }) => {
            dialog({
              message: `proxy name: ${payload.name}`
            })
          }
      profile: {}
  4. 点击编辑器右下角保存按钮
  5. 进入 Proxies 界面,在任意 proxy 中右键选择 Run script 即会弹出对话框显示该 proxy 的 name 属性

::: tip 除了使用 code 指定运行代码,也可以用 file 属性指定执行脚本路径 :::

参数说明

CFW 调用用户定义的run方法时,会传入 2 个参数,分别是proxy 或 profile 属性工具类对象/方法

proxy 或 profile 属性

payload 是一个对象,表示右键点击的对象

工具类对象/方法

包括:

  • axios:网络请求框架,GitHub
  • yaml:yaml 框架,GitHub
  • notify:发出系统通知方法,签名为function notify(title:string, message:string, silent:bool)
  • console:日志输出至文件,方便调试,在 Settings 界面中 Actions 设置下方 Console Output 打开
  • homeDir:Home Directory 目录
  • dialog: 对话框,可以获取用户选择,Docs

:::tip 除了以上工具类,在使用.js文件时,也可以通过npm引入第三方模块 :::

Diff 处理

Diff 处理即对配置文件进行三路合并,允许在不使用配置文件预处理的情况下,保留对配置文件的修改并应用到下次更新。0.18.4 版本更新后,支持使用 Diff 方式处理配置文件。如果你熟悉 Git,此方式类似于git merge

使用方法

  1. 进入 Profiles 界面,在需要设置 Diff 处理的配置文件上点击右键,出现菜单后,选择 Diff 选项:
  2. 此时会调用系统默认编辑器编辑配置文件,对此文件的编辑将会在配置文件更新时自动合并到新的配置文件中
  3. 更新一次配置文件

冲突

如果远端配置文件发生更新,并且与本地修改产生冲突,将需要手动进行合并。

冲突的格式非常简单:

<<<<<<<
  本地修改
=======
  远端修改
>>>>>>>

根据自己的需求,把多余的地方删除即可,包括<<<<<<<=======>>>>>>>

如果使用 VSCode,操作更简便: 

::: tip Diff 处理会在预处理之后进行 :::

轻量模式(Lightweight Mode)

版本要求

0.15.0 版本更新后,增加轻量模式支持

使用说明

依赖于内置 Service Mode,启动轻量模式后,关闭软件界面后 CFW 将会完全关闭,仅保留 Clash 核心继续工作。再次启动 CFW 则会快速恢复并连接核心。

此模式下,CFW 界面关闭后将不再占用系统内存,但同时部分功能将会失效,例如:

  • 任务栏图标及菜单
  • 配置文件定时更新
  • TAP 模式
  • 后台启动其他应用
  • 后台更新检测

::: danger 其他未提及功能也可能会受到影响,如追求更好体验,不建议使用此功能 :::

开启步骤

  1. 点击GeneralService Mode右边Manage,在打开窗口中安装服务模式,安装完成应用会自动重启,Service Mode 右边地球图标变为绿色即安装成功
  2. 点击Settings界面中General模块中Lightweight Mode进行开启

开启后关闭界面操作即自动关闭软件,重新启动软件会自动恢复,已选择配置文件及节点不会丢失。

SSID 策略

版本要求

0.20.23 版本更新后,支持 SSID 策略,General 中部分开关可以根据设定的策略临时切换

配置

  1. 进入 Settings 界面
  2. 滚动至 Experimental Features 栏
  3. 点击 SSID Strategy 右边 Edit 按钮打开编辑界面,按照格式添加对应策略:
    strategy: # object
      SSID: # name of your Wi-Fi
        tun: false
        # mixin: false
        system: false

说明

  • tun:是否开启 TUN Mode 开关
  • mixin:是否开启 Mixin 开关
  • system:是否开启 System Proxy 开关

注意

  1. 如果不写对应的键,则触发 Wi-Fi 连接时,对应开关不会变更,上面例子中mixin不会因 Wi-Fi 切换而改变,保持用户原来选择的状态
  2. 如果在当前已经连接了包含在策略中的 Wi-Fi,此时在界面中更改以上三个开关的动作会被记录为用户行为,即策略触发时为临时状态

DHCP 服务端

版本要求

0.16.0 版本更新后,macOS 版本支持 DHCP 服务端部署

用途

TUN 模式下,macOS 可作为局域网代理网关。DHCP 服务器可以方便对局域网内其他设备进行地址及网关分配,进而控制设备流量是否被 Clash 接受并处理。

开启条件

  1. TUN 模式正确配置并运行,并且已经开启 IP 转发
  2. 网络中 DHCP 功能关闭(一般是路由器,避免冲突)
  3. 本机 IP 地址设置为静态地址

操作步骤

  1. 进入 Settings 界面,底部找到 Experimental Features 打开 DHCP Server 选项
  2. 进入 Router 界面,点击右上角 Start 按钮  点击 Interface 右边选择对应网卡,此时剩下值会自动填充,如果不明白这些字段的意义,使用默认即可
  3. 点击 Continue 后,DHCP 服务器将会启动  局域网中设备重新连接后,列表中将会出现。此时可以在 Default Gateway 和 Clash TUN 中切换进而控制设备是否由 Clash 接管网络,切换后设备需要重新接入网络

::: tip 接管切换后需要将设备重新接入网络方能获取正确的地址 :::

::: tip 启动 DHCP 服务端功能后,CFW 将会阻止系统进入休眠(但允许关闭显示器) :::

Enhanced Tray

版本要求

0.15.2 版本更新后,支持 Enhanced Tray。

系统区别

由于 Windows 任务栏只能显示一个图标,无法显示更多其他信息,为了保证和 macOS 有类似的体验,在 Windows 下 Enhanced Tray 将会以悬浮窗的形式显示。

默认情况下,Enhanced Tray 显示的内容包括 4 部分:图标,流量速度,规则模式及自定义内容。

自定义内容

自定义内容允许是简单字符串脚本返回值

当使用脚本(Script)时,需要在模块导出一个run方法:

module.exports.run = () => {
  return "hello world"; // 如果想以双行显示两个字符串,此处可以返回一个长度为2的数组
};

当然,脚本支持使用 npm 引入其他第三方模块。

自定义配置目录

版本要求

0.8.5 版本后,支持自定义profiles目录路径

配置文件

  1. 进入 Settings 界面
  2. 滚动至 Profiles 栏
  3. 点击 Folder Path 右边 Select 按钮
  4. 选择目录

启动其他应用

版本 0.6.1 更新后,加入启动其他第三方应用的能力。可以在 CFW 启动后自动启动其他软件

使用

  1. 进入 Settings 页面
  2. 点击滚动至 Child Processes 设置
  3. 点击 Processes 右边 Edit 按钮,打开的编辑器中添加:
    processes:
      - command: bark-helper-go.exe # 程序名称
        args:
          - "-t" # 运行参数1
          - "abcdefghijk" # 运行参数2
        options:
          cwd: C:\bark-helper # 子进程工作目录
        log: true # 将在 cwd 目录生成输出日志
  4. 点击编辑器右下角保存

添加完毕后重启 CFW 即可生效

其他参数参考:http://nodejs.cn/api/child_process.html#child_process_child_process_spawn_command_args_options

自定义状态栏图标

版本要求

0.8.9 版本后,支持自定义状态栏图标

配置

  1. 进入 Settings 界面
  2. 滚动至 Appearance 栏
  3. 在 Default Icon Path 及 System Proxy On Icon Path 右边输入栏中输入图标路径

ICO 文件大小

建议 64x64,如果不清晰可以尝试 32x32

自定义字体

版本要求

0.9.3 版本更新后,支持自定义客户端字体

配置文件

  1. 进入 Settings 界面
  2. 滚动至 Appearence 栏
  3. 在 Font Family 右边输入框输入字体名称

::: tip 注意:新安装字体需要重启软件才会生效 :::

自定义节点排序

版本要求

0.9.10 版本更新后,支持自定义节点排序

配置文件

  1. 进入 Settings 界面
  2. 滚动至 Proxies 栏
  3. 在 Order By 右边选择对应排序方式

参数说明:

  • Default:按配置文件定义节点顺序
  • Latency:按节点延迟升序排列
  • Alphabet:按节点名称字母表排列

自定义请求头

版本要求

0.9.11 版本更新后,支持自定义配置文件下载请求的请求头

配置文件

  1. 进入 Settings 界面
  2. 滚动至 Profiles 栏
  3. 点击 Request Headers 右边 Edit 按钮打开编辑器,输入:
    headers:
      token: "123456"
      cfw-version: "0.9.11"
  4. 点击编辑器右下角按钮保存

保存成功后,更新配置文件(包括自动更新)时,CFW 所发起的请求将会包含上述定义的字段。