首先说我的需求,第一当然是科学上网,第二是我的群晖需要用 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 项目里,修改对应的分流规则即可。具体可以参照油罐该大神的视频。
春节以来,零零碎碎折腾了好久,总算折腾得好用了。
![]() |
1
feelinglucky 12 小时 12 分钟前
sing-box + adguard 足够了,国内直连国外走代理,没有那么复杂
|
![]() |
2
235777178 11 小时 32 分钟前
越复杂延迟时间越长。最后发现折腾的意义就是折腾
|
3
badgv 11 小时 22 分钟前 via Android
很好奇 fakeip 的 ssh 能有啥奇怪问题?一直用 fake 模式,啥问题都没有,adguard(可有可无)+psw2(自建 sbox)+fakedns ,带 ipv6 环境,基于域名(geodata+自定义维护域名)分流,国内正常解析双栈域名,科学域名直接 fake ,用好久了,啥问题都没有
|
![]() |
4
SakuraYuki 2 小时 35 分钟前
openclash 以前折腾半天,最后发现不如换成 singbox 或者 surge ,简单省事
|
5
guoguobaba OP @SakuraYuki 看需求的,比如我用 singbox ,之前发过,内网的 ipv6 不能被访问,导致 pt 没流量。而且很多网站需要动态调整规则,手动选择机场,比如 openai 就不能用 hk 的机场,不能用 cf 的机场等等,缺省的方案访问馒头会被当成 box 。综合来看,这套方案能满足我这些需求。
|
![]() |
6
xpn282 1 小时 26 分钟前 via iPhone
搞那么复杂了。
我也是 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 代理即可解决 |
7
guoguobaba OP |
![]() |
8
xpn282 1 小时 4 分钟前 via iPhone
@guoguobaba #7 不懂这些,太高深的优化我也不懂。
我现在就是 OpenClash 里的 IPv6 全开。 1 ,能通过各种 IPv6 网址测试。 2 ,节点有 v4 节点和 v6 节点,fallback 策略混合使用的,出国没发现任何的问题,也就是说不会因为我的节点是 v4 还是 v6 而产生问题。 另:如果不想让国内流量走 clash 内核,就把“绕过国内”打开。我一般都不开这个,我有时需要看个别设备访问什么域名。 |
9
guoguobaba OP @xpn282 无他,就是速度问题。另外,免费的 cf 节点时常抽风,这也是我要考虑的问题。我现在大部分流量比如看油管啥的都是走免费的 cf ,少部分走按流量收费的机场。
|