使用 Clash.Meta 替代 Clash :: 星野玲的博客 您所在的位置:网站首页 clash和clashx区别 使用 Clash.Meta 替代 Clash :: 星野玲的博客

使用 Clash.Meta 替代 Clash :: 星野玲的博客

2023-09-18 11:19| 来源: 网络整理| 查看: 265

小玲在《Debian 路由器上使用 Clash 作为透明代理》中使用的 Clash 的版本是 1.7.1。那为什么不用更高的版本呢?今天小玲就来解释为什么不用更高的版本以及介绍一个更好的 Clash 分支。

因为 Clash 从 1.8.0 开始删除了 redir-host 的远程解析功能。1 2 没有了 redir-host 的远程解析功能之后,如果还想正常访问原本无法访问的网站,就必须确保 DNS 返回无污染的 IP。小玲也用了一段时间 1.8.0 以上的版本,但还是有一些小问题,让小玲不得不退回 1.7.1 版本。

没有 redir-host 的远程解析功能时遇到的问题 #

首先,先说说没有 redir-host 的远程解析功能时遇到的问题,贴一段 Clash 的 DNS 的配置。

dns: enable: true listen: :53 ipv6: false enhanced-mode: redir-host default-nameserver: - 8.8.8.8 nameserver: - udp://[2001:4860:4860::8888]:53 - udp://[2001:4860:4860::8844]:53 fallback: - https://dns.rubyfish.cn/dns-query - https://101.101.101.101/dns-query fallback-filter: geoip: true geoip-code: CN ipcidr: - 240.0.0.0/4

一般情况下,咱们使用 Clash 时,都是在 dns.nameserver 里写解析国内网站的 DNS 服务器,在 dns.fallback 里写解析国外网站的 DNS 服务器。那 Clash 是怎么知道你要访问的网站是国内的还是国外的呢?答案是 Clash 通过一个存放了 IP 地址数据的 Country.mmdb 文件和 dns.fallback-filter 里的配置来决定你要访问的域名的 IP 地址是通过 dns.nameserver 里的 DNS 服务器解析出来的还是通过 dns.fallback 里的 DNS 服务器解析出来的。

举个例子,现在 Country.mmdb 里存放了所有中国的 IP 地址,并且 dns.fallback-filter.geoip 的值为 true,dns.fallback-filter.geoip-code 的值为 CN,当访问 baidu.com 时,通过 dns.nameserver 里的 DNS 服务器解析出来的 IP 地址为 110.242.68.66,通过 dns.fallback 里的 DNS 服务器解析出来的 IP 地址为 110.242.68.66。这个地址命中了 Country.mmdb 里的中国的 IP 地址。所以 Clash 就采用 dns.nameserver 里的 DNS 服务器解析出来的 IP 地址而不是 dns.fallback 里的 DNS 服务器解析出来的 IP 地址。

当访问 www.google.com 时,通过 dns.nameserver 里的 DNS 服务器解析出来的 IP 地址为 199.16.156.75,通过 dns.fallback 里的 DNS 服务器解析出来的 IP 地址为 172.217.160.68。由于 199.16.156.75 这个地址不命中 Country.mmdb 里的中国的 IP 地址。所以 Clash 就采用 dns.fallback 里的 DNS 服务器解析出来的 IP 地址 172.217.160.68。

当你只使用 IPv4 时,没有 redir-host 的远程解析功能且 dns.fallback 里的 DNS 服务器是无污染的时候也能打开绝大部分原本无法访问的网站。但是当你使用 IPv6 时就不行了。原因小玲也说不上来。小玲猜测是 Country.mmdb 文件里没有全部的中国的 IPv6 地址。于是小玲换过好多次一些人提供的 Country.mmdb 文件,均没有解决问题。小玲只好放弃使用 1.8.0 以上版本的 Clash。

使用 Clash.Meta #

有一天,小玲发现 Clash 还有一个分支 Clash.Meta,不仅有 redir-host 的远程解析功能,还有 Clash 的 1.8.0 版本后新增的功能。小玲果断把 Clash 换成了 Clash.Meta。由于 Clash 从 1.8.0 版本开始支持 fwmark,所以做透明代理就不再需要添加用户了。在这里小玲只写与《Debian 路由器上使用 Clash 作为透明代理》的差异,具体安装方法还是请看《Debian 路由器上使用 Clash 作为透明代理》

在 Clash 的配置文件 config.yaml 里加上下面的内容。

# 这里填写通往外网的接口名称。 interface-name: ppp0 # 这里将 Clash 发出的流量都打上值为 "1" 的 mark。 routing-mark: 1 # 这里加上 Clash.Meta 独有的嗅探器的配置。 sniffer: enable: true sniffing: - tls - http # 这里设置不嗅探米家的域名,防止米家智能家居无法连接。 skip-domain: - Mijia Cloud

docker-compose.yml 文件。

version: "3" services: clash: cap_add: - NET_ADMIN container_name: clash image: metacubex/clash-meta network_mode: host restart: always volumes: - ./config/clash:/root/.config/clash

/etc/nftables.conf 文件。

table inet clash delete table inet clash table inet clash { set ipv4_addr { type ipv4_addr flags interval elements = { 10.0.0.0/8, 127.0.0.0/8, 169.254.0.0/16, 172.16.0.0/12, 192.168.0.0/16, 240.0.0.0/4 } } set ipv6_addr { type ipv6_addr flags interval elements = { ::ffff:0.0.0.0/96, 64:ff9b::/96, 100::/64, 2001::/32, 2001:10::/28, 2001:20::/28, 2001:db8::/32, 2002::/16, fc00::/7, fe80::/10 } } chain clash-tproxy { fib daddr type { unspec, local, anycast, multicast } return ip daddr @ipv4_addr return ip6 daddr @ipv6_addr return udp dport { 123 } return meta l4proto { tcp, udp } meta mark set 1 tproxy to :7893 accept } chain clash-mark { fib daddr type { unspec, local, anycast, multicast } return ip daddr @ipv4_addr return ip6 daddr @ipv6_addr return udp dport { 123 } return meta mark set 1 } chain mangle-output { type route hook output priority mangle; policy accept; # 下面这行与原来的有差异。 meta l4proto { tcp, udp } mark != 1 ct direction original jump clash-mark } chain mangle-prerouting { type filter hook prerouting priority mangle; policy accept; iifname { lo, enp1s0 } meta l4proto { tcp, udp } ct direction original jump clash-tproxy } }

Clash.Meta 比 Clash 增加的功能远不止如此,你还可以查看它的 文档。欢迎和小玲一起加入使用 Clash.Meta 的队伍。

来源:Release v1.8.0 · Dreamacro/clash ↩︎

参考:Reidr Host恢复域名传递 ↩︎



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有