显示标签为“mihomo”的博文。显示所有博文
显示标签为“mihomo”的博文。显示所有博文

星期六, 十一月 15, 2025

191 VLESS 偷域名证书的自动化 shell 检测脚本 | 使用 Mihomo 内核搭建 VLESS xtls-rprx-vision

首先上检测代码, 灵感来源于 Xray Reality 自建教程 - Vless + Reality 协议 + Vision 流控

#!/bin/bash
# check_tls_cdn.sh
# 彩色输出 TLS1.3 / ALPN:h2 / X25519 / OCSP 支持情况 + CDN 检测
# 用法: ./check_tls_cdn.sh https://example.com https://another.com
# 颜色定义
GREEN="\e[32m"
RED="\e[31m"
YELLOW="\e[33m"
RESET="\e[0m"
check_url() {
 local url="$1"
 local domain
 domain=$(echo "$url" | sed -E 's#^https?://([^/]+).*#\1#')
 echo -e "=============================="
 echo -e "检测目标: $domain"
 echo -e "------------------------------"
 # ================= TLS 检测 =================
 local output
 output=$(echo | openssl s_client -connect "${domain}:443" -servername "$domain" -alpn "h2,http/1.1" -status 2>&1)
 # TLS 1.3
 echo "$output" | grep -qE 'TLSv1\.3'
 local tls_supported=$?
 # ALPN h2
 echo "$output" | grep -qiE 'ALPN[^:]*:.*\bh2\b'
 local h2_supported=$?
 # X25519
 echo "$output" | grep -qiE '\bX25519\b|\bx25519\b|mlkem[0-9]*x25519'
 local key_supported=$?
 # OCSP
 echo "$output" | grep -qiE 'OCSP (Response|response).*successful|OCSP Response Status: successful'
 local ocsp_supported=$?
 # ===== TLS 输出结果(带颜色) =====
 echo -e "检测结果:"
 [[ $tls_supported -eq 0 ]] && echo -e "  ✓ TLSv1.3: ${GREEN}支持${RESET}" || echo -e "  ✗ TLSv1.3: ${RED}未检测到${RESET}"
 [[ $h2_supported -eq 0 ]] && echo -e "  ✓ ALPN:h2: ${GREEN}支持${RESET}" || echo -e "  ✗ ALPN:h2: ${RED}未检测到${RESET}"
 [[ $key_supported -eq 0 ]] && echo -e "  ✓ X25519/含x25519密钥: ${GREEN}支持${RESET}" || echo -e "  ✗ X25519/含x25519密钥: ${RED}未检测到${RESET}"
 [[ $ocsp_supported -eq 0 ]] && echo -e "  ✓ OCSP stapling: ${GREEN}成功${RESET}" || echo -e "  ✗ OCSP stapling: ${RED}未检测到${RESET}"
 if [[ $tls_supported -eq 0 && $h2_supported -eq 0 && $key_supported -eq 0 ]]; then
   echo -e "${GREEN}✅ $domain TLS 完全符合要求${RESET}"
 else
   echo -e "${RED}❌ $domain TLS 存在问题,请查看上方具体项${RESET}"
 fi
# ================= CDN 检测 =================
echo -e "------------------------------"
echo -e "🔍 CDN 检测中..."
cdn_flag=0  # 0 = 没有检测到 CDN, 1 = 检测到任意 CDN
cdn_list=() # 保存检测到的 CDN
# 1. Cloudflare trace
CF_TRACE=$(curl -s -m 5 "https://$domain/cdn-cgi/trace")
if [[ "$CF_TRACE" == *"fl="* && "$CF_TRACE" == *"ip="* ]]; then
   echo -e "  Cloudflare detected via /cdn-cgi/trace"
   cdn_flag=1
   cdn_list+=("Cloudflare")
fi
# 2. 获取响应头
HEADERS=$(curl -s -I -m 5 "https://$domain")
# 3. CloudFront
if echo "$HEADERS" | grep -qi "X-Amz-Cf-Id\|X-Cache:.*from cloudfront"; then
   echo -e "  Amazon CloudFront detected via HTTP headers"
   cdn_flag=1
   cdn_list+=("CloudFront")
fi
# 4. Fastly
if echo "$HEADERS" | grep -qi "X-Served-By\|X-Timer\|Via:.*varnish"; then
   echo -e "  Fastly detected via HTTP headers"
   cdn_flag=1
   cdn_list+=("Fastly")
fi
# ===== 彩色输出 CDN 总评 =====
if [[ $cdn_flag -eq 1 ]]; then
   echo -e "${RED}❌ $domain 使用了 CDN: ${cdn_list[*]}${RESET}"
else
   echo -e "${GREEN}✅ $domain 没有检测到 CDN${RESET}"
fi

 # ================= 输出原始信息 =================
 echo -e "------------------------------"
 echo -e "🔍 原始 openssl 输出(供调试):"
 echo "$output" | sed 's/^/  /'
 echo -e "------------------------------"
 echo -e "🔍 原始 HTTP 响应头(供调试):"
 echo "$HEADERS" | sed 's/^/  /'
 echo
}
# 主流程
if [[ $# -eq 0 ]]; then
 echo -e "用法: $0 https://example.com [https://another-site.com ...]"
 exit 1
fi
for url in "$@"; do
 check_url "$url"
done

* 代码大部分由 ChatGPT 生成. 

这三种写法都可以: 

/root/1.sh https://docs.aws.amazon.com/ example.com https://test.com

效果如下: 

 

注意: 根据灵感来源的博文介绍, ocsp stapling 是加分项, 不是必需项! 

==========

使用 Mihomo 内核搭建 VLESS xtls-rprx-vision 的配置代码

使用内核搭建是运行在 Ubuntu 的小鸡上的, 所以开机自启使用系统自带的 serviced 就行, 不细讲了, 把配置粘贴出来, 只粘贴关键配置. 

服务端: 

listeners:
  - name: 起个名字
    type: vless
    port: 443 # 端口随意, 我喜欢用 443, 支持使用ports格式, 例如200,302 or 200,204,401-429,501-503
    listen: 0.0.0.0
    users:
      - username: 1
        uuid: aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa #UUID
        flow: xtls-rprx-vision
    reality-config:
      dest: 偷的域名:443
      private-key: 私钥 #可由 mihomo generate reality-keypair 命令生成
      short-id:
        - aaaaaaaa
      server-names:
        - 偷的域名, 不要带冒号和端口号

客户端: 

  - name: vless 节点
    server: 节点 IP 或域名, 如果是 IPv6 不要带 [] 中括号
    port: 443 #上面 port 中的端口号
    ip-version: dual #双栈, 如果你的小鸡只有 IPv6 或者双栈但倾向 IPv4, 请看官方文档
    type: vless
    uuid: aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa #UUID
    udp: true
    skip-cert-verify: false
    tls: true
#    dialer-proxy: proxy #可选, 前置代理的意思, 家宽 - proxy - vless 节点 - 谷歌, 类似一个丐版 tor, 可以绕过机场审计, 不知道什么是 dialer-proxy 就把这行注释或删掉
    flow: xtls-rprx-vision
    client-fingerprint: firefox #其它选项请看官方文档, 不建议填写 chrome, 之前出过漏洞
    servername: 偷的域名, 不要带冒号和端口号
    reality-opts: 
      public-key: 私钥对应的公钥 #可由 mihomo generate reality-keypair 命令生成
      short-id: aaaaaaaa

网络上基本没见着有教程用 mihomo 搭建 VLESS xtls-rprx-vision 的, 我喜欢用 Mihomo 内核, 所以就把配置粘贴出来了, 测试正常, 网上基本都是一键脚本, 要不就是写 json, 看着头疼. 

你要自己去找一个域名, 不要用我示例的那三个, 然后用 shell 脚本去测试. 也不要去偷大厂域名, 实测会有断流情况, 一断就是好几分钟...

搭建好测试正常之后, 也要记得去检查一下浏览器是否能正常访问: 用浏览器 检测Reality伪装效果 是否搭建成功 排错Troubleshoot

星期日, 九月 07, 2025

188 IPv6 only 服务器上 Mihomo 入站 + 安装 WARP

环境与需求: 

IPv6 only 小鸡, 想上双栈 warp, 同时开放一个 socks5 端口, 用于 Mihomo 连入. warp 不要像 tun 那样来占用我的整个小鸡网络. 

流程: 

目标网站 - warp - socks5 - Mihomo - 机场 - 我的设备 

 

1, 运行脚本

wget -N https://gitlab.com/fscarmen/warp/-/raw/main/menu.sh && bash menu.sh

2, 选

3. 为 IPv6 only 添加 WARP 双栈网络接口
1. wireguard 内核 (默认)
2. 非全局
1. 使用免费账户 (默认)
3. 使用 VPS 初始设置 (默认)

3, 选 13 安装 wireproxy 和进行设置, 最后可能会出错, 会显示如下信息, 看起来像是安装完成, 但是 wget 解析域名的时候解析到了 IPv4 的地址, 所以返回了 Network is unreachable: 

 进度 1/3: 安装系统依赖……

--2025-09-07 09:11:58--  https://github.com/pufferffish/wireproxy/releases/download/v1.0.9/wireproxy_linux_amd64.tar.gz
Resolving github.com (github.com)... 20.205.243.166
Connecting to github.com (github.com)|20.205.243.166|:443... failed: Network is unreachable.
--2025-09-07 09:11:58--  https://gitlab.com/fscarmen/warp/-/raw/main/wireproxy/wireproxy_linux_amd64.tar.gz
Resolving gitlab.com (gitlab.com)... 172.65.251.78
Connecting to gitlab.com (gitlab.com)|172.65.251.78|:443... failed: Network is unreachable.
0% [Working]
gzip: stdin: unexpected end of file
tar: Child returned status 1
tar: Error is not recoverable: exiting now
0% [Waiting for headers]
 进度 2/3: 已处理好 WARP 配置文件

Hit:1 http://archive.ubuntu.com/ubuntu jammy InRelease
Get:2 http://archive.ubuntu.com/ubuntu jammy-updates InRelease [128 kB]
Hit:3 http://archive.ubuntu.com/ubuntu jammy-security InRelease
Fetched 128 kB in 8s (16.3 kB/s)
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
157 packages can be upgraded. Run 'apt list --upgradable' to see them.
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
openresolv is already the newest version (3.12.0-2).
iptables is already the newest version (1.8.7-1ubuntu5.2).
net-tools is already the newest version (1.60+git20181103.0eebece-1ubuntu5.4).
dnsutils is already the newest version (1:9.18.30-0ubuntu0.22.04.2).
0 upgraded, 0 newly installed, 0 to remove and 157 not upgraded.

 进度 3/3: 寻找 MTU 最优值已完成

 创建快捷 warp 指令成功
 WireProxy 还未安装

4, 直接去下载 wireproxy 的 amd64 包, 放入 /usr/bin/ 下, 给 0755 权限, 注意不是放在 /usr/local/bin/ 里面

https://github.com/whyvl/wireproxy/releases

5, 修改 /etc/wireguard/ 下的各项配置文件, 保证 dns 不为 IPv4. 不然 wireproxy 服务会报错:

journalctl -xeu wireproxy.service


-- Support: http://www.ubuntu.com/support
--
-- A start job for unit wireproxy.service has finished successfully.
--
-- The job identifier is 3900.
Sep 07 09:46:52 HK-LXC wireproxy[13136]: 2025/09/07 09:46:52 lookup engage.cloudflareclient.com on 8.8.8.8:53: dial udp 8.8.8.8:53: connect: network is unreachable
Sep 07 09:46:52 HK-LXC systemd[1]: wireproxy.service: Main process exited, code=exited, status=1/FAILURE
-- Subject: Unit process exited
-- Defined-By: systemd
-- Support: http://www.ubuntu.com/support
--
-- An ExecStart= process belonging to unit wireproxy.service has exited.

修改 warp.conf 底下的 DNS 和 Endpoint 为 IPv6, 改 Endpoint 是因为域名不知道去哪个弱智 IPv4 DNS 请求导致不能解析, 所以就直接写成固定的 IPv6 地址:

DNS = 2606:4700:4700::1001,2606:4700:4700::1111
Endpoint = [2606:4700:d0::a29f:c001]:2408

修改 proxy.conf 底下的 DNS 和 Endpoint 为 IPv6, 如上.

5, 再次执行 warp 命令, 选 2.连接 Wireproxy (warp y) 或者直接执行 warp y

如果还启不来, 看看是否有 wireproxy 的服务:

systemctl list-unit-files | grep wire

如果没有服务, 手动添加一个, 注意从 /lib/systemd/system/wireproxy.service 添加, 不知道为什么, 我记得脚本里就是添加到这了. 注意 MemoryLimit=256M 这个参数, 是我手动加的, 实际使用中发现有 wireproxy 内存泄漏的情况, 1GB 的内存半天就占满失联了, 如果你也有 wireproxy 内存泄漏, 建议将内存限制手动加到 service 文件中. 另外, RemainAfterExit=yes 这个参数也不要, 否则, wireproxy 意外退出了之后 systemd 无感知, 还以为它在运行: 

[Unit]
Description=WireProxy for WARP
After=network.target
Documentation=https://github.com/fscarmen/warp-sh
Documentation=https://github.com/pufferffish/wireproxy
[Service]
ExecStart=/usr/bin/wireproxy -c /etc/wireguard/proxy.conf
Restart=always
MemoryLimit=256M [Install] WantedBy=multi-user.target
systemctl daemon-reload

service 命令如果启动还有报错, 尝试手动运行

/usr/bin/wireproxy -c /etc/wireguard/proxy.conf

可能会看到

2025/09/07 09:59:06 lookup engage.cloudflareclient.com on 8.8.8.8:53: dial udp 8.8.8.8:53: connect: network is unreachable

这样的报错, warp 或者一键脚本擅自修改了 resolv.conf 也就是系统 DNS, 改回 IPv6 的即可, 如

nameserver 2606:4700:4700::1001
nameserver 2606:4700:4700::1111

另外可能有端口占用的问题, 从 netstat -lntpu 会看到哪个进程占用, 干掉端口占用的进程或者用脚本换新的 socks 端口. 


Mihomo 入站只需提一嘴, 会搓配置的人一看就懂

#config.yaml
log-level: silent
ipv6: true
tcp-concurrent: true
listeners:
  - name: myvmess
    type: vmess
    port: 80
    listen: 0.0.0.0
    users:
     - username: 1
       uuid: c441dae3-1176-4640-9c51-666e2f80d92c
       alterId: 0
       udp: true
       cipher: auto
proxies:
  - name: warp
    type: socks5
    server: 127.0.0.1
    port: 1080
    udp: true
dns:
  enable: true
  listen: 127.0.0.1:53
  ipv6: true
  nameserver:
    - https://[2606:4700:4700::1001]:443/dns-query#DIRECT
    - https://[2606:4700:4700::1111]:443/dns-query#DIRECT
  default-nameserver:
    - https://[2606:4700:4700::1001]:443/dns-query#DIRECT
rules:
  - MATCH,warp

注意 proxies 里面 udp 要开, 查看 udp 是否能通, 去 https://networktest.twilio.com/ 网站检测一下就行, 如果 udp: true 忘记写了的话, twilio 里面第一条  NTS: TURN UDP Connectivity 会显示 failed. 

nameserver 我用了 Cloudflare 的两个 doh 来查询, warp 只管和 ip 之间的流量, warp 用的是 udp 53 的传统 dns, 我完全不信任这种协议. 

星期一, 十二月 09, 2024

181 向日葵插座在 mihomo 内核控制的局域网下无法联网的问题 | override-destination 参数是否需要打开 | 关于 Encrypted Client Hello (ECH) 的一些实际使用经验和见解

最近折腾的东西有点多, 只讲和文章有关的吧, 编译了一个 OpenWrt 包给路由器刷上, 抛弃openclash 这个臃肿的插件, 使用 OpenWrt-mihomo, mihomo 插件需要 OpenWrt >= 23.05, Linux Kernel >= 5.10, firewall4, 我比较懒就直接重装系统了, 新系统是自带插件的. nftables (firewall4) 涉及系统核心防火墙, openclash 又是屎山, 所以升级失败是很正常的.

如标题所说, 向日葵插座和米家设备一样, 需要跳过域名嗅探的. 

根据我的测试, c1pro 型号和 c2 型号(多了个电量显示和电量统计的功能) 是不一样的, c1pro 需要多加一个域名. 

如果是 c1pro 插座, sniffer 这样写:

sniffer:
  enable: true
  force-dns-mapping: true
  parse-pure-ip: true
  override-destination: true
  skip-domain:
    - '+.oray.com'
    - '+.oray.net'

如果是 c2 的, 把 com 域名去掉, 这样写: 

sniffer:
  enable: true
  force-dns-mapping: true
  parse-pure-ip: true
  override-destination: true
  skip-domain:
    - '+.oray.net'
  sniff: #这里我比较激进, 嗅探了所有端口, 以防漏网之鱼
    HTTP:
      ports: [1-65535]
    TLS:
      ports: [1-65535]
    QUIC:
      ports: [1-65535]

为什么 c1pro 的会多一个? 因为在我实际测试中, 如果不加, 在配对的时候添加成功, 但设备重启后无法联网, 在 app 里面就会显示离线. 

另外, 我记得向日葵的插座在通信时连接的不止一个域名, 好像是不定期切换的, 所以我直接用了 +. 来匹配所有, 懒得一个个添加了, 不然三天两头离线. 


如果关闭 override-destination 其实也行, 但我为了防止漏网之鱼, 尤其是伪造域名 sni 请求(比如 cloudflare+浏览器doh 组合而成的 Encrypted Client Hello (ECH), 其实原理也是伪造一个 sni 是 cloudflare-ech.com 有没有子域名具体忘记了, 这样的话, 如果我开启 override, 我的 mihomo 内核就成了一个内网的"墙", 伪造域名的网就不通, 一定程度上拦截了伪造域名, 主要是防国内毒瘤), 所以就打开了. 

提到了 ECH, 那就再讲讲目前 ECH 的实际使用形式, 截至我发文的 2024年12月9号, 必须是浏览器打开 DNS over HTTPS ( DoH ), 然后才能在开启 ECH 功能的网站上使用, 墙看到的就是一个固定的域名(目前是这样的), cloudflare-ech.com, 那这个特征也非常明显, 不排除以后墙掉. 说是 Encrypted 我是质疑的, 这其实是伪造, 和 vless + xtls-rprx-vision 那种伪造是一样的. 只不过后者是个代理协议, 能指定伪装域名罢了. 我测试过, 不能以在路由器上使用 doh 的形式形成 ech, 哪怕是在使用的电脑上设置一个 AdguardHome 服务, 再让它去请求 doh 服务器也不行. 必须是浏览器本身. Google Chrome 或者 Mozilla Firefox 都可以, 中间不能有中介. 如果你的上网环境没有 Mihomo 的保护, 那这个 ech 算是一种保护的手段, 即使不要 ech 只用 doh 也是很好的保护, 但我在局域网内的设备是有去广告和阻止数据收集的需求的, 综上所述, 我选择 override-destination: true 以及不用 Encrypted Client Hello.

星期二, 八月 06, 2024

178 mihomo (clash meta) 内核在访问 gstatic.com 和 googleapis.com 非大陆域名 / IP 走 DIRECT 直连 的问题

一直使用 openclash + mihomo (原 clash meta) 内核运行在路由器上, 最近似乎规则有些问题, 谷歌的 cdn 总是直连. 过一会又发现它在走代理, 而且基本都是这几个域名: 

ssl.gstatic.com
www.gstatic.com
*.googleapis.com

最早怀疑是 IPv6 的问题, 因为我最近把它打开了, 后面发现不是. 

然后是怀疑 geoip 出了问题, 我用的是 https://raw.githubusercontent.com/Loyalsoldier/geoip/release/geoip-only-cn-private.dat 这个只有 cn 和 private 的 dat, 关键代码如下: 

geodata-mode: true
geox-url:
   geoip: "https://raw.githubusercontent.com/Loyalsoldier/geoip/release/geoip-only-cn-private.dat"
   geosite: ~
   mmdb: ~
   asn: ~

因为它是 dat, 内容不可见, 我就换成了纯文本的 ipcidr + rule-set 的形式, 这种规则的好处是, ip 段可见, 方便排查. 代码如下: 

rule-providers:
  CN4:
    type: http
    path: cn4.txt
    url: "https://raw.githubusercontent.com/gaoyifan/china-operator-ip/ip-lists/china.txt"
    interval: 604800
    proxy: Tunnels
    behavior: ipcidr
    format: text

  CN6:
    type: http
    path: cn6.txt
    url: "https://raw.githubusercontent.com/gaoyifan/china-operator-ip/ip-lists/china6.txt"
    interval: 604800
    proxy: Tunnels
    behavior: ipcidr
    format: text
rules:
  - IP-CIDR,255.255.255.255/32,REJECT
  - IP-CIDR6,ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128,REJECT
  - GEOIP,PRIVATE,DIRECT
  - RULE-SET,CN4,DIRECT
  - RULE-SET,CN6,DIRECT
  - MATCH,Tunnels

像上面这样的配置, 跑了几天, 依旧不行, 有时候使用谷歌正常, 也有时候浏览器在转, 一转我就知道这二币又去直连了:

然而我的 ipv4 段里面, 根本没有 172.217.31.10: 

172.81.192.0/18 = 172.81.192.0 - 172.81.255.255

那特码的就怪了, 没有规则你凭什么匹配成 DIRECT 直连? 排查过 openclash 的运行配置, 和我写的 rules 一样, 就那么几条, 没有加别的.

后来被折腾得烦了, 直接上 rule-set 看看吧, 于是就多加了一段,  代码如下: 

rule-providers:
  GOOGLE:
    type: http
    path: google.yaml
    url: "https://******/google.yaml"  #配置在下面, 自己简单写的, 本地加载的话上面改成 type:file 具体看配置手册
    interval: 604800
    proxy: Tunnels
    behavior: classical
    format: yaml
rules:
  - IP-CIDR,255.255.255.255/32,REJECT
  - IP-CIDR6,ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128,REJECT
  - GEOIP,PRIVATE,DIRECT
  - RULE-SET,GOOGLE,Tunnels
  - RULE-SET,CN4,DIRECT
  - RULE-SET,CN6,DIRECT
  - MATCH,Tunnels

写在了 cn4 和 cn6 (或者是 geoip,cn) 的上面, 观察了几天, 问题解决了, 那几个撒币域名解析的香港地址也不直连了... 注意, 不要加 no-resolve, 因为这些 IP 大部分是由域名解析过来的, 哪怕是拦截用的 255 和 fffff 也是一样. 

以下是谷歌配置 google.yaml: 

payload:
  - DOMAIN-SUFFIX,ytimg.com
  - DOMAIN-SUFFIX,amp.dev
  - DOMAIN-SUFFIX,android.com
  - DOMAIN-SUFFIX,api.ai
  - DOMAIN-SUFFIX,app-measurement.com
  - DOMAIN-SUFFIX,app-measurement.net
  - DOMAIN-SUFFIX,appspot.com
  - DOMAIN-SUFFIX,material.io
  - DOMAIN-SUFFIX,recaptcha.net
  - DOMAIN-SUFFIX,gstatic.com
  - DOMAIN-SUFFIX,google.com
  - DOMAIN-SUFFIX,googleapis.com
  - DOMAIN-SUFFIX,g.co
  - DOMAIN-SUFFIX,flutter.dev
  - DOMAIN-SUFFIX,flutterapp.com
  - DOMAIN-SUFFIX,firebaseapp.com
  - DOMAIN-SUFFIX,firebaseio.com
  - DOMAIN-SUFFIX,blogspot.com
  - DOMAIN-SUFFIX,youtube.com
  - DOMAIN-SUFFIX,youtu.be
  - DOMAIN-SUFFIX,g.co
  - DOMAIN-SUFFIX,withgoogle.com
  - DOMAIN-SUFFIX,googleusercontent.com
  - DOMAIN-SUFFIX,ggpht.com
  - DOMAIN-SUFFIX,googlevideo.com
  - DOMAIN-KEYWORD,gvt
  - DOMAIN-KEYWORD,ampproject
  - DOMAIN-REGEX,^gvt\d\.com
  - DOMAIN-REGEX,^.*\.goog

以上是我根据自己的使用习惯和需求写的, 参考了 https://github.com/blackmatrix7/ios_rule_script/blob/master/rule/Clash/Google/Google_No_Resolve.yaml 但没有完全使用, blackmatrix 作者的这个版本算是懒人配置, 里面还有 cn 域名. 我为了防止自己的服务器送中, 把所有谷歌大陆域名都屏蔽掉了, 还有一些广告域名也是. 规则这个东西, 千人千面, 根据自己的需求来我觉得最好不过了. 

对了, 上面的规则里有正则 DOMAIN-REGEX, ≤1.18.1 的版本是用不了的. 发布博文时, 使用的版本是 1.18.7

星期二, 十月 24, 2023

174 clash meta (mihomo) filter 正则表达式 必须出现某节点名, 且不区分大小写. 另外, 不得出现某节点名, 且不区分大小写

因为自己在使用 clash meta (mihomo) 的时候, 有一个需求, 就是必须筛选美国节点, 并排除带有 群组、订阅、通知 字样的节点. 

直接上正则: 

    filter: (?i)^(?!.*(?:群组|直连|官网|群组|通知|套餐|剩余|更新订阅|direct))(?=.*(?:美国|usa)).*$

正则加了i以不区分大小写. 写得像屎山但确实能用. 写在 proxy-groups 中使用, 举例: 

proxy-groups:

  - name: load_balance

    type: load-balance

    use:

      - 1

      #- 2

      - 3

      - 4

    url: https://www.gstatic.com/generate_204

    interval: 300

    filter: (?i)^(?!.*(?:群组|直连|官网|群组|通知|套餐|剩余|更新订阅|direct))(?=.*(?:美国|usa)).*$

    disable-udp: false

    lazy: true

    strategy: consistent-hashing  #round-robin|sticky-sessions


再举例: 

  - name: all_us

    type: url-test

    use:

      - 1

      #- 2

      - 3

      - 4

    url: https://www.gstatic.com/generate_204

    interval: 300

    filter: (?i)^(?!.*(?:群组|直连|官网|群组|通知|套餐|剩余|更新订阅|direct))(?=.*(?:美国|usa)).*$

    disable-udp: false

    tolerance: 0

    lazy: true


用 use + filter + 开lazy 的好处是, 不会对所有节点检测延迟, 减少一些服务器压力, 毕竟这个东西我设置的是每5分钟遍历一次的.