V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
studyingss
V2EX  ›  分享创造

我花了一周准备,想和你分享 Clash 所有特性运用到极致之后的体验

  studyingss · 330 天前 · 32635 次点击
这是一个创建于 330 天前的主题,其中的信息可能已经有所发展或是发生改变。

前言

去年我发布了一篇关于 clash relay 的教程,在 V2EX 引发了一些讨论。

比如 https://www.v2ex.com/t/894700 还有一些其他的帖子。

当初随便拿来放临时配置的 gist 也有了 50 多个 star https://gist.github.com/miaomiaoclub/6947f7cb93846301f1658da0edcd61bf

时隔半年多,这套方案在和朋友 @ RADE 的共同学习中有了不少改进,tunnels 功能的加入更是让整套方案如虎添翼,不少体验让我自己都有种“wow”的感觉,例如 延迟降低 100%

最终的效果让我到现在都非常兴奋,所以我花了一周时间再来写一篇文章和大家分享。

快速体验

这是我目前使用的配置的示意图,为了美观简化了不少内容。

因为所有东西要讲完真的很复杂,为了让大家快点感受我的激动,我花了一周时间写了一个模版让你可以在 30 秒内开始体验这一切。

你只需要去 https://www.urlencoder.org/ 或者其他什么网站把你的订阅链接进行 url 编码。

然后把编码后的内容拼接到下面这一大串链接的末尾,再把它放到 Clash 里面订阅就可以了。

https://api.sublink.dev/sub?target=clash&insert=false&config=https%3A%2F%2Fgist.githubusercontent.com%2Fmiaomiaoclub%2F2178a7dd7fbbf4b7774ad6f7ad2000c5%2Fraw&emoji=true&list=false&tfo=false&scv=true&fdn=false&sort=false&new_name=true&url=https%3A%2F%2Fgist.githubusercontent.com%2Fmiaomiaoclub%2F92fc5af76ede047810a7a51af86089ee%2Fraw%7C

完成之后你应该可以看到这样的分组,其中的 READY BOOST 就是使用了 tunnel + grpc 的连接,你可以把左右两边的延迟进行对比。

然后你可以在节点选择列表的末尾找到 READY BOOST ,选中它,然后打开几个网页,另外,它应该是可以解锁 ChatGPT 的。

顺带一提,当你自行实现的时候,它是 udp fullcone 的,我在这里禁用了 udp 。

这套体验配置会在 1 天后失效,取决于这个帖子的回复情况延长或缩短。

实现原理是什么?

基于 grpc 的连接复用。

关于 proxy chain 的优点,可以查看下面这篇文章

https://luxirty.com/article/01815b7d-073d-48ef-9528-7b4ad033f8d0

这里主要讲讲 grpc ,众所周知,连接复用可以节省握手时间,http/2 就拥有连接复用的特性。

然而 clash 只为 grpc 实现了连接复用,http/2 在 clash 中并不具备连接复用。

基于 tunnel 的 proxy chain

在实际测试中,我们(@RADE )发现 relay 实际上导致了非常多的问题,例如 udp 无法通过、grpc 奇怪的高延迟等。

因此我们使用 tunnels 替换了 relay ,它的表现相比于 relay 优秀了很多。

你可以到 clash 的官方 wiki 来学习 tunnel 的用法 https://dreamacro.github.io/clash/configuration/configuration-reference.html

也可以看看我的博客,有稍微容易看懂的讲解 https://luxirty.com/article/chain-proxy-powered-by-clash-tunnels

负载均衡、故障转移、最短延迟

在上面的体验配置中我并没有把所有这些特性都加上。因为写起来太麻烦了。但我相信对 V2EX 的各位来说并不难。

实际上还有更多的内容可以讲:

  • 如何更方便地为 clash 自定义规则

    你可以看到在上面的测试配置中,我们修改了配置并添加了节点,并且没有依赖任何自建服务,一个公开的 subconverter+gist 足够了

  • 使用订阅转换时,如何把来自不同订阅的 proxy 分别放到不同的 group

唔…好啦,大概就这些!……希望这贴不要沉🥹

