分享我的一个 openclash 终极优化方案

94 天前
 guoguobaba

首先说我的需求,第一当然是科学上网,第二是我的群晖需要用 ipv6 暴露在外网。所以我的网络需要开启 ipv6 ,包括 dns 也需要允许 ipv6.下面是我的优化方案:

1 、基本的上网配置是 dnsmasq+openclash+smartdns, openclash 劫持 dnsmasq 的 53 端口,然后将 dns 转发到 smartdns 的 5335 端口,smartdns 国内域名向我的上游 dns 解析,国外域名通过 doh/dot 解析。类似于这样的配置:

domain-set -name chinalist -file /etc/smartdns/domain-set/accelerated-domains.china.domain.smartdns.conf
domain-rules /domain-set:chinalist/  -nameserver domestic -speed-check-mode ping,tcp:80,tcp:443 -address #4,#6 -dualstack-ip-selection yes -response-mode first-ping
domain-rules /./  -nameserver gw -speed-check-mode none -address -6 dualstack-ip-selection no -response-mode fastest-response

这里,国内域名可以解析 ipv4 和 ipv6 地址,国外域名就只解析 ipv4 地址。

2 、openclash 使用 redir-host 模式,之所以不使用 fakeip ,是因为我来需要 ssh 连接外网,用 fakeip 会出各种奇怪的问题。然后选择“自定义上游 DNS 服务器”,所有上游服务器都设置成 smartdns 的 5335 端口。这样把 dns 交给 smartdns 分流,smartdns 如果使用 doh 查询 1.1.1.1 或者 google 的 dns ,又会转到 openclash 翻墙。 之所以不把 smartdns 放最前面,是因为 openclash 通过域名去分流更精准一些。

3 、openclash 不做 ipv6 的代理,因为上面说了,国外域名只会解析 ipv4 地址。

4 、在 openclash 开发者选项增加 iptables 规则,这样当国内域名解析 ipv4 后,直接就通过网络出去了,而不走 clash 代理,在插件设置-->开发者选项里增加两行脚本:


LOG_OUT "Tip: Start Add Custom Firewall Rules..."
iptables -t nat -I openclash -m set --match-set china_ip_route dst -j RETURN
iptables -t mangle -I openclash_output -m set --match-set china_ip_route dst -j RETURN

利用 openclash 自己同步的 ipset 规则来讲解析到的国内 ip 地址直接跳转而不走 clash 代理通道。第一条是路由规则,第二条是本机规则。

5 、使用 github cmliu 大神的 edgetunnel 项目,在 cf 上弄了个代理,然后又用 CF-Workers-SUB 项目,将我买的收费机场和 cf 的免费机场做了一个聚合。最后 fork cmliu 大神的 ACL4SSR 项目,定制了我的分流规则,使 openclash 自动订阅我的 https://fgfwsub.xxxx.site/<uuid>即可自动获取机场订阅信息。当我的机场发生改变的时候,只需要去这个网址上去修改机场聚合地址就可以了 。当我需要设置新的分流规则,只需要在我 fork 的 ACL4SSR 项目里,修改对应的分流规则即可。具体可以参照油罐该大神的视频。

春节以来,零零碎碎折腾了好久,总算折腾得好用了。

2856 次点击
所在节点    OpenWrt
17 条回复
feelinglucky
94 天前
sing-box + adguard 足够了,国内直连国外走代理,没有那么复杂
235777178
94 天前
越复杂延迟时间越长。最后发现折腾的意义就是折腾
badgv
94 天前
很好奇 fakeip 的 ssh 能有啥奇怪问题?一直用 fake 模式,啥问题都没有,adguard(可有可无)+psw2(自建 sbox)+fakedns ,带 ipv6 环境,基于域名(geodata+自定义维护域名)分流,国内正常解析双栈域名,科学域名直接 fake ,用好久了,啥问题都没有
SakuraYuki
94 天前
openclash 以前折腾半天,最后发现不如换成 singbox 或者 surge ,简单省事
guoguobaba
94 天前
@SakuraYuki 看需求的,比如我用 singbox ,之前发过,内网的 ipv6 不能被访问,导致 pt 没流量。而且很多网站需要动态调整规则,手动选择机场,比如 openai 就不能用 hk 的机场,不能用 cf 的机场等等,缺省的方案访问馒头会被当成 box 。综合来看,这套方案能满足我这些需求。
xpn282
94 天前
搞那么复杂了。
我也是 IPv6 环境,主路由上 OpenClash 也是 redir-host 模式,OpenClash 设置里:接管 IPv6 流量,并且允许 IPv6 类型 DNS 解析,也就是说 IPv6 全开了。只要做好 geoip:cn 规则,v4 和 v6 流量由 OpenClash 处理(直连或代理),我的节点有 IPv6 的,也有 IPv4 的,混合随机使用,也不需要担心什么国外只返回 v4 不返回 v6 之类的东西,一切正常,没发现过任何因为使用 IPv6 产生的问题。

还有就是 OpenClash 的 dns 服务本身就可以做分流的,不需要借助其他 dns 工具了。配置 nameserver-policy 和 nameserver 即可实现分流,并且现在可以把国外 dns 代理解析,这几天国外 dns 不是被墙了吗,不好使了,把国外 dns 代理即可解决
guoguobaba
94 天前
@xpn282
为啥我连 v4 先 iptables 转 china ip 呢
缺省都可以用,不就是优化吗
xpn282
94 天前
@guoguobaba #7 不懂这些,太高深的优化我也不懂。
我现在就是 OpenClash 里的 IPv6 全开。
1 ,能通过各种 IPv6 网址测试。
2 ,节点有 v4 节点和 v6 节点,fallback 策略混合使用的,出国没发现任何的问题,也就是说不会因为我的节点是 v4 还是 v6 而产生问题。

另:如果不想让国内流量走 clash 内核,就把“绕过国内”打开。我一般都不开这个,我有时需要看个别设备访问什么域名。
guoguobaba
94 天前
@xpn282 无他,就是速度问题。另外,免费的 cf 节点时常抽风,这也是我要考虑的问题。我现在大部分流量比如看油管啥的都是走免费的 cf ,少部分走按流量收费的机场。
chuxi
93 天前
SakuraYuki
93 天前
@guoguobaba #5 现在用 surge 倒是这些问题都能解决,唯一的缺点就是贵
wegbjwjm
93 天前
@chuxi 开箱即用我也不会,能喂吗?我的水平只会路由器刷个别人编译好的固件。
htfcuddles
80 天前
smartdns 基于列表的分流并不好用,有太多漏网之鱼,只能说涵盖了部分常用网站。不在乎泄露还是 clash 的 fallback 完美。openclash 跳过 cn 路由并不需要任何脚本,直接选跳过中国路由模式就可以了。会折腾也不用订阅转换,别人写的定制性太差,直接手写本地规则,rule-set 和 geosite 都会自动更新,机场订阅用 proxy-provider 更新就可以了。
guoguobaba
79 天前
@htfcuddles 绕过中国模式和我写的 iptables 规则一样,用 clash 自带的了

proxy provider 这种机制和 singbox 的差不多,但是还是需要去界面改。我把规则分给好几个人用,用订阅+gist 这种模式比较好。
tokuwaka
76 天前
可以转用 nikki 了
diave971349
23 天前
@tokuwaka 我 pt 下载器部署在路由器上面,nikii 没有绕过端口就很麻烦。。。
henryleo
17 天前
openclash 现在有支持 mihomo 配置文件的锚点吗?

我把 cmfa 有锚点的配置直接给 openclash 用,这样没问题吧?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://yangjunhui.monster/t/1116166

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX