代理工具

clash备份
clash · GitHub Topics
MetaCubeX mihome, ClashX.meta, metacubexd, Yacd-meta, ClashMetaForAndroid
mihomo-party
clash-verge-rev A Clash Meta GUI for Windows, Linux and MacOS
clash_singbox 更新 mihomo 内核、sing-box 内核、sing-box PuerNya 版内核、Clash dashboard 面板和 AdGuard Home
OpenClash A Clash client for Openwrt
v2rayN A GUI client for Windows
v2rayNG A V2Ray client for Android
hiddify-next A multi-platform proxy client

error:Can’t find MMDB, start download:
Country.mmdb

规则配置

默认配置目录是 $HOME/.config/clash
clash-rules

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
rules:
- RULE-SET,applications,DIRECT
- DOMAIN,clash.razord.top,DIRECT
- DOMAIN,yacd.haishan.me,DIRECT
- RULE-SET,private,DIRECT
- RULE-SET,reject,REJECT
- RULE-SET,icloud,DIRECT
- RULE-SET,apple,DIRECT
- RULE-SET,google,GOOGLE
- RULE-SET,proxy,PROXY
- RULE-SET,direct,DIRECT
- RULE-SET,lancidr,DIRECT
- RULE-SET,cncidr,DIRECT
- RULE-SET,telegramcidr,Telegram
- GEOIP,LAN,DIRECT
- GEOIP,CN,DIRECT
- MATCH,PROXY

dashboard

yacd
metacubexd
以Linux为例:
git下来后移动到/home/username/.config/clash,重命名为dashboard

1
2
3
4
5
6
7
external-controller: 0.0.0.0:9090
#设置所使用控制面板的绝对路径
external-ui: /home/username/.config/clash/dashboard
experimental:
ignore-resolve-fail: true
#RESTful API 的口令
secret: 'your-password'

外网访问 http://服务器ip:9090/ui/#/proxies

nginx反向代理

1
2
3
4
5
location /mihomo/ {
proxy_pass http://127.0.0.1:9090/;
proxy_set_header Host $http_host;
proxy_set_header Remote-Addr $remote_addr;
}

开机自启

1
2
3
4
5
6
7
8
9
10
[Unit]
Description=clash service
After=network.target

[Service]
Type=simple
Restart=on-abort
ExecStart=/usr/bin/clash -d /home/username/.config/clash/
[Install]
WantedBy=multi-user.target
1
2
3
4
5
sudo vim /etc/systemd/system/clash.service #将上述内容粘贴
sudo systemctl daemon-reload # 刷新配置
sudo systemctl start clash # 启动clash
sudo systemctl enable clash # 设置开机启动
sudo systemctl status clash # 查看clash状态

设置代理

写在~/.bashrc

1
2
3
4
5
6
7
8
9
10
11
12
13
#Open proxy
proxy_on() {
export http_proxy=http://127.0.0.1:7890
export https_proxy=http://127.0.0.1:7890
echo "HTTP/HTTPS Proxy on"
}

#Close proxy
proxy_off() {
unset http_proxy
unset https_proxy
echo "HTTP/HTTPS Proxy off"
}

dns配置

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
dns:
enable: true
ipv6: false
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
fake-ip-filter:
- "geosite:connectivity-check"
- "geosite:private"

default-nameserver:
- 223.5.5.5
- 119.29.29.29

proxy-server-nameserver:
- https://dns.alidns.com/dns-query
- https://doh.pub/dns-query

# 只有命中 DIRECT 规则的域名,才用这组 DNS
direct-nameserver:
- https://dns.alidns.com/dns-query
- https://doh.pub/dns-query

# 命中 PROXY 或未命中的域名,走这里
nameserver:
- https://dns.cloudflare.com/dns-query#PROXY
- https://dns.google/dns-query#PROXY
- https://101.101.101.101/dns-query#PROXY # 台湾网络资讯中心运营的公共 DNS
- https://9.9.9.9/dns-query#PROXY # Quad9 安全 DNS
- https://doh.dns.sb/dns-query#PROXY # 隐私性极好,推荐
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
dns:
enable: true
ipv6: false
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
use-hosts: true
default-nameserver:
- 223.5.5.5
- 119.29.29.29
nameserver-policy:
geosite:cn:
- https://dns.alidns.com/dns-query
- https://doh.pub/dns-query
nameserver:
- tls://1.1.1.1:853
- tls://8.8.8.8:853
# 目前国外DOH无法使用(已被防火墙精准识别),故使用DOT
fake-ip-filter:
- "*.lan"
- localhost.ptlogin2.qq.com
- dns.msftncsi.com
- www.msftncsi.com
- www.msftconnecttest.com

enable
是否启用 DNS 功能。若设为 false,则使用系统 DNS 进行解析。

cache-algorithm
支持的缓存算法:

  • lru:Least Recently Used(默认)
  • arc:Adaptive Replacement Cache

prefer-h3
DoH 请求优先使用 HTTP/3 协议。

listen
DNS 服务监听地址,支持 udptcp 协议。

IPV6
是否解析 IPv6 地址。若设为 false,对 AAAA 查询将返回空响应。

enhanced-mode
可选值:fake-ip / redir-host(默认 redir-host
指定 mihomo 的 DNS 处理模式。

fake-ip-range
fake-ip 模式下使用的 IP 段设置,同时作为 TUN 模式下默认 IPv4 地址的参考范围。

fake-ip-filter
fake-ip 模式下,匹配此列表的域名不会下发 fake-ip 映射用于连接。
支持域名通配符及引用域名集合。

fake-ip-filter-mode
可选值:blacklist(默认)/ whitelist

  • blacklist:匹配的域名不返回 fake-ip
  • whitelist:仅匹配的域名才返回 fake-ip

use-hosts
是否响应配置文件中定义的 hosts 条目,默认为 true

use-system-hosts
是否查询系统 /etc/hosts 文件,默认为 true

respect-rules
DNS 查询是否遵守路由规则。启用时需配置 proxy-server-nameserver
⚠️ 强烈不建议与 prefer-h3 同时使用。

default-nameserver
用于解析 DNS 服务器自身域名的默认 DNS。
必须为 IP 地址,支持加密 DNS(如 DoH/DoT)。

1
2
3
default-nameserver:
- 223.5.5.5
- 119.29.29.29

nameserver-policy
为特定域名指定解析服务器,支持 geosite,优先级高于 nameserverfallback
键支持通配符,值可为字符串或数组。

1
2
3
4
5
6
7
8
9
10
nameserver-policy:
# 匹配 geosite:cn 列表中的所有域名 (如 baidu.com, taobao.com)
# 使用 阿里DNS 和 腾讯DNSPod 进行解析
'geosite:cn':
- 'https://dns.alidns.com/dns-query'
- 'https://doh.pub/dns-query'

# 匹配 microsoft.com 和 *.microsoft.com
'+.microsoft.com':
- 'tls://1.1.1.1:853'

proxy-server-nameserver
专用于解析代理节点域名的 DNS 服务器。
若未设置,则沿用 nameserver-policynameserverfallback 的配置。

direct-nameserver
用于 direct 出站策略域名解析的 DNS 服务器。
若未设置,则沿用 nameserver-policynameserverfallback 的配置。

direct-nameserver-follow-policy
是否让 direct-nameserver 遵循 nameserver-policy
仅在 direct-nameserver 非空时生效,默认为 false(不遵循)。

nameserver
默认域名解析服务器列表。

fallback
后备域名解析服务器,通常配置为境外 DNS,确保结果可信。
配置 fallback 后,默认启用 fallback-filter,且 geoip-code 默认为 CN

fallback-filter
对后备 DNS 结果进行筛选,满足条件时优先或仅使用 fallback 的结果。

geoip
是否启用 GeoIP 判断功能。

geoip-code
国家代码,默认为 CN

  • 非此国家的 IP 结果视为“污染”,将采用 fallback 结果
  • 此国家的 IP 结果直接采用

geosite
匹配 geosite 集合中的域名被视为已污染,将仅使用 fallback 解析,跳过 nameserver

ipcidr
填写格式为 IP/掩码
匹配这些网段的解析结果视为污染,将采用 fallback 的结果。

domain
列出的域名被视为已污染,匹配时直接使用 fallback 解析,跳过 nameserver

dns流程

场景一:访问国内网站 (例如:www.baidu.com)

  1. 应用请求 & Clash 返回“假IP”

    • 浏览器向系统请求 www.baidu.com 的 IP。
    • Clash 的 enhanced-mode: fake-ip 立即介入,直接返回 fake-ip-range (198.18.0.1/16) 中的一个地址(如 198.18.0.10)。
    • 关键点:此时 Clash 内部记录:198.18.0.10 <-> www.baidu.com
  2. Clash 嗅探与分流准备

    • 浏览器向 198.18.0.10 发起 TCP/UDP 连接。
    • Clash 截获流量,还原出域名 www.baidu.com
    • Clash 根据你配置文件中的 rules(假设包含 GEOSITE,CN,DIRECT)判断该域名命中 DIRECT 规则。
  3. 触发 direct-nameserver 查询

    • 由于命中 DIRECT 规则,Clash 启用 direct-nameserver 列表进行解析。
    • Clash 并发向 https://dns.alidns.com/dns-queryhttps://doh.pub/dns-query 发起请求。
    • 技术细节:Clash 会先通过 default-nameserver (223.5.5.5) 解析出阿里/腾讯 DoH 服务器的真实 IP,以建立加密连接。
  4. 获取真实 IP 并直连

    • 国内 DNS 返回百度真实的国内服务器 IP。
    • Clash 拿到真实 IP 后,直接建立本地网络到百度服务器的连接。

场景二:访问国外网站 (例如:www.github.com)

  1. 应用请求 & Clash 返回“假IP”

    • 过程同上,浏览器获得一个假 IP(如 198.18.0.22)。
  2. Clash 嗅探与分流准备

    • 浏览器向 198.18.0.22 发起连接,Clash 还原出域名 www.github.com
    • Clash 匹配 rules,由于不属于国内范围,通常命中 PROXY 规则。
  3. 触发 nameserver 组(带 #PROXY 标签)查询

    • 由于判定为 PROXY(或未命中直连规则),Clash 启用 nameserver 列表。
    • 配置中 nameserver 带有 #PROXY 后缀,这意味着 这些 DNS 请求本身也会走代理隧道 发送出去。
    • Clash 通过代理节点向 dns.cloudflare.comdns.google 发起 DoH 请求。
  4. 远程解析与建立连接

    • 代理节点远端解析出 GitHub 的真实海外 IP。
    • 优势:由于 DNS 请求在代理隧道内加密且在远端执行,彻底规避了本地运营商的 DNS 污染和劫持。
    • Clash 最终通过代理节点,建立到 GitHub 真实 IP 的加密通道。

场景三:特殊过滤 (例如:connectivity-check)

  1. 触发 fake-ip-filter
    • 当浏览器访问 connectivity-check.gstatic.com(属于 geosite:connectivity-check)时。
    • Clash 发现它在 fake-ip-filter 列表中,于是 不返回假 IP,而是直接进行真实 DNS 解析并返回真实 IP 给浏览器。
    • 这样可以确保系统网络检查、私有网络地址等不会因为“假 IP”而产生兼容性问题。

流量嗅探 (Sniffing)

什么是流量嗅探?

在 Clash 中,嗅探(Sniffing)主要是指从应用发出的网络数据包中,反向提取出“目标域名”的过程。
在使用 Fake-IP 模式或透明代理(如 Tun 模式/路由器翻墙)时,操作系统或应用发给 Clash 的往往只是一个 IP 地址(比如 Fake-IP 分配的假 IP,或者应用自己解析出的真实 IP)。Clash 为了进行精准的分流,必须搞清楚这个 IP 背后到底对应的是哪个域名。

嗅探是如何工作的?

  • 步骤一:拦截初始连接
    当应用向某个 IP 发起 TCP/UDP 连接时,Clash 会暂时“卡住”并拦截这些初始数据包。

  • 步骤二:拆包提取特征 (DPI 深度包检测)
    Clash 会读取数据包的开头部分,寻找明文的域名信息:

    • 对于 HTTPS (TLS) 流量:Clash 会拆解 TLS Client Hello 握手包,读取其中的 SNI (Server Name Indication) 字段。这里面通常明文写着目标域名(例如 www.youtube.com)。
    • 对于 HTTP 流量:Clash 会读取 HTTP 请求头中的 Host 字段。
    • 另外,较新的核心(如 Meta)还能嗅探 BT 协议、QUIC 等流量特征。
  • 步骤三:域名覆盖与放行
    一旦提取到真实域名,Clash 就会用这个域名“覆盖”掉请求中原本的 IP 地址。
    例如:Clash 收到指向 198.18.0.15 的连接,嗅探后发现 SNI 是 www.google.com。接下来,Clash 内部的所有路由逻辑,都会基于 www.google.com 来计算。

为什么 Tun 模式下依然需要嗅探?

既然 Tun 模式能接管所有流量(包括 53 端口的 DNS 查询),为什么还会出现“拦截不到”或者“拿到纯 IP”的情况?主要是因为以下三种“不讲武德”的场景:

1. 浏览器开启了 DoH (DNS over HTTPS) —— 最常见的情况

  • 原理:现在的 Chrome、Edge、Firefox 等浏览器,默认都开启了“安全 DNS (Secure DNS)”。它们在查询域名时,不走传统的 53 端口,而是把 DNS 请求打包成普通的 HTTPS 加密网页流量(走 443 端口),发给比如 Cloudflare (1.1.1.1) 或 Google (8.8.8.8)。
  • Tun 的视角:Tun 模式看到这个流量,只会认为“哦,浏览器在访问 1.1.1.1 的一个 HTTPS 网页”,它无法识别这其实是一个 DNS 查询,因此 Clash 的 DNS 处理逻辑直接被绕过。
  • 嗅探的作用:浏览器通过 DoH 拿到真实 IP 后,向该 IP 发起连接。此时 Clash 的嗅探介入,拆开 TLS 握手包拿到 SNI(比如 www.netflix.com),从而重新激活分流规则。

2. App 内置了硬编码 IP 或自建 DNS

  • 原理:某些 App(比如 Telegram、某些流媒体、部分国产大厂 App)为了防劫持或加速,代码里直接写死了服务器 IP 列表,或者使用了自己独立的私有协议去解析 IP。它们根本就不向操作系统发起任何标准的 DNS 请求。
  • Tun 的视角:Tun 模式突然就收到了一个直接指向 149.154.x.x (TG的IP) 的连接请求,毫无前因后果。
  • 嗅探的作用:同样,通过嗅探流量特征或 TLS 握手,把域名还原出来,确保正确走代理。

3. P2P 下载或直接 IP 访问

  • 原理:BT 下载软件,或者你直接在浏览器地址栏输入了一个 IP 地址。
  • Tun 的视角:这里压根就没有域名的概念,只有纯 IP 之间的互相连接。
  • 嗅探的作用:对于 BT 流量,较新的嗅探核心(Meta/Mihomo)甚至能识别出 BitTorrent 协议特征,强制将其阻断或走直连,防止 BT 流量跑代理消耗机场流量。

嗅探 (Sniffer) 配置示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
sniffer:
enable: true

# 强制替换目标地址为嗅探出的真实域名
override-destination: true

sniff:
HTTP:
ports: [80, 8080-8880]
override-destination: true
TLS:
ports: [443, 8443]
QUIC:
ports: [443, 8443]

# 强制对所有请求进行二次嗅探(防止域名欺骗,配合纯 IP 还原)
force-domain:
- '+'

skip-domain:
# --- 智能家居防掉线 ---
- '+.mi.com' # 替换原来的 Mijia Cloud
- '+.xiaomi.com' # 覆盖所有小米/米家设备
- 'dlg.io.mi.com'
- '+.apple.com' # 苹果各类基础服务

# --- 系统连通性检测 ---
- 'captive.apple.com'
- 'msftconnecttest.com'
- 'msftncsi.com'
- 'detectportal.firefox.com'
- 'connectivitycheck.gstatic.com'

链式代理

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
proxies:
-
name: 落地节点 1 - 家宽
server:
port: 8080
type: ss
cipher: aes-128-gcm
password:
dialer-proxy: dialer

-
name: 机场节点 1
server:
port: 9090
client-fingerprint: chrome
type: trojan
password:
sni: itunes.apple.com
skip-cert-verify: true
udp: true

-
name: 机场节点 2
server:
port: 9090
client-fingerprint: random
type: trojan
password:
sni: www.bing.com
skip-cert-verify: true
udp: true

proxy-groups:

- name: dialer
type: select
proxies:
- 机场节点 1
- 机场节点 2

- name: 🔰 手动选择
type: select
proxies:
- 落地节点 1 - 家宽