第 1 条附言  ·  329 天前
感谢各位的讨论!体验配置已经关掉了,不过模版会保留,依然可以转换出配置文件来学习 tunnel 的写法。
相关详细的教程后续会 append 到这边,如果有什么疑问或者想看的写到回复里就好。
第 2 条附言  ·  327 天前
如何自定义 Clash 分流规则、如何为 Clash 添加代理域名的教程已经写好了
https://www.v2ex.com/t/949462
162 条回复    2024-04-17 17:36:52 +08:00
1  2  
Jirajine
    102
Jirajine  
   330 天前
@vitovan #100 像这样的问题不止一处,DNS 和 UDP 的处理你可以翻一下。

看到这样的行为,为什么不使用原因显而易见了,更不用说什么 premium 核心、闭源的 GUI (这是一个无法商业化的程序)之类的 drama 了。
Marinaaaa
    103
Marinaaaa  
   330 天前
问一下 这样是不是受限于机场的带宽?
比如我机场的带宽只有 10M, 自建的带宽有 100M 。 这样的话,实际上限就是 10M ?
aptupdate
    104
aptupdate  
   330 天前 via iPhone
@20210610204811 #84 按照你的例子我这边 warp 节点没问题,但是 warp➡️机场 不通。能截个完整点的例子吗?
storyxc
    105
storyxc  
   330 天前
收藏了 有空学习下
guanzhangzhang
    106
guanzhangzhang  
   330 天前
为啥我的 clash 订阅更新的配置文件经常被截断,然后导致配置文件错误起不来
hanguofu
    107
hanguofu  
   330 天前 via Android
谢谢分享!请问能不能用这种技术访问自己家里的 nas 小主机(没有公网 IP)?
vitaminx
    109
vitaminx  
   329 天前
哇 一直想这么用,无奈没有搞定后置代理,最后用 Proxifier 转发解决!常常需要调整,很累!
请问 xray 支持 tunnel 功能吗?
clash 的 tunnel 模式可不可以用其他代理客户端做后置代理,实现三重代理:
本地请求 → 代理 1 (由代理客户端 1 指定)→ 代理 2 (由代理客户端 2 指定)→ 代理 3 (由代理客户端 3 指定)→ 目标服务器
eg:Chrome → Shadowrocket → tor → clash → google.com
dogfight
    110
dogfight  
   329 天前
clash 用了一段时间。搞不好 DNS 泄漏,放弃了
1423
    111
1423  
   329 天前
几年前就这么玩了。。udp mux + 服务端转发 是现在的方案,一路 0rtt
但很多人连 ttfb 都不会自己测量,还是不科普了
1423
    112
1423  
   329 天前
之前有个 rixcloud 体验为什么好,原因之一就是他们国内中转节点跟海外节点是 mux 的
Lightbright
    113
Lightbright  
   329 天前
@dogfight 这个问题 clash 认为不是一个问题,哈哈。不过可以通过自己写 script 模式规则来避免泄露
cat9life
    114
cat9life  
   329 天前
@1423 #111 大佬详细说说?
retanoj
    115
retanoj  
   329 天前
@dogfight ipfake 模式 + doh/dot 不可以吗
20210610204811
    116
20210610204811  
   329 天前
@aptupdate #104 你把 proxies 跟 rules 去掉,发出来看下。
aptupdate
    117
aptupdate  
   329 天前
aptupdate
    118
aptupdate  
   329 天前
@20210610204811 #117 主要是这些配置,然后选择 READY BOOST 节点
jianzhao123
    120
jianzhao123  
   329 天前
这个添加 tunnels 的能不能用 subconverter 自动添加上?找了一下 subconverter 的文档没有发现
wr516516
    121
wr516516  
   329 天前
这个示意图是用什么画的呀
yanyumihuang
    122
yanyumihuang  
   329 天前 via Android
@aptupdate 我也有同样的问题,机场和 warp 分开都可以用,用 tunnels 联合到一起就不行了
20210610204811
    123
20210610204811  
   329 天前
@aptupdate #119 你确认是想 客户端 > WARP > 机场 > google... > 机场 > WARP > 客户端?

这种方式显而易见的有以下问题。
1.无法利用 WARP 洗 IP 。
2.大陆连接 warp 稳定性一般,从大陆连接机场显然比连接 warp 要稳,因为机场一般会为大陆用户连接做线路优化,尤其是如果你用的专线。
3.如果你要通过 warp 代理你到机场的流量,那么你的机场节点的 server 需要配成 127.0.0.1(tunnels 转发),也就是说你需要对远程提供的文件进行修改,据我所知各类在线转换站还没有这个功能,这意味着你不能使用 proxy-provider ,当然,你可以选择直接下载配置文件,然后自己修改其中的 server ,然而这也会带来一个问题,那就是你必须要会 js ,自己在 parser 中自定义你的配置文件,不然没办法只更新 nodelist ,而不搞乱 rule 等其他配置。
20210610204811
    124
20210610204811  
   329 天前
@aptupdate #119

你想要的效果只能这样实现,用 proxy-provider 是不行的。

```
mixed-port: 7890
allow-lan: false
mode: Rule
log-level: info
external-controller: 127.0.0.1:9090
profile:
store-selected: true
store-fake-ip: true
dns:
enable: true
ipv6: false
listen: 127.0.0.1:5450
enhanced-mode: fake-ip
nameserver:
- https://dns.pub/dns-query
- https://223.5.5.5/dns-query
tunnels:
- network: [tcp, udp]
address: 127.0.0.1:7777 # 这里也不需要改
# target: 162.111.111.111:2408 # 这里改成自建节点的 ip 和端口号
target: HK001 节点的真实域名 /IP:以及对应的端口
proxy: ⚡️ READY BOOST
# - tcp/udp, 127.0.0.1:7777, engage.nanocat.me:2408, 机场

proxies:
# READY BOOST
- name: ⚡️ READY BOOST
type: wireguard
server: engage.nanocat.me
port: 2408
ip: 172.111.111.111
# ipv6: 2606:4700:110:8c
private-key: +F8ARjCMCyffU1236azCH5
public-key: bmXOC+F1FxEMF9dyiK2H5
remote-dns-resolve: true
dns: [1.0.0.1, 223.6.6.6]
mtu: 1280
udp: true
- name: HK001
server: 127.0.0.1
port: 7777
type: trojan
password: xxx-yyy-zzz
sni: 123.xxx.com
skip-cert-verify: true
udp: true

proxy-groups:
- name: 🚀 节点选择
type: select
proxies:
- HK001
rules:
- GEOIP,LAN,DIRECT
- GEOIP,CN,DIRECT
- MATCH,🚀 节点选择
```
aptupdate
    125
aptupdate  
   329 天前
@20210610204811 “你确认是想 客户端 > WARP > 机场 > google... > 机场 > WARP > 客户端?”
之前的回复可能没表达清楚,我是想用 WARP 来落地。客户端 <> 机场 <> WARP <> google
rayray314
    126
rayray314  
   329 天前
第一次尝试没成功,把本地端口改成 7787 后成功了。😅 windows 上各种奇怪的端口占用问题。
20210610204811
    127
20210610204811  
   329 天前
@aptupdate #125 你把 filter: "港|HK|(?i)Hong" 去掉,然后测试不同的节点就知道哪个是可用的了。
hang333
    128
hang333  
   328 天前   ❤️ 1
@jianzhao123 自定义 config 和 base.yml ,可以看看 op 发的订阅链接中的 config
https://gist.githubusercontent.com/miaomiaoclub/2178a7dd7fbbf4b7774ad6f7ad2000c5/raw
noqwerty
    129
noqwerty  
   328 天前 via iPhone
@aptupdate 请问下这样配置真的会走 wireguard 吗?我类似的写法从机场连到自建 trojan ,在查 ip 的网站显示还是机场 ip
aptupdate
    130
aptupdate  
   328 天前 via iPhone
@noqwerty 我是想要 wireguard(WARP)来落地,但是没有成功。
WARP 和机场都是通的,然后尝试 relay 和 tunnels 落地都不成功。
使用 trojan 应该没问题,可以把配置段落发出来看看。
@20210610204811 表示成功了,但我不知道具体哪里配置不同。
zhinianyuxin0
    131
zhinianyuxin0  
   328 天前
@aptupdate @20210610204811 我也是一样的 单独使用 warp 可以链接,但是使用 tunnels 就连接失败了
noqwerty
    132
noqwerty  
   328 天前 via iPhone
@aptupdate 同样的 trojan 配置用 relay 是可以的,tunnels 不行。不知道跟我用的 Clash.Meta 内核有没有关系
EthanOean
    133
EthanOean  
   327 天前
一直想用好 clash ,蹲一个详细教程
captainm
    134
captainm  
   325 天前
太棒了,不知道此方案,对应的 subconverter 配置模板如何修改呢?
captainm
    135
captainm  
   325 天前
@captainm 似乎看明白了,subconverter rule base 加一段 tunnels 的配置,其他的和 relay 一样,抓住 tunnels 节点和自定义节点拼起来
Ccf
    136
Ccf  
   324 天前
用的 shellclash+adguardhome ,adg 里上游 dns 已经指向 shellclash ,那么,shellclash 里的 dns 加密后还需要开启 dnsmasq 和禁用 dns 劫持么?
molezznet
    137
molezznet  
   323 天前
aptupdate
    138
aptupdate  
   323 天前
@molezznet 我也是,同一个 warp(WireGuard)节点 relay 可以,tunnels 却不行。推测是 tunnels 中配置的问题,具体找不到原因。
molezznet
    139
molezznet  
   319 天前
@aptupdate 我再看了下原帖 blog 和 https://gist.github.com/miaomiaoclub/d59f24ed7d86cc83e757df8353948a11 , 可以了, 重新研究了下,warp 节点是 CF 前置,⚡️ tunnels 是落地
```
- name: "warp"
type: socks5
server: 127.0.0.1
port: 5555
udp: true

- name: "⚡️ tunnels"
type: vmess
server: 127.0.0.1 #这里不需要改
port: 7777 #这里不需要改
uuid: xxxxxxxxxxxx
alterId: 0
cipher: auto
udp: true
tls: true
skip-cert-verify: true
servername: aaa.com
network: grpc
grpc-opts:
grpc-service-name: "xxxxxxxx"

tunnels:
- network: [tcp, udp]
address: 127.0.0.1:7777 #这里不需要改
target: aaa.com:443 #这里改成自建节点的 ip 和端口号
proxy: warp
```
aptupdate
    140
aptupdate  
   319 天前
@molezznet CF 前置是又转换了一次吗?变成 cocks5 啊?
WARP 不是 WireGuard 吗?我尝试直接用 WireGuard 一直不成功。
molezznet
    141
molezznet  
   319 天前
楼主的 relay 原帖和 tunnels 新帖都看了下,终于好了,同样 CF 的 warp+的前置下,tunnels 可以比 relay 平均块一倍,不过我是用 VMess grpc 的

https://img1.imgtp.com/2023/06/25/gh0VUK8B.png

tunnels 配置见 139 楼上贴
relay 方式就是 blog 中的默认
```
- name: ♻️ iRimo Private Relay
type: relay
proxies:
- warp
- vmess-grpc
molezznet
    142
molezznet  
   319 天前
@aptupdate 我是有个 CF warp 的,用的 socks 模式, 会启动一个 socks5 代理的那个模式
Lunser
    143
Lunser  
   319 天前   ❤️ 1
@jamosLi #51 应该是 excalidraw
jamosLi
    144
jamosLi  
   319 天前
@Lunser 感谢
kangkag0231
    145
kangkag0231  
   318 天前
6666
vruzo
    146
vruzo  
   311 天前
@aptupdate 请问下这个自建节点是什么意思?机场的节点不行吗
ksdd521lr
    147
ksdd521lr  
   310 天前
我的出口也是用的 warp ,开启后用几分钟会断开不知道为什么,断开一会后又会连上,就这样循环。同样的配置使用 wireguard 客户端就不会。有没有了解的前辈解惑下吖
[![8b0d50de88d66ed7f60b36afc7fdd83c.th.png]( https://s1.imgcap.xyz/8b0d50de88d66ed7f60b36afc7fdd83c.th.png)]( https://cap2box.com/i/WdfFi)
gofe2008
    148
gofe2008  
   300 天前
@20210610204811 大佬,求个去掉节点信息的完整配置文件。
xzm1006
    149
xzm1006  
   277 天前
感谢 OP 主,第一次尝试在自用配置文件加入机场订阅以及 tunnel 配置,如果 tunnel 能支持类似 Group 组选择自建就好了
aaaachen
    150
aaaachen  
   277 天前
折腾了半天,还是做不到通过 WARP 落地,搞不懂为什么,有没有大佬看一眼配置文件? https://shorturl.at/jADHX


配置文件调来调去 WARP 都是超时,Clash for Windows 版本是 v0.20.31 ,内核版本是 2023.07.22 Premium (59154)
totoro625
    151
totoro625  
   235 天前
tunnels 非常好用,但是发现了问题:
直接使用二进制文件运行的时候 tunnels 正常工作
通过 shellclash 、clashforAndroid 的时候,tunnels 无法正常工作
studyingss
    152
studyingss  
OP
   235 天前   ❤️ 1
@totoro625
参见 #95 ,clash for android 很久没有更新了,tunnels 是去年年底加入的特性
totoro625
    153
totoro625  
   235 天前
@studyingss #152 我想说的是通过一些第三方软件启动最新的内核也是不能用 tunnels
官方放出来的二进制包直接命令行运行是支持的,丢入 shellclash 、openclash 等第三方实现,
可能是哪里需要额外设置一下,目前是无法使用的
日志是:error:127.0.0.1:7777 connect error:connect failed:dial tcp 127.0.0.1:7777:connect:connection refused
直接用命令行运行又能直接运行,有时间还得研究一下
Thymolblue
    154
Thymolblue  
   234 天前 via Android
请问 Clash for Android 支持 tunnels 吗。我尝试了一下,发现电脑端能完美运行,但手机端不通。
Thymolblue
    155
Thymolblue  
   234 天前 via Android
抱歉,没有看到上面的评论,看来 CFA 还需要多套一层国内节点。
studyingss
    156
studyingss  
OP
   234 天前 via Android   ❤️ 1
@Thymolblue 有两个选择,要么换成 clash meta for Android ,要么用 relay 。其实 relay 也不错的
mdgwmt0
    157
mdgwmt0  
   228 天前
用了你的配置文件( https://gist.github.com/miaomiaoclub/d59f24ed7d86cc83e757df8353948a11)改成了自己的节点和机场订阅转换,导入 clash 以后,机场节点测速全是超时,不知道哪里出问题了。
Liniretus
    158
Liniretus  
   226 天前
@popzuk Clash.Meta 的 Dialer-Proxy 似乎不支持 UDP ,甚至不如 Relay Group

只使用 Tunnels -> clash core/clash premium/clash.meta udp 根据内层协议决定,可以原生 udp 也可以 udp over tcp ,支持 fullcone
只使用 Relay Group --> clash core/clash premium udpblocked ; clash meta udp over tcp (支持 fullcone )
只使用 dialer proxy(clash.meta) --> udpblocked
Liniretus
    159
Liniretus  
   226 天前
@popzuk
抱歉,武断下结论了,Dialer Proxy 个人测试完全支持 UDP (还可以 Fullcone )

在 Clash.meta 中用起来体验实际跟 Relay Group 差不多,只是不清楚如何处理 UDP 的。Tunnels 可以原生 UDP ,Relay Group 只能 UDP over TCP ,Dialer Proxy 如何实现我不清楚。
elliothe
    160
elliothe  
   214 天前
配置完成用了很长一段时间,今天开 cloudflare 测试( https://www.cloudflare.com/cdn-cgi/trace )了一下,页面显示 warp=off ,同样在手机上打开,warp=plus ,那说明 pc 上落地并没有用 warp 节点。看 clash 日志,tunnel listening 状态也是正常的,有点奇怪了🤔
molezznet
    161
molezznet  
   212 天前
@Liniretus 试了下,meta1.15 中 relay 和 dialer 都可以,好像 tunnels 就是不通 ……
b1t
    162
b1t  
   22 天前
时隔近一年想问一下,我自建落地机 ss 随机设置了一个端口,机场只有部分节点可以转发到落地成功联网,当我将落地机 ss 的端口设置为 443 反而都可以成功上网了,这是什么原因造成的?
1  2  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3413 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 31ms · UTC 11:47 · PVG 19:47 · LAX 04:47 · JFK 07:47
Developed with CodeLauncher
♥ Do have faith in what you're doing.