Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Clash 使用记录 #204

Open
Bpazy opened this issue Nov 15, 2021 · 5 comments
Open

Clash 使用记录 #204

Bpazy opened this issue Nov 15, 2021 · 5 comments

Comments

@Bpazy
Copy link
Owner

Bpazy commented Nov 15, 2021

Clash 相关记录在这,比如:同步 CFW 配置、Tun 模式 CPU 占用、Linux 使用 Tun、Clash Dashboard 等。

@Bpazy
Copy link
Owner Author

Bpazy commented Nov 15, 2021

多机器同步 Clash for Windows 配置

Clash for Windows 默认将配置文件防止在 ~\.config\clash,所以只需要将 ~\.config\clash\profiles 目录在多台机器同步即可。

这里我利用了 OneDrive 来在多台机器同步,利用 符号链接 做目录映射:

mklink /d C:\Users\example\.config\clash\profiles C:\Users\example\OneDrive\Backup\clash\profiles

此时 Clash 读取到的内容实际上已经存储在 OneDrive 中了。注意:这个命令需要在所有需要同步的机器上运行。

同时我的配置文件中,有使用到 proxy-providerrule-provider,配置文件形如:

# 这里省略了配置文件的其他部分
proxy-providers:
  provider1:
    type: http
    url: "https://example.com/subscribe"
    interval: 3600
    path: ./providers/provider1.yaml
    health-check:
      enable: true
      interval: 600
      # lazy: true
      url: http://www.gstatic.com/generate_204

rule-providers:
  # 这里是我自定义的走代理的文件
  mydomain:
    type: file
    behavior: domain
    path: ./ruleset/mydomain.yaml
  # https://github.com/Loyalsoldier/clash-rules
  gfw:
    type: http
    behavior: domain
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/gfw.txt"
    path: ./ruleset/gfw.yaml
    interval: 86400

所以这两个 provider 指定的本地缓存文件,也需要进行同步:

mklink /d C:\Users\example\.config\clash\providers C:\Users\example\OneDrive\Backup\clash\providers
mklink /d C:\Users\example\.config\clash\ruleset C:\Users\example\OneDrive\Backup\clash\ruleset

最后,Clash for Windows 相关配置也需要同步(比如 mixin 配置):

mklink  C:\Users\example\.config\clash\cfw-settings.yaml C:\Users\example\OneDrive\Backup\clash\cfw-settings.yaml
mklink  C:\Users\example\.config\clash\Country.mmdb C:\Users\example\OneDrive\Backup\clash\Country.mmdb

@Bpazy
Copy link
Owner Author

Bpazy commented Aug 3, 2022

开启 CFW Tun 模式后 CPU 被占满问题

开启 CFW Tun 模式后 CPU 100%,电脑几乎无法操作,查看进程后推测,可能发生了网络回环,再结合我前段时间配置了 HyperV 的内部虚拟交换机 (虚拟交换机导致的无法上网),其中就有配置网络共享的操作,猜测和此有关。

解决方案:

  1. 开启 CFW Tun,此时在网络适配器中多了一个名为 Clash 的适配器;
  2. 打开 Clash 适配器属性,并开启共享给 HyperV 配置的内部虚拟交换机,如图:
    image

@Bpazy
Copy link
Owner Author

Bpazy commented Nov 5, 2022

Clash 在 Linux 上的自动启动

添加 systemctl 中 clash 的配置文件:sudo vim /etc/systemd/system/clash.service

[Unit]
Description=Clash service
After=network.target

[Service]
Type=simple
User=root
ExecStart=/home/ubuntu/clash/clash -d /mnt/bin/clash
Restart=on-failure
RestartPreventExitStatus=23

[Install]
WantedBy=multi-user.target

注意,ExecStart 中需要指定 clash 可执行文件的目录,然后通过 -d 指令指定了配置文件目录。另外我是用 root 用户启动的,因为我需要使用 TUN 模式。

Clash core 配置文件形如:

mixed-port: 7890
allow-lan: false
external-controller: 127.0.0.1:2316
secret: '22a93aaf-9c68-4d68-bbd8-faf9140130dc'
log-level: info

profile:
  # persistence fakeip
  store-fake-ip: true

ipv6: false

dns:
  enable: true
  enhanced-mode: fake-ip
  nameserver:
    - 114.114.114.114
    - 223.5.5.5
    - 8.8.8.8
  fallback: []
  fake-ip-filter:
    - +.stun.*.*
    - +.stun.*.*.*
    - +.stun.*.*.*.*
    - +.stun.*.*.*.*.*
    - "*.n.n.srv.nintendo.net"
    - +.stun.playstation.net
    - xbox.*.*.microsoft.com
    - "*.*.xboxlive.com"
    - "*.msftncsi.com"
    - "*.msftconnecttest.com"
    - WORKGROUP
    - controlplane.tailscale.com
    - log.tailscale.io
tun:
  enable: true
  stack: gvisor
  auto-route: true
  auto-detect-interface: true
  dns-hijack:
    - any:53

......

此外,在使用 Linux Clash Tun 中遇到了一个问题,docker create network 失效了,报错:

$ docker network create test
Error response from daemon: could not find an available, non-overlapping IPv4 address pool among the defaults to assign to the network

错误可参考:

解决方案:停止 Clash Tun 并重启机器。

@Bpazy
Copy link
Owner Author

Bpazy commented Nov 5, 2022

搭建 Clash Dashboard

这里我选择的是 yacd,然后使用 Docker 启动 Dashboard,这是我的 compose 配置:

version: "3.5"
services:
  yacd:
    image: ghcr.io/haishanh/yacd:master
    ports:
      - "127.0.0.1:1234:80"
    restart: unless-stopped

接着配置 NGINX 反代:

server {
    listen 443 ssl;
    server_name clash.example.host;

    ssl_certificate     /etc/nginx/ssl/fullchain.cer;
    ssl_certificate_key /etc/nginx/ssl/example.host.key;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;

    location / {
        proxy_pass http://127.0.0.1:1234/;
    }
}

需要注意的是,此时 Clash dashboard 已经可通过 https 访问了,但是 clash core 的 controller API 仍然处于 HTTP 下,同时 Chrome 又限制了 HTTPS 站点无法访问 HTTP 接口,所以 Clash core 的 API 我们也需要增加反代:

map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
}

server {
    listen 443 ssl;
    server_name clash-core.example.host;

    ssl_certificate     /etc/nginx/ssl/fullchain.cer;
    ssl_certificate_key /etc/nginx/ssl/example.host.key;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;

    location / {
        proxy_pass http://127.0.0.1:2316/;
        proxy_read_timeout 300s;
        proxy_send_timeout 300s;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
    }
}

配置和上面有所不同,主要是 clash core 有一些 websocket 请求,需要特殊处理下。

最后登录 yacd 的时候注意,API Base URL 中应该填写: https://clash-core.example.host:443, 注意端口号一定要写

@Bpazy
Copy link
Owner Author

Bpazy commented Mar 29, 2023

利用 GEOIP 避免频繁新增规则

添加以下规则:

  - GEOIP,CN,DIRECT,no-resolve
  - GEOIP,PRIVATE,DIRECT,no-resolve

注意这依赖于 https://github.com/Loyalsoldier/geoip 项目提供的 mmdb 格式 geoip 数据,替换掉 CFW 内置的 geoip 数据库 C:\Users\example\.config\clash\Country.mmdb

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant