目前可用的开源Clash Verge客户端

clash-verge-rev

https://github.com/clash-verge-rev/clash-verge-rev/releases

clash-nyanpasu

https://github.com/LibNyanpasu/clash-nyanpasu/releases

Clash Meta组织维护的Clash Verge

https://github.com/MetaCubeX/clash-verge/releases

Clash Verge 1.3.8原版

https://github.com/zzzgydi/clash-verge/releases

规则分流

拿到了订阅链接,第一步要做的应该就是订阅转换,将他的分流规则完善
(因为给你提供订阅的服务商,自带的分流规则往往就几百条,很不健全,很多人开着Clash但New Bing却用不了就是个很好的例子)

在线订阅转换网站虽然好用,但也有一定的隐私风险,需要注意,建议会技术的朋友自己搭建在线订阅转换平台。
如:https://sub.lainbo.com/

解决DNS泄露问题

DNS 泄露指的是在使用 VPN 或其他隐私服务的情况下,用户的真实 IP 地址通过 DNS 请求被发送到了 ISP(如联通,移动)的 DNS 服务器,而不是通过 VPN 设置的安全、匿名的 DNS 服务器。如果在 DNS Leak Test 、ipleak这种网站的列表中看到了中国国旗,就要意识到可能发生了DNS泄露。

虽然没有人知道具体的探测机制是什么,但很可能是从网络层面获取的。在一般的家庭网络拓扑中,wireshark可以看到什么内容,运营商就能看见什么内容,所以你使用114.114.114.114、223.5.5.5这样的DNS解析去访问了什么网站是很清晰的。

这就要衍生出第一个使用技巧——Clash开启TUN模式,关闭系统代理去使用与普通的系统代理模式区别在于,TUN模式下Clash会创建一张虚拟网卡,从网络层面接管所有的网络流量。普通的系统代理模式,是作为一个软件的权限去接管别的软件的网络,总有一些无法接管的应用,比如游戏,比如命令行。所以我们应该开启TUN模式,关闭系统代理,让网卡做这件事,而不是让软件做这件事。

开启TUN模式

  • 首先切换Clash Verge的内核,选开源的Clash Meta内核,然后重启整个Clash Verge确保生效 (Clash
    Meta在后期可能在不同的客户端名称有所不同, 如果看到内核名字是Mihomo 版本号是1.x.x的也是Meta)
  • 安装服务并且开启Tun模式 如果服务模式无法安装: Win可以尝试在系统命令行(PowerShell)中执行sc delete
    clash_verge_service 来删除之前的Clash Verge服务,这可能是你之前安装过Clash
    Verge,但是卸载的时候没有写在这服务模式,导致新的安装不上 Mac/Linux请在设置的Clash内核点开齿轮图标⚙️,点"授权”
    其他疑难杂症参考:
    https://github.com/clash-verge-rev/clash-verge-rev/issues/125

但是当我们开启了TUN,再去查看泄露时,发现还是有中国服务器(Windows系统可能出现)。这是由于fake-ip模式将DNS请求同时发送给了本地的物理网卡和Clash虚拟网卡,我们希望只发送给Clash的网卡,因为Clash创建的虚拟网卡会按我们的要求做事,本地真实的网卡不会。

调整组策略 Mac跳过

要解决这个问题也很简单,问题出现的原因是Windows系统默认使用多宿主DNS解析,会使用所有的网卡发起请求,我们只需要在组策略(Windows家庭版无该功能)中关闭这个功能即可(Win+R,输入gpedit.msc 点确定)。
eea240482d25fd4266c7d9e6bb189e9130109107.png
至此,我们解决了Clash在Windows下可能发生的DNS泄露问题(主要靠分流规则起作用)。

使用一个稳定的的DNS

DNS这部分有人会教使用运营商的DNS,运营商的DNS只适合小白用户,因为他可能连反诈,所以建议使用国内大厂的。

  • 关闭浏览器的QUIC, 中国大陆的isp是限速udp的, 所以导致QUIC这个优秀的协议, 到了中国大陆的网络下成了个负面增益效果。
    about://flags/#enable-quic 设置为Disabled (点下方弹出的重启浏览器生效)
  • 关闭浏览器中的“安全DNS”

    铬合金:chrome://settings/security
    【使用安全DNS】(新版Chrome中叫做【对您访问的网站的名称进行加密】),关闭

    边缘:edge://settings/privacy 找到【安全性】
    【使用安全的 DNS 指定如何查找网站的网络地址】,关闭

  • 在Clash Verge的【配置】中,点右上角的新建,进行如下操作

69b3be08ffafc7dc6e425eac884ab5ab30109107.png

  • 右键点击新建的卡片,选择编辑文件,并输入以下内容,保存,右键点击卡片启用
 function main(content) {
      const isObject = (value) => {
        return value !== null && typeof value === 'object'
      }
    
      const mergeConfig = (existingConfig, newConfig) => {
        if (!isObject(existingConfig)) {
          existingConfig = {}
        }
        if (!isObject(newConfig)) {
          return existingConfig
        }
        return { ...existingConfig, ...newConfig }
      }
    
      const cnDnsList = [
        'tls://223.5.5.5',
        'tls://1.12.12.12',
      ]
      const trustDnsList = [
        'https://doh.apad.pro/dns-query',
        'https://dns.cooluc.com/dns-query',
        'https://1.0.0.1/dns-query',
      ]
      const notionDns = 'tls://dns.jerryw.cn'
      const notionUrls = [
        'http-inputs-notion.splunkcloud.com',
        '+.notion-static.com',
        '+.notion.com',
        '+.notion.new',
        '+.notion.site',
        '+.notion.so',
      ]
      const combinedUrls = notionUrls.join(',');
      const dnsOptions = {
        'enable': true,
        'default-nameserver': cnDnsList, // 用于解析DNS服务器 的域名, 必须为IP, 可为加密DNS
        'nameserver-policy': {
          [combinedUrls]: notionDns,
          'geosite:geolocation-!cn': trustDnsList,
        },
        'nameserver': trustDnsList, // 默认的域名解析服务器, 如不配置fallback/proxy-server-nameserver, 则所有域名都由nameserver解析
      }
    
      // GitHub加速前缀
      const githubPrefix = 'https://ghproxy.lainbo.com/'
    
      // GEO数据GitHub资源原始下载地址
      const rawGeoxURLs = {
        geoip: 'https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geoip-lite.dat',
        geosite: 'https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geosite.dat',
        mmdb: 'https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/country-lite.mmdb',
      }
    
      // 生成带有加速前缀的GEO数据资源对象
      const accelURLs = Object.fromEntries(
        Object.entries(rawGeoxURLs).map(([key, githubUrl]) => [key, `${githubPrefix}${githubUrl}`]),
      )
    
      const otherOptions = {
        'unified-delay': true,
        'tcp-concurrent': true,
        'profile': {
          'store-selected': true,
          'store-fake-ip': true,
        },
        'sniffer': {
          enable: true,
          sniff: {
            TLS: {
              ports: [443, 8443],
            },
            HTTP: {
              'ports': [80, '8080-8880'],
              'override-destination': true,
            },
          },
        },
        'geodata-mode': true,
        'geox-url': accelURLs,
      }
      content.dns = mergeConfig(content.dns, dnsOptions)
      return { ...content, ...otherOptions }
    }

启用后再次点击按钮, 确保正确的应用了设置 (这里的任何代码变动, 都需要点击这个按钮手动刷新运行时的配置)

这段代码的作用是

  • 使用阿里和DNSPod(腾讯的DNS)的DoT来解析节点、DNS服务器
  • 使用无污染的DNS服务器解析其他网站
  • 使用非营利组织的DoT解析Notion网站
  • tun模式堆栈使用自适应模式
  • 更换延迟计算方式,去除握手等额外延迟
  • 开启TCP并发的支持
  • 开启域名嗅探, 准确还原域名, 进行域名分流
  • 设置geodata的下载源为国内加速下载源

如果你完全按照上面的步骤设置好了,再看看DNS Leak Test 、ipleak ,你会发现大部分的解析结果都是来自国外的Cloudflare和Google的DNS, 这是节点服务器不管拿到了你传过去的真ip还是假ip地址, 他都会再去请求一次Cloudflare/Google的DNS服务, 确保解析的正确性。但是重要的是没有中国大陆的DNS服务器了,如果还是有,那你应该往当前设备的更上层寻找问题所在,比如路由器的设置等。

解决GEOIP, CN问题

