MetaCubeX / mihomo

A simple Python Pydantic model for Honkai: Star Rail parsed data from the Mihomo API.
https://wiki.metacubex.one
MIT License
15.56k stars 2.56k forks source link

[Bug] proxy-providers下配置了health-check: enable: true的节点,会在刷新配置时立即url-test。proxy-groups下proxies里面的节点,则不会立即测试,而是根据interval的设置才测试 #563

Open GeorgeRudd opened 1 year ago

GeorgeRudd commented 1 year ago

Verify steps

Clash version

alpha-1a9104c

What OS are you seeing the problem on?

Windows

Clash config

external-controller: 127.0.0.1:9090   #控制器监听地址
external-ui: yacd-meta                   #http服务路径,可以放静态web网页,如yacd的控制面板,可通过`http://{{external-controller}}/ui`直接使用,添加完后需要右键退出再重启才能生效
secret: "" #控制器登录密码

tun:
  enable: true
  stack: system
  dns-hijack:
    - 'any:53'
    - 'tcp://any:53'
  auto-route: true
  auto-detect-interface: true
  strict-route: true

proxy-groups:

  - name: 节点选择
    type: select
    proxies:  
      - 自动选择
      - jp-test
      - sg-test

  - name: 自动选择
    type: url-test
    proxies:  
      - jp-test
      - sg-test
    interval: 3600
    lazy: false
    url: https://www.google.com/generate_204

  - name: "机场"
    type: url-test
    filter: "香港"
    proxies:  
      - REJECT
    use:
      - 机场.yaml

  - name: proxy-provider-converter
    type: url-test
    proxies:
      - sg-test
      - jp-test
    interval: 3600
    lazy: false
    url: https://www.google.com/generate_204

proxies: 

  - name: sg-test
    type: vmess
    server: 
    port: 
    uuid: 
    alterId: 0
    cipher: auto
    network: grpc
    tls: true
    udp: true
    xudp: true
    tfo: true
    ip-version: ipv4
    skip-cert-verify: false
    client-fingerprint: chrome
    servername: 
    grpc-opts:
      grpc-service-name: ""

  - name: jp-test
    type: vmess
    server: 
    port: 
    uuid: 
    alterId: 0
    cipher: auto
    network: grpc
    tls: true
    udp: true
    xudp: true
    tfo: true
    ip-version: ipv4
    skip-cert-verify: false
    client-fingerprint: chrome
    servername: 
    grpc-opts:
      grpc-service-name: ""

port: 7890 # HTTP(S) 代理服务器端口
socks-port: 7891 # SOCKS5 代理端口
mixed-port: 10801 # HTTP(S) 和 SOCKS 代理混合端口
inbound-tfo: true
mode: rule
ipv6: true
log-level: debug
find-process-mode: always
allow-lan: false
geodata-mode: true
tcp-concurrent: true

geox-url:
  geoip: "https://cdn.jsdelivr.net/gh/Loyalsoldier/v2ray-rules-dat@release/geoip.dat"
  geosite: "https://cdn.jsdelivr.net/gh/Loyalsoldier/v2ray-rules-dat@release/geosite.dat"
  mmdb: "https://cdn.jsdelivr.net/gh/Loyalsoldier/geoip@release/Country.mmdb"

rules:

  - AND,((NETWORK,UDP),(DST-PORT,443)),REJECT
  - GEOSITE,category-ads-all,REJECT
  #- GEOSITE,win-update,REJECT
  - DOMAIN-KEYWORD,services.googleapis.cn,节点选择
  - GEOSITE,tld-cn,DIRECT
  - GEOSITE,private,DIRECT 
  - DOMAIN-KEYWORD,proxy-provider-converter,proxy-provider-converter
  - GEOSITE,geolocation-!cn,节点选择
  - GEOSITE,cn,DIRECT
  - GEOIP,cn,DIRECT
  - GEOIP,private,DIRECT
  # - GEOIP,telegram,telegram
  - MATCH,节点选择
  - MATCH,REJECT

proxy-providers:

  机场.yaml:
    type: http
    url: "https://proxy-provider-converter.vercel.app"
    interval: 43200
    path: 机场.yaml
    health-check:
      enable: true
      interval: 3600
      lazy: false
      url: https://www.google.com/generate_204

profile:
  # 存储 select 选择记录
  store-selected: true

  # 持久化 fake-ip
  store-fake-ip: true

dns:
  enable: true
  enhanced-mode: fake-ip
  fake-ip-filter:
    #https://github.com/vernesong/OpenClash/blob/master/luci-app-openclash/root/etc/openclash/custom/openclash_custom_fake_filter.list
  use-hosts: true
  nameserver-policy:
    'services.googleapis.cn': 
        - '1.1.1.1#节点选择'
    'geosite:tld-cn': 
         - 223.5.5.5
    'geosite:private': 
         - 223.5.5.5     
    'geosite:geolocation-!cn': 
        - '8.8.8.8#节点选择'
    'geosite:cn': 
         - 223.5.5.5
  nameserver:
    - '8.8.8.8#节点选择'
  proxy-server-nameserver:
     - 223.5.5.5

hosts: 
#支持通配符(非通配符域名优先级高于通配符域名)
  'ipv6.msftconnecttest.com': 'www.msftconnecttest.com'
  'ipv6.msftncsi.com': 'www.msftncsi.com'

Clash log

23-05-15 20:51:35[ info ][TCP] 127.0.0.1:52120(chrome.exe) --> ipinfo.io:443 match GeoSite(geolocation-!cn) using 节点选择[jp-test]
23-05-15 20:51:35[ debug ][Rule] use default rules
23-05-15 20:51:35[ info ][TCP] 127.0.0.1:52119(chrome.exe) --> ipinfo.io:443 match GeoSite(geolocation-!cn) using 节点选择[jp-test]
23-05-15 20:51:35[ debug ][Rule] use default rules
23-05-15 20:51:33[ info ][TCP] 127.0.0.1:52118(chrome.exe) --> ipinfo.io:443 match GeoSite(geolocation-!cn) using 节点选择[jp-test]
23-05-15 20:51:33[ debug ][Rule] use default rules
23-05-15 20:51:33[ info ][TCP] 127.0.0.1:52117(chrome.exe) --> safebrowsing.google.com:443 match GeoSite(geolocation-!cn) using 节点选择[jp-test]
23-05-15 20:51:33[ debug ][Rule] use default rules
23-05-15 20:51:33[ info ][TCP] 127.0.0.1:52116(chrome.exe) --> ipinfo.io:443 match GeoSite(geolocation-!cn) using 节点选择[jp-test]
23-05-15 20:51:33[ debug ][Rule] use default rules
23-05-15 20:51:33[ info ][TCP] 127.0.0.1:52115(chrome.exe) --> safebrowsing.google.com:443 match GeoSite(geolocation-!cn) using 节点选择[jp-test]
23-05-15 20:51:33[ debug ][Rule] use default rules
23-05-15 20:51:27[ info ][TCP] 198.18.0.1:51807(svchost.exe) --> www.msftconnecttest.com:80 match GeoSite(private) using DIRECT
23-05-15 20:51:27[ info ][TCP] 198.18.0.1:51806(svchost.exe) --> www.msftconnecttest.com:80 match GeoSite(private) using DIRECT
23-05-15 20:51:27[ debug ][DNS] www.msftconnecttest.com --> [], from udp://223.5.5.5:53
23-05-15 20:51:27[ debug ][DNS] resolve www.msftconnecttest.com from udp://223.5.5.5:53
23-05-15 20:51:27[ debug ][Rule] use default rules
23-05-15 20:51:27[ debug ][Rule] use default rules
23-05-15 20:51:27[ debug ][DNS] www.msftconnecttest.com --> [184.26.43.82 184.26.43.73], from udp://223.5.5.5:53
23-05-15 20:51:27[ debug ][DNS] resolve www.msftconnecttest.com from udp://223.5.5.5:53
23-05-15 20:51:27[ info ][TCP] 127.0.0.1:51805(WINWORD.EXE) --> d.docs.live.net:443 match GeoSite(geolocation-!cn) using 节点选择[jp-test]
23-05-15 20:51:27[ debug ][Rule] use default rules
23-05-15 20:51:26[ info ][TCP] 127.0.0.1:51803(WINWORD.EXE) --> collabrtc.officeapps.live.com:443 match GeoSite(geolocation-!cn) using 节点选择[jp-test]
23-05-15 20:51:26[ debug ]use specified fingerprint:Chrome
23-05-15 20:51:26[ debug ][Rule] use default rules
23-05-15 20:51:11[ info ][TCP] clash.meta --> proxy-provider-converter.vercel.app:443 match DomainKeyword(proxy-provider-converter) using proxy-provider-converter[sg-test]
23-05-15 20:51:11[ debug ][Process] find process proxy-provider-converter.vercel.app: process not found
23-05-15 20:51:11[ debug ][Process] find process proxy-provider-converter.vercel.app: process not found
23-05-15 20:51:11[ debug ][Process] find process proxy-provider-converter.vercel.app: process not found
23-05-15 20:51:11[ debug ][Process] find process proxy-provider-converter.vercel.app: process not found
23-05-15 20:51:11[ debug ][Process] find process proxy-provider-converter.vercel.app: process not found
23-05-15 20:51:11[ debug ][Process] find process proxy-provider-converter.vercel.app: process not found
23-05-15 20:51:11[ debug ][Rule] use default rules
23-05-15 20:51:10[ debug ]Finish A Health Checking  
23-05-15 20:51:10[ debug ]Health Checked [1倍] 加拿大01 : true 1512 ms  
23-05-15 20:51:10[ debug ]Health Checked [1倍] 新加坡02 : true 499 ms  
23-05-15 20:51:10[ debug ]Health Checked [1倍] 德国01 : true 923 ms  
23-05-15 20:51:10[ debug ]Health Checked [1倍] 新加坡01 : true 335 ms  
23-05-15 20:51:10[ debug ]Health Checked [1倍] 阿根廷01 : true 1189 ms  
23-05-15 20:51:10[ debug ]Health Checked [1倍] 美国01 : true 1179 ms  
23-05-15 20:51:10[ debug ]Health Checked [1倍] 土耳其01 : true 1104 ms  
23-05-15 20:51:10[ debug ]Health Checked [1倍] 英国01 : true 828 ms  
23-05-15 20:51:09[ debug ]Health Checked [1倍] 日本02 : true 434 ms  
23-05-15 20:51:09[ debug ]Health Checked [1倍] 日本01 : true 332 ms  
23-05-15 20:51:09[ info ][TCP] clash.meta --> proxy-provider-converter.vercel.app:443 match DomainKeyword(proxy-provider-converter) using proxy-provider-converter[sg-test]
23-05-15 20:51:09[ info ][TCP] clash.meta --> proxy-provider-converter.vercel.app:443 match DomainKeyword(proxy-provider-converter) using proxy-provider-converter[sg-test]
23-05-15 20:51:09[ debug ]Health Checking [1倍] 新加坡02  
23-05-15 20:51:09[ debug ]Health Checked [1倍] 美国02 : true 932 ms  
23-05-15 20:51:09[ debug ]Health Checking [1倍] 新加坡01  
23-05-15 20:51:09[ debug ]Health Checked [1倍] 台湾02 : true 349 ms  
23-05-15 20:51:09[ debug ]Health Checking [1倍] 日本01  
23-05-15 20:51:09[ debug ]Health Checked [1倍] 印度01 : true 643 ms  
23-05-15 20:51:09[ debug ][DNS]   --> [], from udp://223.5.5.5:53
23-05-15 20:51:09[ debug ][DNS] resolve   from udp://223.5.5.5:53
23-05-15 20:51:09[ debug ]Health Checking [1倍] 台湾02  
23-05-15 20:51:09[ debug ]Health Checked [1倍] 香港01 : true 550 ms  
23-05-15 20:51:09[ debug ]Health Checking [1倍] 日本02  
23-05-15 20:51:09[ debug ]Health Checked [1倍] 泰国01 : true 545 ms  
23-05-15 20:51:09[ debug ]Health Checking [1倍] 德国01  
23-05-15 20:51:09[ debug ]Health Checked [1倍] 越南01 : true 457 ms  
23-05-15 20:51:09[ debug ]Health Checking [1倍] 英国01  
23-05-15 20:51:09[ debug ]Health Checked [1倍] 香港02 : true 253 ms  
23-05-15 20:51:09[ debug ]Health Checking [1倍] 加拿大01  
23-05-15 20:51:09[ debug ]Health Checked [1倍] 台湾01 : true 219 ms  
23-05-15 20:51:08[ debug ][DNS]   --> [], from udp://223.5.5.5:53
23-05-15 20:51:08[ debug ][DNS]   --> [], from udp://223.5.5.5:53
23-05-15 20:51:08[ debug ][DNS]--> [], from udp://223.5.5.5:53
23-05-15 20:51:08[ debug ][DNS]   --> [], from udp://223.5.5.5:53
23-05-15 20:51:08[ debug ][DNS]   --> [], from udp://223.5.5.5:53
23-05-15 20:51:08[ debug ][DNS]  --> [], from udp://223.5.5.5:53
23-05-15 20:51:08[ debug ]use specified fingerprint:Chrome
23-05-15 20:51:08[ debug ][Process] find process proxy-provider-converter.vercel.app: process not found
23-05-15 20:51:08[ debug ][Process] find process proxy-provider-converter.vercel.app: process not found
23-05-15 20:51:08[ debug ][Process] find process proxy-provider-converter.vercel.app: process not found
23-05-15 20:51:08[ debug ][Process] find process proxy-provider-converter.vercel.app: process not found
23-05-15 20:51:08[ debug ][Process] find process proxy-provider-converter.vercel.app: process not found
23-05-15 20:51:08[ debug ][Process] find process proxy-provider-converter.vercel.app: process not found
23-05-15 20:51:08[ debug ][Process] find process proxy-provider-converter.vercel.app: process not found
23-05-15 20:51:08[ debug ][Process] find process proxy-provider-converter.vercel.app: process not found
23-05-15 20:51:08[ debug ][Process] find process proxy-provider-converter.vercel.app: process not found
23-05-15 20:51:08[ debug ][Process] find process proxy-provider-converter.vercel.app: process not found
23-05-15 20:51:08[ debug ][Process] find process proxy-provider-converter.vercel.app: process not found
23-05-15 20:51:08[ debug ][Process] find process proxy-provider-converter.vercel.app: process not found
23-05-15 20:51:08[ debug ][DNS] resolve  from udp://223.5.5.5:53
23-05-15 20:51:08[ debug ][DNS] resolve from udp://223.5.5.5:53
23-05-15 20:51:08[ debug ][Rule] use default rules
23-05-15 20:51:08[ debug ][Rule] use default rules
23-05-15 20:51:08[ debug ][DNS] resolve   from udp://223.5.5.5:53
23-05-15 20:51:08[ debug ][DNS] resolve   from udp://223.5.5.5:53
23-05-15 20:51:08[ debug ][DNS] resolve   from udp://223.5.5.5:53
23-05-15 20:51:08[ debug ][DNS] resolve   from udp://223.5.5.5:53
23-05-15 20:51:08[ debug ]Health Checking [1倍] 台湾01  
23-05-15 20:51:08[ debug ]Health Checking [1倍] 印度01  
23-05-15 20:51:08[ debug ]Health Checking [1倍] 美国02  
23-05-15 20:51:08[ debug ]Health Checking [1倍] 土耳其01  
23-05-15 20:51:08[ debug ]Health Checking [1倍] 香港02  
23-05-15 20:51:08[ debug ]Health Checking [1倍] 泰国01  
23-05-15 20:51:08[ debug ]Health Checking [1倍] 越南01  
23-05-15 20:51:08[ debug ]Health Checking [1倍] 美国01  
23-05-15 20:51:08[ debug ]Health Checking [1倍] 阿根廷01  
23-05-15 20:51:08[ debug ]Health Checking [1倍] 香港01  
23-05-15 20:51:08[ debug ]Start New Health Checking  
23-05-15 20:51:08[ info ]Start initial compatible provider proxy-provider-converter
23-05-15 20:51:08[ info ]Start initial compatible provider 节点选择
23-05-15 20:51:08[ info ]Start initial compatible provider 自动选择
23-05-15 20:51:08[ info ]Start initial provider 机场.yaml
23-05-15 20:51:08[ info ]Start initial compatible provider 机场
23-05-15 20:51:08[ info ]Start initial compatible provider default
23-05-15 20:51:08[ warn ][TUN] default interface changed by monitor, => WLAN
23-05-15 20:51:08[ debug ]adding geosite policy: cn inversed false
23-05-15 20:51:08[ debug ]adding geosite policy: geolocation-!cn inversed false
23-05-15 20:51:08[ debug ]adding geosite policy: private inversed false
23-05-15 20:51:08[ debug ]adding geosite policy: tld-cn inversed false
23-05-15 20:51:08[ info ]Use tcp concurrent
23-05-15 20:51:08[ info ]Sniffer is closed
23-05-15 20:51:08[ info ]Initial configuration complete, total time: 361ms
23-05-15 20:51:08[ info ]Start initial GeoIP rule private => DIRECT, records: 17
23-05-15 20:51:08[ info ]Start initial GeoIP rule cn => DIRECT, records: 10851
23-05-15 20:51:08[ info ]Start initial GeoSite rule cn => DIRECT, records: 65653
23-05-15 20:51:08[ info ]Start initial GeoSite rule geolocation-!cn => 节点选择, records: 35580
23-05-15 20:51:08[ info ]Start initial GeoSite rule private => DIRECT, records: 127
23-05-15 20:51:08[ info ]Start initial GeoSite rule tld-cn => DIRECT, records: 15
23-05-15 20:51:08[ info ]Start initial GeoSite rule category-ads-all => REJECT, records: 59273
23-05-15 20:51:08[ info ]Geodata Loader mode: memconservative
23-05-15 20:51:08[ info ]Start initial configuration in progress

Description

类似问题 https://github.com/MetaCubeX/Clash.Meta/issues/521

使用的是clash verge,每次应用配置时,只有proxy-providers下的机场节点会立即进行url-test。而proxy-groups中的节点则不会立即进行测试。上面的配置中,jp-test是一个完全不可用的节点,但是由于排在第一个,不会自动切换,要等interval,或者必须手动点击测试,才能自动切换到可用的节点

marujun commented 1 year ago

遇到了同样的问题

Meroser commented 11 months ago

clash verge,同样碰到这个问题。原版正常的。希望能够修改相关逻辑

Skyxim commented 11 months ago

meta 触发第一次测试是在 Provider 更新或者加载完成,导致了纯内置节点的策略组测试失效