目前市面上绝大多数的代理工具都依赖于 GeoIP2 数据库判断地址所属地。它们的规则结尾部分一般都会有一条类似 GEOIP, CN,用来查询目的 IP 地址是否属于中国大陆,从而判断是否直连。
这些代理工具通常使用的 GeoIP2 数据库是来自于 MaxMind 的 GeoLite2 免费数据库。这个数据库目前存在一下几个问题:

  • 获取不便:从 2019 年 12 月 30 日起,必须注册后才能下载
  • 数据量大:数据库庞大,包含全球的 IP 地址段,约 10 MB
  • 准确度低:对中国大陆的 IP 地址判定不准,如:香港阿里云的 IP 被判定为新加坡、中国大陆等。

庞大的数据量对于大多数中国大陆的用户来说是没有意义的,因为只仅需要去判断 IP 的地理位置是否属于中国大陆境内,其他国家的 IP 一律代理/直连。过多的数据量会增加载入时间,降低查询效率。

我们在之前创建的Script中已经包含了下载更精简合适中国大陆的IP数据库链接, 现在只需要手动操作下载和替换即可。

  • 点击Clash Verge Rev的设置菜单, 找到「更新GeoData」, 点击进行更新, 他会在后台进行下载和本地的文件替换,
    通常在10秒内完成。
  • 验证是否下载完成: 右键托盘中的Clash Verge图标,【打开目录】-【应用目录】, 找到geoip.dat文件, 查看其文件体积,
    如果是几百KB则成功, 如果是好几MB则未成功或未下载完成(几百KB下载要不了多久,
    太久没有效果可能需要你使用下方的操作去重启Clash客户端重试)。
  • 下载完成后右键托盘中的Clash Verge图标,【更多】-【重启应用】确保数据库被正确应用

我希望xxx.com不要走代理, 如何做?

  • 点击左侧「订阅」菜单, 点击右上角的「新建」按钮
  • 类型选择「Merge」, 名称自己起一个, 点保存
  • 右键点击刚才新建出来的Merge, 点击「编辑文件」, 在prepend-rules: 后面进行添加
    (Clash的策略是从上往下读取规则, 读取到了就不再往下找, 所以要使用prepend, 在前面插入规则)
  • 格式如下, 自行灵活组合即可添加你想要的规则, 写时注意yaml文件的缩进 (不要照搬下面的规则, 只是写法演示,
    演示内容写的策略很不合理! )

    prepend-rules:
    # ↓表示*.baidu.com会走🔗 无需代理这个策略组, 而这个策略组默认行为走直连而非走节点

    • DOMAIN-SUFFIX,baidu.com,🔗 无需代理

    # ↓表示abc.baidu.com会走DIRECT这个内置策略
    # DIRECT同样为直连, 区别在于这条规则不受🔗 无需代理策略组控制
    # 🔗 无需代理策略组只是名字叫“无需代理”, 你可以手动调整他的策略, 但DIRECT不能调

    • DOMAIN,abc.baidu.com,DIRECT

    # ↓表示Weiyun.exe这个源进程名, 会走🛡️ 广告拦截, 而这个策略组默认行为是Reject请求

    • PROCESS-NAME,Weiyun.exe,🛡️ 广告拦截

    # ↓表示只要请求url中包含aria2这个关键字, 就会走REJECT这个内置策略
    # REJECT同样为丢弃请求, 区别在于这条规则不受🛡️ 广告拦截策略组控制
    # 不解释了, 和上面的无需代理一样的逻辑

    • DOMAIN-KEYWORD,aria2,REJECT

    # ↓表示所有的22端口都走✈️ 节点选择这个策略组, 也就是走你选择的节点流量

    • DST-PORT,22,✈️ 节点选择

    # ↓表示指定的ip段不需要代理, 记得在最后加,no-resolve
    # no-resolve会告诉Clash不要去尝试解析来匹配这条规则, 只处理「直接IP访问」的请求

    • IP-CIDR,203.205.254.0/23,🔗 无需代理,no-resolve
    • IP-CIDR6,2a0b:b580::/48,🔗 无需代理,no-resolve
  • 写完之后右键你新建出来的Merge, 点击「启用」, 再点击右上角的「重新激活订阅」按钮来刷新配置

clash-verge-hero.webp
至此,就完成了我认为的Clash的最佳实践配置。

DigitalOcean Referral Badge
最后修改:2024 年 04 月 17 日
如果觉得我的文章对你有用,请随意赞赏