text:
[Bug] 升级到新版本0.46.033后OpenClash不能访问Youtube等

Verify Steps

[X] Tracker 我已经在 Issue Tracker 中找过我要提出的问题
[X] Branch 我知道 OpenClash 的 Dev 分支切换开关位于插件设置-版本更新中，或者我会手动下载并安装 Dev 分支的 OpenClash
[X] Latest 我已经使用最新 Dev 版本测试过，问题依旧存在
[X] Relevant 我知道 OpenClash 与 内核(Core)、控制面板(Dashboard)、在线订阅转换(Subconverter)等项目之间无直接关系，仅相互调用
[X] Definite 这确实是 OpenClash 出现的问题
[ ] Contributors 我有能力协助 OpenClash 开发并解决此问题
[ ] Meaningless 我提交的是无意义的催促更新或修复请求

OpenClash Version
v0.46.033beta
Bug on Environment
Official OpenWrt
OpenWrt Version
23.05.4 r24012-d8dd03c46f
Bug on Platform
Linux-amd64(x86-64)
Describe the Bug
OpenClash里面dashboard管理界面测试，可以看到很多机场节点是正常的：

OpenClash主页网站访问检查却是不通

但是Mac上装的Clash Verge可以正常访问油管和谷歌等，查看日志感觉是DNS解析有问题。
To Reproduce
升级新版本后，经常是不是不能访问Youtube和其他外网，反复修改各种配置也无效，现在导出日志供参考
OpenClash Log
OpenClash 调试日志

生成时间: 2024-10-06 10:47:01
插件版本: v0.46.033-beta
隐私提示: 上传此日志前请注意检查、屏蔽公网IP、节点、密码等相关敏感信息

#===================== 系统信息 =====================#

主机型号: PAIQ EC3-BT19D4L
固件版本: OpenWrt 23.05.4 r24012-d8dd03c46f
LuCI版本: git-23.051.66410-a505bb1
内核版本: 5.15.162
处理器架构: x86_64

#此项有值时,如不使用IPv6,建议到网络-接口-lan的设置中禁用IPV6的DHCP
IPV6-DHCP:

DNS劫持: Dnsmasq 转发
#DNS劫持为Dnsmasq时，此项结果应仅有配置文件的DNS监听地址
Dnsmasq转发设置: 127.0.0.1#7874

#===================== 依赖检查 =====================#

dnsmasq-full: 已安装
coreutils: 已安装
coreutils-nohup: 已安装
bash: 已安装
curl: 已安装
ca-certificates: 已安装
ipset: 已安装
ip-full: 已安装
libcap: 已安装
libcap-bin: 已安装
ruby: 已安装
ruby-yaml: 已安装
ruby-psych: 已安装
ruby-pstore: 已安装
kmod-tun(TUN模式): 已安装
luci-compat(Luci >= 19.07): 已安装
kmod-inet-diag(PROCESS-NAME): 已安装
unzip: 已安装
kmod-nft-tproxy: 已安装

#===================== 内核检查 =====================#

运行状态: 运行中
运行内核：Meta
进程pid: 27364
运行权限: 27364: cap_dac_override,cap_net_bind_service,cap_net_admin,cap_net_raw,cap_sys_ptrace,cap_sys_admin,cap_sys_resource=eip
运行用户: nobody
已选择的架构: linux-amd64

#下方无法显示内核版本号时请确认您的内核版本是否正确或者有无权限

Meta内核版本: alpha-g59a2b24
Meta内核文件: 存在
Meta内核运行权限: 正常

#===================== 插件设置 =====================#

当前配置文件: /etc/openclash/config/qiyi.yaml
启动配置文件: /etc/openclash/qiyi.yaml
运行模式: redir-host
默认代理模式: rule
UDP流量转发(tproxy): 启用
自定义DNS: 停用
IPV6代理: 停用
IPV6-DNS解析: 停用
禁用Dnsmasq缓存: 启用
自定义规则: 启用
仅允许内网: 停用
仅代理命中规则流量: 停用
仅允许常用端口流量: 停用
绕过中国大陆IP: 停用
路由本机代理: 停用

#启动异常时建议关闭此项后重试
混合节点: 停用
保留配置: 停用

#启动异常时建议关闭此项后重试
第三方规则: 停用

#===================== 自定义规则 一 =====================#
script:
##  shortcuts:
##    Notice: The core timezone is UTC
##    CST 20:00-24:00 = time.now().hour > 12 and time.now().hour < 16
##    内核时区为UTC,故以下time.now()函数的取值需要根据本地时区进行转换
##    北京时间(CST) 20:00-24:00 = time.now().hour > 12 and time.now().hour < 16
##    quic: network == 'udp' and dst_port == 443 and (geoip(resolve_ip(host)) != 'CN' or geoip(dst_ip) != 'CN')
##    time-limit: in_cidr(src_ip,'192.168.1.2/32') and time.now().hour < 20 or time.now().hour > 21
##    time-limit: src_ip == '192.168.1.2' and time.now().hour < 20 or time.now().hour > 21

##  code: |
##    def main(ctx, metadata):
##        directkeywordlist = ["baidu"]
##        for directkeyword in directkeywordlist:
##          if directkeyword in metadata["host"]:
##            ctx.log('[Script] matched keyword %s use direct' % directkeyword)
##            return "DIRECT"

rules:
##- SCRIPT,quic,REJECT #shortcuts rule
##- SCRIPT,time-limit,REJECT #shortcuts rule

##- PROCESS-NAME,curl,DIRECT #匹配路由自身进程(curl直连)
##- DOMAIN-SUFFIX,google.com,Proxy #匹配域名后缀(交由Proxy代理服务器组)
##- DOMAIN-KEYWORD,google,Proxy #匹配域名关键字(交由Proxy代理服务器组)
##- DOMAIN,google.com,Proxy #匹配域名(交由Proxy代理服务器组)
##- DOMAIN-SUFFIX,ad.com,REJECT #匹配域名后缀(拒绝)
##- IP-CIDR,127.0.0.0/8,DIRECT #匹配数据目标IP(直连)
##- SRC-IP-CIDR,192.168.1.201/32,DIRECT #匹配数据发起IP(直连)
##- DST-PORT,80,DIRECT #匹配数据目标端口(直连)
##- SRC-PORT,7777,DIRECT #匹配数据源端口(直连)

##排序在上的规则优先生效,如添加（去除规则前的#号）：
##IP段：192.168.1.2-192.168.1.200 直连
##- SRC-IP-CIDR,192.168.1.2/31,DIRECT
##- SRC-IP-CIDR,192.168.1.4/30,DIRECT
##- SRC-IP-CIDR,192.168.1.8/29,DIRECT
##- SRC-IP-CIDR,192.168.1.16/28,DIRECT
##- SRC-IP-CIDR,192.168.1.32/27,DIRECT
##- SRC-IP-CIDR,192.168.1.64/26,DIRECT
##- SRC-IP-CIDR,192.168.1.128/26,DIRECT
##- SRC-IP-CIDR,192.168.1.192/29,DIRECT
##- SRC-IP-CIDR,192.168.1.200/32,DIRECT

##IP段：192.168.1.202-192.168.1.255 直连
##- SRC-IP-CIDR,192.168.1.202/31,DIRECT
##- SRC-IP-CIDR,192.168.1.204/30,DIRECT
##- SRC-IP-CIDR,192.168.1.208/28,DIRECT
##- SRC-IP-CIDR,192.168.1.224/27,DIRECT

##此时IP为192.168.1.1和192.168.1.201的客户端流量走代理（策略），其余客户端不走代理
##因为Fake-IP模式下，IP地址为192.168.1.1的路由器自身流量可走代理（策略），所以需要排除

##仅设置路由器自身直连：
##- SRC-IP-CIDR,192.168.1.1/32,DIRECT
##- SRC-IP-CIDR,198.18.0.1/32,DIRECT

##DDNS
##- DOMAIN-SUFFIX,checkip.dyndns.org,DIRECT
##- DOMAIN-SUFFIX,checkipv6.dyndns.org,DIRECT
##- DOMAIN-SUFFIX,checkip.synology.com,DIRECT
##- DOMAIN-SUFFIX,ifconfig.co,DIRECT
##- DOMAIN-SUFFIX,api.myip.com,DIRECT
##- DOMAIN-SUFFIX,ip-api.com,DIRECT
##- DOMAIN-SUFFIX,ipapi.co,DIRECT
##- DOMAIN-SUFFIX,ip6.seeip.org,DIRECT
##- DOMAIN-SUFFIX,members.3322.org,DIRECT

##在线IP段转CIDR地址：http://ip2cidr.com

#===================== 自定义规则 二 =====================#
script:
##  shortcuts:
##    common_port: dst_port not in [21, 22, 23, 53, 80, 123, 143, 194, 443, 465, 587, 853, 993, 995, 998, 2052, 2053, 2082, 2083, 2086, 2095, 2096, 5222, 5228, 5229, 5230, 8080, 8443, 8880, 8888, 8889]

##  code: |
##    def main(ctx, metadata):
##        directkeywordlist = ["baidu"]
##        for directkeyword in directkeywordlist:
##          if directkeyword in metadata["host"]:
##            ctx.log('[Script] matched keyword %s use direct' % directkeyword)
##            return "DIRECT"

rules:
##- SCRIPT,common_port,DIRECT #shortcuts rule

##- DOMAIN-SUFFIX,google.com,Proxy #匹配域名后缀(交由Proxy代理服务器组)
##- DOMAIN-KEYWORD,google,Proxy #匹配域名关键字(交由Proxy代理服务器组)
##- DOMAIN,google.com,Proxy #匹配域名(交由Proxy代理服务器组)
##- DOMAIN-SUFFIX,ad.com,REJECT #匹配域名后缀(拒绝)
##- IP-CIDR,127.0.0.0/8,DIRECT #匹配数据目标IP(直连)
##- SRC-IP-CIDR,192.168.1.201/32,DIRECT #匹配数据发起IP(直连)
##- DST-PORT,80,DIRECT #匹配数据目标端口(直连)
##- SRC-PORT,7777,DIRECT #匹配数据源端口(直连)

#===================== 配置文件 =====================#

mixed-port: 7893
allow-lan: true
mode: rule
log-level: warning
external-controller: 0.0.0.0:9090
proxy-groups:
- name: "\U0001F343 Proxies"
  type: select
  proxies:
  - "⭐ Auto"
  - V1-俄罗斯01 CDN隧道 1.2x
  - V1-加拿大A CDN隧道 1.5x
  - V1-印度01 CDN隧道 1.5x
  - V1-台湾01 隧道 1.5x
  - V1-台湾99 Hinet直连 速度随缘 0.5x
  - V1-德国01 CDN隧道 1.5x
  - V1-新加坡 隧道 均衡负载 动态IP 1.3x
  - V1-日本98 CDN隧道 3x
  - V1-日本A 隧道 1.6x
  - V1-波兰01 隧道 2x
  - V1-澳洲01 隧道 | 2x
  - V1-美国 隧道 均衡负载 动态IP 1.3x
  - V1-美国01 隧道 1.5x
  - V1-美国03 隧道 1.5x
  - V1-英国01 CDN隧道 1.5x
  - V1-韩国01 隧道 1.5x
  - V1-香港A 隧道 1.6x
  - V1-香港HKBGP01 隧道 | 3x
  - V1-香港HKT02 隧道  原生家宽 2x
  - V1-香港HKT03 隧道 2x
  - V2-PRO 加拿大B 3x
  - V2-PRO 台湾01 4x
  - V2-PRO 巴西01 7x
  - V2-PRO 德国01 | 7x
  - V2-PRO 日本A 4x
  - V2-PRO 波兰01 6x
  - V2-PRO 澳洲01 | 7x
  - V2-PRO 美国01 4x
  - V2-PRO 英国01 6x
  - V2-PRO 香港A 4x
  - V2-PRO 香港B 4x
  - V2-台湾11 套娃 中继 1.5x
  - V2-巴西01 CDN隧道 3x
  - V2-新加坡06 套娃 中继 1.5x
  - V2-阿根廷01 CDN隧道 冷门 2x
  - V2-香港B 隧道 1.6x
  - V2-香港FDC01 隧道 2x
- name: "\U0001F342 Domestic"
  type: select
  proxies:
  - DIRECT
  - "\U0001F343 Proxies"
- name: "\U0001F4AC Telegram"
  type: select
  proxies:
  - "\U0001F343 Proxies"
  - V1-俄罗斯01 CDN隧道 1.2x
  - V1-加拿大A CDN隧道 1.5x
  - V1-印度01 CDN隧道 1.5x
  - V1-台湾01 隧道 1.5x
  - V1-台湾99 Hinet直连 速度随缘 0.5x
  - V1-德国01 CDN隧道 1.5x
  - V1-新加坡 隧道 均衡负载 动态IP 1.3x
  - V1-日本98 CDN隧道 3x
  - V1-日本A 隧道 1.6x
  - V1-波兰01 隧道 2x
  - V1-澳洲01 隧道 | 2x
  - V1-美国 隧道 均衡负载 动态IP 1.3x
  - V1-美国01 隧道 1.5x
  - V1-美国03 隧道 1.5x
  - V1-英国01 CDN隧道 1.5x
  - V1-韩国01 隧道 1.5x
  - V1-香港A 隧道 1.6x
  - V1-香港HKBGP01 隧道 | 3x
  - V1-香港HKT02 隧道  原生家宽 2x
  - V1-香港HKT03 隧道 2x
  - V2-PRO 加拿大B 3x
  - V2-PRO 台湾01 4x
  - V2-PRO 巴西01 7x
  - V2-PRO 德国01 | 7x
  - V2-PRO 日本A 4x
  - V2-PRO 波兰01 6x
  - V2-PRO 澳洲01 | 7x
  - V2-PRO 美国01 4x
  - V2-PRO 英国01 6x
  - V2-PRO 香港A 4x
  - V2-PRO 香港B 4x
  - V2-台湾11 套娃 中继 1.5x
  - V2-巴西01 CDN隧道 3x
  - V2-新加坡06 套娃 中继 1.5x
  - V2-阿根廷01 CDN隧道 冷门 2x
  - V2-香港B 隧道 1.6x
  - V2-香港FDC01 隧道 2x
- name: "\U0001F479 YouTube"
  type: select
  proxies:
  - "\U0001F343 Proxies"
  - V1-俄罗斯01 CDN隧道 1.2x
  - V1-加拿大A CDN隧道 1.5x
  - V1-印度01 CDN隧道 1.5x
  - V1-台湾01 隧道 1.5x
  - V1-台湾99 Hinet直连 速度随缘 0.5x
  - V1-德国01 CDN隧道 1.5x
  - V1-新加坡 隧道 均衡负载 动态IP 1.3x
  - V1-日本98 CDN隧道 3x
  - V1-日本A 隧道 1.6x
  - V1-波兰01 隧道 2x
  - V1-澳洲01 隧道 | 2x
  - V1-美国 隧道 均衡负载 动态IP 1.3x
  - V1-美国01 隧道 1.5x
  - V1-美国03 隧道 1.5x
  - V1-英国01 CDN隧道 1.5x
  - V1-韩国01 隧道 1.5x
  - V1-香港A 隧道 1.6x
  - V1-香港HKBGP01 隧道 | 3x
  - V1-香港HKT02 隧道  原生家宽 2x
  - V1-香港HKT03 隧道 2x
  - V2-PRO 加拿大B 3x
  - V2-PRO 台湾01 4x
  - V2-PRO 巴西01 7x
  - V2-PRO 德国01 | 7x
  - V2-PRO 日本A 4x
  - V2-PRO 波兰01 6x
  - V2-PRO 澳洲01 | 7x
  - V2-PRO 美国01 4x
  - V2-PRO 英国01 6x
  - V2-PRO 香港A 4x
  - V2-PRO 香港B 4x
  - V2-台湾11 套娃 中继 1.5x
  - V2-巴西01 CDN隧道 3x
  - V2-新加坡06 套娃 中继 1.5x
  - V2-阿根廷01 CDN隧道 冷门 2x
  - V2-香港B 隧道 1.6x
  - V2-香港FDC01 隧道 2x
- name: "\U0001F37F Netflix"
  type: select
  proxies:
  - "\U0001F343 Proxies"
  - V1-俄罗斯01 CDN隧道 1.2x
  - V1-加拿大A CDN隧道 1.5x
  - V1-印度01 CDN隧道 1.5x
  - V1-台湾01 隧道 1.5x
  - V1-台湾99 Hinet直连 速度随缘 0.5x
  - V1-德国01 CDN隧道 1.5x
  - V1-新加坡 隧道 均衡负载 动态IP 1.3x
  - V1-日本98 CDN隧道 3x
  - V1-日本A 隧道 1.6x
  - V1-波兰01 隧道 2x
  - V1-澳洲01 隧道 | 2x
  - V1-美国 隧道 均衡负载 动态IP 1.3x
  - V1-美国01 隧道 1.5x
  - V1-美国03 隧道 1.5x
  - V1-英国01 CDN隧道 1.5x
  - V1-韩国01 隧道 1.5x
  - V1-香港A 隧道 1.6x
  - V1-香港HKBGP01 隧道 | 3x
  - V1-香港HKT02 隧道  原生家宽 2x
  - V1-香港HKT03 隧道 2x
  - V2-PRO 加拿大B 3x
  - V2-PRO 台湾01 4x
  - V2-PRO 巴西01 7x
  - V2-PRO 德国01 | 7x
  - V2-PRO 日本A 4x
  - V2-PRO 波兰01 6x
  - V2-PRO 澳洲01 | 7x
  - V2-PRO 美国01 4x
  - V2-PRO 英国01 6x
  - V2-PRO 香港A 4x
  - V2-PRO 香港B 4x
  - V2-台湾11 套娃 中继 1.5x
  - V2-巴西01 CDN隧道 3x
  - V2-新加坡06 套娃 中继 1.5x
  - V2-阿根廷01 CDN隧道 冷门 2x
  - V2-香港B 隧道 1.6x
  - V2-香港FDC01 隧道 2x
- name: "\U0001F4B3 PayPal"
  type: select
  proxies:
  - DIRECT
  - "\U0001F343 Proxies"
  - V1-俄罗斯01 CDN隧道 1.2x
  - V1-加拿大A CDN隧道 1.5x
  - V1-印度01 CDN隧道 1.5x
  - V1-台湾01 隧道 1.5x
  - V1-台湾99 Hinet直连 速度随缘 0.5x
  - V1-德国01 CDN隧道 1.5x
  - V1-新加坡 隧道 均衡负载 动态IP 1.3x
  - V1-日本98 CDN隧道 3x
  - V1-日本A 隧道 1.6x
  - V1-波兰01 隧道 2x
  - V1-澳洲01 隧道 | 2x
  - V1-美国 隧道 均衡负载 动态IP 1.3x
  - V1-美国01 隧道 1.5x
  - V1-美国03 隧道 1.5x
  - V1-英国01 CDN隧道 1.5x
  - V1-韩国01 隧道 1.5x
  - V1-香港A 隧道 1.6x
  - V1-香港HKBGP01 隧道 | 3x
  - V1-香港HKT02 隧道  原生家宽 2x
  - V1-香港HKT03 隧道 2x
  - V2-PRO 加拿大B 3x
  - V2-PRO 台湾01 4x
  - V2-PRO 巴西01 7x
  - V2-PRO 德国01 | 7x
  - V2-PRO 日本A 4x
  - V2-PRO 波兰01 6x
  - V2-PRO 澳洲01 | 7x
  - V2-PRO 美国01 4x
  - V2-PRO 英国01 6x
  - V2-PRO 香港A 4x
  - V2-PRO 香港B 4x
  - V2-台湾11 套娃 中继 1.5x
  - V2-巴西01 CDN隧道 3x
  - V2-新加坡06 套娃 中继 1.5x
  - V2-阿根廷01 CDN隧道 冷门 2x
  - V2-香港B 隧道 1.6x
  - V2-香港FDC01 隧道 2x
- name: "\U0001F454 LinkedIn"
  type: select
  proxies:
  - DIRECT
  - "\U0001F343 Proxies"
  - V1-俄罗斯01 CDN隧道 1.2x
  - V1-加拿大A CDN隧道 1.5x
  - V1-印度01 CDN隧道 1.5x
  - V1-台湾01 隧道 1.5x
  - V1-台湾99 Hinet直连 速度随缘 0.5x
  - V1-德国01 CDN隧道 1.5x
  - V1-新加坡 隧道 均衡负载 动态IP 1.3x
  - V1-日本98 CDN隧道 3x
  - V1-日本A 隧道 1.6x
  - V1-波兰01 隧道 2x
  - V1-澳洲01 隧道 | 2x
  - V1-美国 隧道 均衡负载 动态IP 1.3x
  - V1-美国01 隧道 1.5x
  - V1-美国03 隧道 1.5x
  - V1-英国01 CDN隧道 1.5x
  - V1-韩国01 隧道 1.5x
  - V1-香港A 隧道 1.6x
  - V1-香港HKBGP01 隧道 | 3x
  - V1-香港HKT02 隧道  原生家宽 2x
  - V1-香港HKT03 隧道 2x
  - V2-PRO 加拿大B 3x
  - V2-PRO 台湾01 4x
  - V2-PRO 巴西01 7x
  - V2-PRO 德国01 | 7x
  - V2-PRO 日本A 4x
  - V2-PRO 波兰01 6x
  - V2-PRO 澳洲01 | 7x
  - V2-PRO 美国01 4x
  - V2-PRO 英国01 6x
  - V2-PRO 香港A 4x
  - V2-PRO 香港B 4x
  - V2-台湾11 套娃 中继 1.5x
  - V2-巴西01 CDN隧道 3x
  - V2-新加坡06 套娃 中继 1.5x
  - V2-阿根廷01 CDN隧道 冷门 2x
  - V2-香港B 隧道 1.6x
  - V2-香港FDC01 隧道 2x
- name: "\U0001F34E Apple Service"
  type: select
  proxies:
  - DIRECT
  - "\U0001F343 Proxies"
  - V1-俄罗斯01 CDN隧道 1.2x
  - V1-加拿大A CDN隧道 1.5x
  - V1-印度01 CDN隧道 1.5x
  - V1-台湾01 隧道 1.5x
  - V1-台湾99 Hinet直连 速度随缘 0.5x
  - V1-德国01 CDN隧道 1.5x
  - V1-新加坡 隧道 均衡负载 动态IP 1.3x
  - V1-日本98 CDN隧道 3x
  - V1-日本A 隧道 1.6x
  - V1-波兰01 隧道 2x
  - V1-澳洲01 隧道 | 2x
  - V1-美国 隧道 均衡负载 动态IP 1.3x
  - V1-美国01 隧道 1.5x
  - V1-美国03 隧道 1.5x
  - V1-英国01 CDN隧道 1.5x
  - V1-韩国01 隧道 1.5x
  - V1-香港A 隧道 1.6x
  - V1-香港HKBGP01 隧道 | 3x
  - V1-香港HKT02 隧道  原生家宽 2x
  - V1-香港HKT03 隧道 2x
  - V2-PRO 加拿大B 3x
  - V2-PRO 台湾01 4x
  - V2-PRO 巴西01 7x
  - V2-PRO 德国01 | 7x
  - V2-PRO 日本A 4x
  - V2-PRO 波兰01 6x
  - V2-PRO 澳洲01 | 7x
  - V2-PRO 美国01 4x
  - V2-PRO 英国01 6x
  - V2-PRO 香港A 4x
  - V2-PRO 香港B 4x
  - V2-台湾11 套娃 中继 1.5x
  - V2-巴西01 CDN隧道 3x
  - V2-新加坡06 套娃 中继 1.5x
  - V2-阿根廷01 CDN隧道 冷门 2x
  - V2-香港B 隧道 1.6x
  - V2-香港FDC01 隧道 2x
- name: "☁ Others"
  type: select
  proxies:
  - "\U0001F343 Proxies"
  - "\U0001F342 Domestic"
- name: "⭐ Auto"
  type: load-balance
  strategy: round-robin
  disable-udp: false
  proxies:
  - V1-俄罗斯01 CDN隧道 1.2x
  - V1-加拿大A CDN隧道 1.5x
  - V1-印度01 CDN隧道 1.5x
  - V1-台湾01 隧道 1.5x
  - V1-德国01 CDN隧道 1.5x
  - V1-新加坡 隧道 均衡负载 动态IP 1.3x
  - V1-日本98 CDN隧道 3x
  - V1-日本A 隧道 1.6x
  - V1-波兰01 隧道 2x
  - V1-澳洲01 隧道 | 2x
  - V1-美国 隧道 均衡负载 动态IP 1.3x
  - V1-美国01 隧道 1.5x
  - V1-美国03 隧道 1.5x
  - V1-英国01 CDN隧道 1.5x
  - V1-韩国01 隧道 1.5x
  - V1-香港A 隧道 1.6x
  - V1-香港HKBGP01 隧道 | 3x
  - V1-香港HKT02 隧道  原生家宽 2x
  - V1-香港HKT03 隧道 2x
  - V2-PRO 加拿大B 3x
  - V2-PRO 台湾01 4x
  - V2-PRO 巴西01 7x
  - V2-PRO 德国01 | 7x
  - V2-PRO 日本A 4x
  - V2-PRO 波兰01 6x
  - V2-PRO 澳洲01 | 7x
  - V2-PRO 美国01 4x
  - V2-PRO 英国01 6x
  - V2-PRO 香港A 4x
  - V2-PRO 香港B 4x
  - V2-台湾11 套娃 中继 1.5x
  - V2-巴西01 CDN隧道 3x
  - V2-新加坡06 套娃 中继 1.5x
  - V2-阿根廷01 CDN隧道 冷门 2x
  - V2-香港B 隧道 1.6x
  - V2-香港FDC01 隧道 2x
  url: http://www.gstatic.com/generate_204
  interval: 30
rules:
- DST-PORT,7895,REJECT
- DST-PORT,7892,REJECT
- IP-CIDR,198.18.0.1/16,REJECT,no-resolve
- DOMAIN,teams.live.com,DIRECT
- "IP-CIDR,106.11.0.0/16,\U0001F342 Domestic"
- "IP-CIDR,67.198.55.0/24,\U0001F343 Proxies"
- "IP-CIDR,209.237.192.0/19,\U0001F343 Proxies"
- "GEOIP,CN,\U0001F342 Domestic"
- MATCH,☁ Others
redir-port: 7892
tproxy-port: 7895
port: 7890
socks-port: 7891
bind-address: "*"
external-ui: "/usr/share/openclash/ui"
ipv6: false
geodata-mode: true
geodata-loader: standard
dns:
  enable: true
  ipv6: false
  enhanced-mode: redir-host
  listen: 0.0.0.0:7874
  nameserver:
  - 114.114.114.114
  - 119.29.29.29
  - 8.8.8.8
  - 1.1.1.1
  fallback:
  - https://dns.cloudflare.com/dns-query
  - https://dns.google/dns-query
profile:
  store-selected: true
authentication:
- Clash:LUO123456789

#===================== 自定义覆写设置 =====================#

#!/bin/sh
. /usr/share/openclash/ruby.sh
. /usr/share/openclash/log.sh
. /lib/functions.sh

# This script is called by /etc/init.d/openclash
# Add your custom overwrite scripts here, they will be take effict after the OpenClash own srcipts

LOG_OUT "Tip: Start Running Custom Overwrite Scripts..."
LOGTIME=$(echo $(date "+%Y-%m-%d %H:%M:%S"))
LOG_FILE="/tmp/openclash.log"
CONFIG_FILE="$1" #config path

#Simple Demo:
    #General Demo
    #1--config path
    #2--key name
    #3--value
    #ruby_edit "$CONFIG_FILE" "['redir-port']" "7892"
    #ruby_edit "$CONFIG_FILE" "['secret']" "123456"
    #ruby_edit "$CONFIG_FILE" "['dns']['enable']" "true"

    #Hash Demo
    #1--config path
    #2--key name
    #3--hash type value
    #ruby_edit "$CONFIG_FILE" "['experimental']" "{'sniff-tls-sni'=>true}"
    #ruby_edit "$CONFIG_FILE" "['sniffer']" "{'sniffing'=>['tls','http']}"

    #Array Demo:
    #1--config path
    #2--key name
    #3--position(start from 0, end with -1)
    #4--value
    #ruby_arr_insert "$CONFIG_FILE" "['dns']['nameserver']" "0" "114.114.114.114"

    #Array Add From Yaml File Demo:
    #1--config path
    #2--key name
    #3--position(start from 0, end with -1)
    #4--value file path
    #5--value key name in #4 file
    #ruby_arr_add_file "$CONFIG_FILE" "['dns']['fallback-filter']['ipcidr']" "0" "/etc/openclash/custom/openclash_custom_fallback_filter.yaml" "['fallback-filter']['ipcidr']"

#Ruby Script Demo:
    #ruby -ryaml -rYAML -I "/usr/share/openclash" -E UTF-8 -e "
    #   begin
    #      Value = YAML.load_file('$CONFIG_FILE');
    #   rescue Exception => e
    #      puts '${LOGTIME} Error: Load File Failed,【' + e.message + '】';
    #   end;

        #General
    #   begin
    #   Thread.new{
    #      Value['redir-port']=7892;
    #      Value['tproxy-port']=7895;
    #      Value['port']=7890;
    #      Value['socks-port']=7891;
    #      Value['mixed-port']=7893;
    #   }.join;

    #   rescue Exception => e
    #      puts '${LOGTIME} Error: Set General Failed,【' + e.message + '】';
    #   ensure
    #      File.open('$CONFIG_FILE','w') {|f| YAML.dump(Value, f)};
    #   end" 2>/dev/null >> $LOG_FILE

exit 0
#===================== 自定义防火墙设置 =====================#

#!/bin/sh
. /usr/share/openclash/log.sh
. /lib/functions.sh

# This script is called by /etc/init.d/openclash
# Add your custom firewall rules here, they will be added after the end of the OpenClash iptables rules

LOG_OUT "Tip: Start Add Custom Firewall Rules..."

exit 0
#===================== IPTABLES 防火墙设置 =====================#

#IPv4 NAT chain

# Generated by iptables-save v1.8.8 (nf_tables) on Sun Oct  6 10:47:03 2024
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
# Completed on Sun Oct  6 10:47:03 2024

#IPv4 Mangle chain

# Generated by iptables-save v1.8.8 (nf_tables) on Sun Oct  6 10:47:03 2024
*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
# Completed on Sun Oct  6 10:47:03 2024

#IPv4 Filter chain

# Generated by iptables-save v1.8.8 (nf_tables) on Sun Oct  6 10:47:03 2024
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT
# Completed on Sun Oct  6 10:47:03 2024

#IPv6 NAT chain

#IPv6 Mangle chain

#IPv6 Filter chain

#===================== NFTABLES 防火墙设置 =====================#

table inet fw4 {
	chain input {
		type filter hook input priority filter; policy drop;
		iifname "lo" accept comment "!fw4: Accept traffic from loopback"
		ct state established,related accept comment "!fw4: Allow inbound established and related flows"
		tcp flags syn / fin,syn,rst,ack jump syn_flood comment "!fw4: Rate limit TCP syn packets"
		udp dport 9993 counter packets 18501 bytes 3045760 accept comment "!fw4: Allow-ZeroTier-Inbound"
		iifname "br-lan" jump input_lan comment "!fw4: Handle lan IPv4/IPv6 input traffic"
		iifname "eth0" jump input_wan comment "!fw4: Handle wan IPv4/IPv6 input traffic"
		iifname "ztrpp1234p" jump input_vpn comment "!fw4: Handle vpn IPv4/IPv6 input traffic"
		jump handle_reject
	}
}
table inet fw4 {
	chain forward {
		type filter hook forward priority filter; policy drop;
		ct state established,related accept comment "!fw4: Allow forwarded established and related flows"
		iifname "br-lan" jump forward_lan comment "!fw4: Handle lan IPv4/IPv6 forward traffic"
		iifname "eth0" jump forward_wan comment "!fw4: Handle wan IPv4/IPv6 forward traffic"
		iifname "ztrpp1234p" jump forward_vpn comment "!fw4: Handle vpn IPv4/IPv6 forward traffic"
		jump handle_reject
	}
}
table inet fw4 {
	chain dstnat {
		type nat hook prerouting priority dstnat; policy accept;
		ip daddr { 8.8.4.4, 8.8.8.8 } tcp dport 53 counter packets 0 bytes 0 redirect to :7892 comment "OpenClash Google DNS Hijack"
		udp dport 53 counter packets 6206 bytes 431040 redirect to :53 comment "OpenClash DNS Hijack"
		tcp dport 53 counter packets 0 bytes 0 redirect to :53 comment "OpenClash DNS Hijack"
		ip protocol tcp counter packets 3957 bytes 299301 jump openclash
	}
}
table inet fw4 {
	chain srcnat {
		type nat hook postrouting priority srcnat; policy accept;
		oifname "br-lan" jump srcnat_lan comment "!fw4: Handle lan IPv4/IPv6 srcnat traffic"
		oifname "eth0" jump srcnat_wan comment "!fw4: Handle wan IPv4/IPv6 srcnat traffic"
		oifname "ztrpp1234p" jump srcnat_vpn comment "!fw4: Handle vpn IPv4/IPv6 srcnat traffic"
	}
}
table inet fw4 {
	chain nat_output {
		type nat hook output priority filter - 1; policy accept;
	}
}
table inet fw4 {
	chain mangle_prerouting {
		type filter hook prerouting priority mangle; policy accept;
		ip protocol udp counter packets 93302 bytes 16801724 jump openclash_mangle
	}
}
table inet fw4 {
	chain mangle_output {
		type route hook output priority mangle; policy accept;
	}
}
table inet fw4 {
	chain openclash {
		meta nfproto ipv4 tcp sport 22 counter packets 0 bytes 0 return
		ip daddr @localnetwork counter packets 896 bytes 61100 return
		ip protocol tcp counter packets 3061 bytes 238201 redirect to :7892
	}
}
table inet fw4 {
	chain openclash_mangle {
		meta nfproto ipv4 udp sport 9993 counter packets 5154 bytes 978822 return
		meta nfproto ipv4 udp sport 500 counter packets 0 bytes 0 return
		meta nfproto ipv4 udp sport 546 counter packets 0 bytes 0 return
		meta nfproto ipv4 udp sport 68 counter packets 8 bytes 2646 return
		meta l4proto udp iifname "lo" counter packets 17619 bytes 1585916 return
		ip daddr @localnetwork counter packets 44346 bytes 7726896 return
		udp dport 53 counter packets 188 bytes 13196 return
		ip protocol udp counter packets 25987 bytes 6494248 jump openclash_upnp
		meta l4proto udp meta mark set 0x00000162 tproxy ip to 127.0.0.1:7895 counter packets 25987 bytes 6494248 accept
	}
}

#===================== IPSET状态 =====================#

#===================== 路由表状态 =====================#

#IPv4

#route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.10.0    0.0.0.0         255.255.255.0   U     0      0        0 br-lan

#ip route list
default via 192.168.1.1 dev eth0 proto static src 192.168.1.2
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.2
192.168.10.0/24 dev br-lan proto kernel scope link src 192.168.10.1

#ip rule show
0:	from all lookup local
32765:	from all fwmark 0x162 lookup 354
32766:	from all lookup main
32767:	from all lookup default

#IPv6

#route -A inet6
Kernel IPv6 routing table
Destination                                 Next Hop                                Flags Metric Ref    Use Iface
::/0                                        fe80::1                                 UG    512    5        0 eth0
240e:3ae:b96:1df0::/64                      ::                                      !n    2147483647 2        0 lo
240e:3ae:ba0:2420::/60                      fe80::1                                 UG    384    2        0 eth0
240e:3ae:ba0:2420::/64                      ::                                      U     256    1        0 eth0
240e:3ae:ba0:2420::/64                      ::                                      !n    2147483647 1        0 lo
fc19:14f6:d200::/40                         ::                                      U     256    1        0 ztrpp1234p
fd1d:7193:9404:6565:4699:9300::/88          ::                                      U     256    1        0 ztrpp1234p
fd2c:56c7:346a::/48                         ::                                      !n    2147483647 4        0 lo
fe80::/64                                   ::                                      U     256    1        0 ztrpp1234p
fe80::/64                                   ::                                      U     256    2        0 eth0
::/0                                        ::                                      !n    -1     3        0 lo
::1/128                                     ::                                      Un    0      7        0 lo
240e:3ae:ba0:2420::/128                     ::                                      Un    0      3        0 eth0
*WAN IP*:609d/128    ::                                      Un    0      5        0 eth0
fc19:14f6:d200::/128                        ::                                      Un    0      3        0 ztrpp1234p
fc19:14f6:d2e3:622a:a242::1/128             ::                                      Un    0      3        0 ztrpp1234p
fd1d:7193:9404:6565:4699:9300::/128         ::                                      Un    0      3        0 ztrpp1234p
fd1d:7193:9404:6565:4699:93e3:622a:a242/128 ::                                      Un    0      4        0 ztrpp1234p
fe80::/128                                  ::                                      Un    0      5        0 ztrpp1234p
fe80::/128                                  ::                                      Un    0      3        0 eth0
fe80::290:27ff:fee3:609d/128                ::                                      Un    0      3        0 eth0
fe80::8caf:e9ff:fef7:64cf/128               ::                                      Un    0      2        0 ztrpp1234p
ff00::/8                                    ::                                      U     256    3        0 ztrpp1234p
ff00::/8                                    ::                                      U     256    5        0 eth0
::/0                                        ::                                      !n    -1     3        0 lo

#ip -6 route list
default from 240e:3ae:ba0:2420::/64 via fe80::1 dev eth0 proto static metric 512 pref medium
unreachable 240e:3ae:b96:1df0::/64 dev lo proto static metric 2147483647 pref medium
240e:3ae:ba0:2420::/60 from 240e:3ae:ba0:2420::/64 via fe80::1 dev eth0 proto static metric 384 pref medium
240e:3ae:ba0:2420::/64 dev eth0 proto static metric 256 pref medium
unreachable 240e:3ae:ba0:2420::/64 dev lo proto static metric 2147483647 pref medium
fc19:14f6:d200::/40 dev ztrpp1234p proto kernel metric 256 pref medium
fd1d:7193:9404:6565:4699:9300::/88 dev ztrpp1234p proto kernel metric 256 pref medium
unreachable fd2c:56c7:346a::/48 dev lo proto static metric 2147483647 pref medium
fe80::/64 dev ztrpp1234p proto kernel metric 256 pref medium
fe80::/64 dev eth0 proto kernel metric 256 pref medium

#ip -6 rule show
0:	from all lookup local
32766:	from all lookup main

#===================== 端口占用状态 =====================#

tcp        0      0 :::9090                 :::*                    LISTEN      27364/clash
tcp        0      0 :::7890                 :::*                    LISTEN      27364/clash
tcp        0      0 :::7891                 :::*                    LISTEN      27364/clash
tcp        0      0 :::7892                 :::*                    LISTEN      27364/clash
tcp        0      0 :::7893                 :::*                    LISTEN      27364/clash
tcp        0      0 :::7895                 :::*                    LISTEN      27364/clash
udp        0      0 :::7874                 :::*                                27364/clash
udp        0      0 :::7891                 :::*                                27364/clash
udp        0      0 :::7892                 :::*                                27364/clash
udp        0      0 :::7893                 :::*                                27364/clash
udp        0      0 :::7895                 :::*                                27364/clash

#===================== 测试本机DNS查询(www.baidu.com) =====================#

Server:		127.0.0.1
Address:	127.0.0.1:53

www.baidu.com	canonical name = www.a.shifen.com
Name:	www.a.shifen.com
Address: 180.101.50.242
Name:	www.a.shifen.com
Address: 180.101.50.188

#===================== 测试内核DNS查询(www.instagram.com) =====================#

Dnsmasq 当前默认 resolv 文件：/tmp/resolv.conf.d/resolv.conf.auto

#===================== /tmp/resolv.conf.d/resolv.conf.auto =====================#

# Interface wan
nameserver 192.168.1.1
search Home

#===================== 测试本机网络连接(www.baidu.com) =====================#

HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Connection: keep-alive
Content-Length: 277
Content-Type: text/html
Date: Sun, 06 Oct 2024 02:47:08 GMT
Etag: "575e1f60-115"
Last-Modified: Mon, 13 Jun 2016 02:50:08 GMT
Pragma: no-cache
Server: bfe/1.0.8.18

#===================== 测试本机网络下载(raw.githubusercontent.com) =====================#

#===================== 最近运行日志(自动切换为Debug模式) =====================#

2024-10-06 10:44:04【/tmp/clash_last_version】Download Failed:【curl: (6) Could not resolve host: raw.githubusercontent.com】
2024-10-06 10:44:09【/tmp/openclash_last_version】Download Failed:【curl: (6) Could not resolve host: raw.githubusercontent.com curl: (6) Could not resolve host: raw.githubusercontent.com curl: (6) Could not resolve host: raw.githubusercontent.com】
2024-10-06 10:44:31【/tmp/clash_last_version】Download Failed:【curl: (6) Could not resolve host: raw.githubusercontent.com】
2024-10-06 10:44:36【/tmp/openclash_last_version】Download Failed:【curl: (6) Could not resolve host: raw.githubusercontent.com curl: (6) Could not resolve host: raw.githubusercontent.com curl: (6) Could not resolve host: raw.githubusercontent.com】
2024-10-06 10:44:58【/tmp/clash_last_version】Download Failed:【curl: (6) Could not resolve host: raw.githubusercontent.com】
2024-10-06 10:45:03【/tmp/openclash_last_version】Download Failed:【curl: (6) Could not resolve host: raw.githubusercontent.com curl: (6) Could not resolve host: raw.githubusercontent.com curl: (6) Could not resolve host: raw.githubusercontent.com】
2024-10-06 10:45:25【/tmp/clash_last_version】Download Failed:【curl: (6) Could not resolve host: raw.githubusercontent.com】
2024-10-06 10:45:30【/tmp/openclash_last_version】Download Failed:【curl: (6) Could not resolve host: raw.githubusercontent.com curl: (6) Could not resolve host: raw.githubusercontent.com curl: (6) Could not resolve host: raw.githubusercontent.com】
2024-10-06 10:45:52【/tmp/clash_last_version】Download Failed:【curl: (6) Could not resolve host: raw.githubusercontent.com】
2024-10-06 10:45:57【/tmp/openclash_last_version】Download Failed:【curl: (6) Could not resolve host: raw.githubusercontent.com curl: (6) Could not resolve host: raw.githubusercontent.com curl: (6) Could not resolve host: raw.githubusercontent.com】
2024-10-06 10:46:19【/tmp/clash_last_version】Download Failed:【curl: (6) Could not resolve host: raw.githubusercontent.com】
2024-10-06 10:46:24【/tmp/openclash_last_version】Download Failed:【curl: (6) Could not resolve host: raw.githubusercontent.com curl: (6) Could not resolve host: raw.githubusercontent.com curl: (6) Could not resolve host: raw.githubusercontent.com】
2024-10-06 10:46:46【/tmp/clash_last_version】Download Failed:【curl: (6) Could not resolve host: raw.githubusercontent.com】
2024-10-06 10:46:51【/tmp/openclash_last_version】Download Failed:【curl: (6) Could not resolve host: raw.githubusercontent.com curl: (6) Could not resolve host: raw.githubusercontent.com curl: (6) Could not resolve host: raw.githubusercontent.com】
2024-10-06 10:47:13【/tmp/clash_last_version】Download Failed:【curl: (6) Could not resolve host: raw.githubusercontent.com】
time="2024-10-06T02:47:22.188173076Z" level=debug msg="re-creating the http client due to requesting https://dns.cloudflare.com:443/dns-query: Get \"https://dns.cloudflare.com:443/dns-query?dns=AAABAAABAAAAAAAAA2NzcAp3aXRoZ29vZ2xlA2NvbQAAAQAB\": context deadline exceeded"
time="2024-10-06T02:47:22.188263376Z" level=debug msg="[https://dns.cloudflare.com:443/dns-query] using HTTP/2 for this upstream: <nil>"
time="2024-10-06T02:47:22.188266412Z" level=debug msg="re-creating the http client due to requesting https://dns.google:443/dns-query: Get \"https://dns.google:443/dns-query?dns=AAABAAABAAAAAAAAA2NzcAp3aXRoZ29vZ2xlA2NvbQAAAQAB\": context deadline exceeded"
time="2024-10-06T02:47:22.188502968Z" level=debug msg="[https://dns.google:443/dns-query] using HTTP/2 for this upstream: <nil>"
time="2024-10-06T02:47:22.188591408Z" level=debug msg="re-creating the http client due to requesting https://dns.cloudflare.com:443/dns-query: Get \"https://dns.cloudflare.com:443/dns-query?dns=AAABAAABAAAAAAAAA2NzcAp3aXRoZ29vZ2xlA2NvbQAAAQAB\": context deadline exceeded"
time="2024-10-06T02:47:22.188670488Z" level=debug msg="[https://dns.cloudflare.com:443/dns-query] using HTTP/2 for this upstream: <nil>"
time="2024-10-06T02:47:22.188763896Z" level=debug msg="re-creating the http client due to requesting https://dns.google:443/dns-query: Get \"https://dns.google:443/dns-query?dns=AAABAAABAAAAAAAAA2NzcAp3aXRoZ29vZ2xlA2NvbQAAAQAB\": context deadline exceeded"
time="2024-10-06T02:47:22.1888166Z" level=debug msg="[https://dns.google:443/dns-query] using HTTP/2 for this upstream: <nil>"
time="2024-10-06T02:47:24.09594738Z" level=debug msg="re-creating the http client due to requesting https://dns.cloudflare.com:443/dns-query: Get \"https://dns.cloudflare.com:443/dns-query?dns=AAABAAABAAAAAAAAA3JhdxFnaXRodWJ1c2VyY29udGVudANjb20AAAEAAQ\": context deadline exceeded"
time="2024-10-06T02:47:24.09604506Z" level=debug msg="[https://dns.cloudflare.com:443/dns-query] using HTTP/2 for this upstream: <nil>"
time="2024-10-06T02:47:24.096294864Z" level=debug msg="re-creating the http client due to requesting https://dns.cloudflare.com:443/dns-query: Get \"https://dns.cloudflare.com:443/dns-query?dns=AAABAAABAAAAAAAAA3JhdxFnaXRodWJ1c2VyY29udGVudANjb20AAAEAAQ\": context deadline exceeded"
time="2024-10-06T02:47:24.096365268Z" level=debug msg="[https://dns.cloudflare.com:443/dns-query] using HTTP/2 for this upstream: <nil>"
time="2024-10-06T02:47:24.0966588Z" level=debug msg="[DNS Server] Exchange ;raw.githubusercontent.com.\tIN\t A failed: all DNS requests failed, first error: requesting https://dns.google:443/dns-query: Get \"https://dns.google:443/dns-query?dns=AAABAAABAAAAAAAAA3JhdxFnaXRodWJ1c2VyY29udGVudANjb20AAAEAAQ\": connect failed: dial tcp 8.8.4.4:443: i/o timeout\ndial tcp 8.8.8.8:443: i/o timeout"
time="2024-10-06T02:47:24.096891792Z" level=debug msg="[DNS Server] Exchange ;raw.githubusercontent.com.\tIN\t A failed: all DNS requests failed, first error: requesting https://dns.google:443/dns-query: Get \"https://dns.google:443/dns-query?dns=AAABAAABAAAAAAAAA3JhdxFnaXRodWJ1c2VyY29udGVudANjb20AAAEAAQ\": connect failed: dial tcp 8.8.4.4:443: i/o timeout\ndial tcp 8.8.8.8:443: i/o timeout"
time="2024-10-06T02:47:24.097012212Z" level=debug msg="[DNS Server] Exchange ;raw.githubusercontent.com.\tIN\t A failed: all DNS requests failed, first error: requesting https://dns.google:443/dns-query: Get \"https://dns.google:443/dns-query?dns=AAABAAABAAAAAAAAA3JhdxFnaXRodWJ1c2VyY29udGVudANjb20AAAEAAQ\": connect failed: dial tcp 8.8.4.4:443: i/o timeout\ndial tcp 8.8.8.8:443: i/o timeout"
time="2024-10-06T02:47:24.09693006Z" level=debug msg="[DNS Server] Exchange ;raw.githubusercontent.com.\tIN\t A failed: all DNS requests failed, first error: requesting https://dns.google:443/dns-query: Get \"https://dns.google:443/dns-query?dns=AAABAAABAAAAAAAAA3JhdxFnaXRodWJ1c2VyY29udGVudANjb20AAAEAAQ\": connect failed: dial tcp 8.8.4.4:443: i/o timeout\ndial tcp 8.8.8.8:443: i/o timeout"
time="2024-10-06T02:47:24.097235904Z" level=debug msg="[DNS] resolve raw.githubusercontent.com A from udp://119.29.29.29:53"
time="2024-10-06T02:47:24.096941724Z" level=debug msg="[DNS Server] Exchange ;raw.githubusercontent.com.\tIN\t A failed: all DNS requests failed, first error: requesting https://dns.google:443/dns-query: Get \"https://dns.google:443/dns-query?dns=AAABAAABAAAAAAAAA3JhdxFnaXRodWJ1c2VyY29udGVudANjb20AAAEAAQ\": connect failed: dial tcp 8.8.4.4:443: i/o timeout\ndial tcp 8.8.8.8:443: i/o timeout"
time="2024-10-06T02:47:24.09689178Z" level=debug msg="[DNS] resolve raw.githubusercontent.com A from udp://114.114.114.114:53"
time="2024-10-06T02:47:24.096949872Z" level=debug msg="[DNS] resolve raw.githubusercontent.com A from udp://1.1.1.1:53"
time="2024-10-06T02:47:24.09695676Z" level=debug msg="[DNS Server] Exchange ;raw.githubusercontent.com.\tIN\t A failed: all DNS requests failed, first error: requesting https://dns.google:443/dns-query: Get \"https://dns.google:443/dns-query?dns=AAABAAABAAAAAAAAA3JhdxFnaXRodWJ1c2VyY29udGVudANjb20AAAEAAQ\": connect failed: dial tcp 8.8.4.4:443: i/o timeout\ndial tcp 8.8.8.8:443: i/o timeout"
time="2024-10-06T02:47:24.097346856Z" level=debug msg="[DNS] resolve raw.githubusercontent.com A from udp://8.8.8.8:53"
time="2024-10-06T02:47:24.096963564Z" level=debug msg="[DNS Server] Exchange ;raw.githubusercontent.com.\tIN\t A failed: all DNS requests failed, first error: requesting https://dns.google:443/dns-query: Get \"https://dns.google:443/dns-query?dns=AAABAAABAAAAAAAAA3JhdxFnaXRodWJ1c2VyY29udGVudANjb20AAAEAAQ\": connect failed: dial tcp 8.8.4.4:443: i/o timeout\ndial tcp 8.8.8.8:443: i/o timeout"
time="2024-10-06T02:47:24.102040896Z" level=debug msg="[DNS] raw.githubusercontent.com --> [185.199.110.133 185.199.109.133 185.199.108.133] A from udp://114.114.114.114:53"
time="2024-10-06T02:47:24.102290784Z" level=debug msg="[DNS] resolve raw.githubusercontent.com A from https://dns.google:443/dns-query"
time="2024-10-06T02:47:24.102387636Z" level=debug msg="[DNS] resolve raw.githubusercontent.com A from https://dns.cloudflare.com:443/dns-query"
time="2024-10-06T02:47:24.102619632Z" level=debug msg="[DNS] cache hit dns.google --> [8.8.4.4 8.8.8.8] A, expire at 2024-10-06 02:55:35"
time="2024-10-06T02:47:24.102693432Z" level=debug msg="[DNS] cache hit dns.cloudflare.com --> [104.16.133.229 104.16.132.229] A, expire at 2024-10-06 02:48:51"
time="2024-10-06T02:47:24.156282336Z" level=debug msg="re-creating the http client due to requesting https://dns.google:443/dns-query: Get \"https://dns.google:443/dns-query?dns=AAABAAABAAAAAAAAE3JyMy0tLXNuLWlwb3h1LXVtYmsLZ29vZ2xldmlkZW8DY29tAAABAAE\": context deadline exceeded"
time="2024-10-06T02:47:24.1563783Z" level=debug msg="[https://dns.google:443/dns-query] using HTTP/2 for this upstream: <nil>"
time="2024-10-06T02:47:24.156449544Z" level=debug msg="re-creating the http client due to requesting https://dns.cloudflare.com:443/dns-query: Get \"https://dns.cloudflare.com:443/dns-query?dns=AAABAAABAAAAAAAAE3JyMy0tLXNuLWlwb3h1LXVtYmsLZ29vZ2xldmlkZW8DY29tAAABAAE\": context deadline exceeded"
time="2024-10-06T02:47:24.156499704Z" level=debug msg="[https://dns.cloudflare.com:443/dns-query] using HTTP/2 for this upstream: <nil>"
time="2024-10-06T02:47:24.156595836Z" level=debug msg="re-creating the http client due to requesting https://dns.google:443/dns-query: Get \"https://dns.google:443/dns-query?dns=AAABAAABAAAAAAAAE3JyMy0tLXNuLWlwb3h1LXVtYmsLZ29vZ2xldmlkZW8DY29tAAABAAE\": context deadline exceeded"
time="2024-10-06T02:47:24.156642348Z" level=debug msg="[https://dns.google:443/dns-query] using HTTP/2 for this upstream: <nil>"
time="2024-10-06T02:47:24.156596916Z" level=debug msg="re-creating the http client due to requesting https://dns.cloudflare.com:443/dns-query: Get \"https://dns.cloudflare.com:443/dns-query?dns=AAABAAABAAAAAAAAE3JyMy0tLXNuLWlwb3h1LXVtYmsLZ29vZ2xldmlkZW8DY29tAAABAAE\": context deadline exceeded"
time="2024-10-06T02:47:24.156795204Z" level=debug msg="[https://dns.cloudflare.com:443/dns-query] using HTTP/2 for this upstream: <nil>"
time="2024-10-06T02:47:24.157021224Z" level=debug msg="[DNS Server] Exchange ;rr3---sn-ipoxu-umbk.googlevideo.com.\tIN\t A failed: all DNS requests failed, first error: requesting https://dns.google:443/dns-query: Get \"https://dns.google:443/dns-query?dns=AAABAAABAAAAAAAAE3JyMy0tLXNuLWlwb3h1LXVtYmsLZ29vZ2xldmlkZW8DY29tAAABAAE\": context deadline exceeded"
time="2024-10-06T02:47:24.157198176Z" level=debug msg="[DNS] resolve rr3---sn-ipoxu-umbk.googlevideo.com A from udp://8.8.8.8:53"
time="2024-10-06T02:47:24.157269324Z" level=debug msg="[DNS] resolve rr3---sn-ipoxu-umbk.googlevideo.com A from udp://119.29.29.29:53"
time="2024-10-06T02:47:24.157238676Z" level=debug msg="[DNS] resolve rr3---sn-ipoxu-umbk.googlevideo.com A from udp://1.1.1.1:53"
time="2024-10-06T02:47:24.157256232Z" level=debug msg="[DNS] resolve rr3---sn-ipoxu-umbk.googlevideo.com A from udp://114.114.114.114:53"
time="2024-10-06T02:47:24.16156752Z" level=debug msg="[DNS] rr3---sn-ipoxu-umbk.googlevideo.com --> [103.200.30.143] A from udp://114.114.114.114:53"
time="2024-10-06T02:47:24.161798772Z" level=debug msg="[DNS] resolve rr3---sn-ipoxu-umbk.googlevideo.com A from https://dns.google:443/dns-query"
time="2024-10-06T02:47:24.161916372Z" level=debug msg="[DNS] resolve rr3---sn-ipoxu-umbk.googlevideo.com A from https://dns.cloudflare.com:443/dns-query"
time="2024-10-06T02:47:24.162115896Z" level=debug msg="[DNS] cache hit dns.google --> [8.8.4.4 8.8.8.8] A, expire at 2024-10-06 02:55:35"
time="2024-10-06T02:47:24.162257736Z" level=debug msg="[DNS] cache hit dns.cloudflare.com --> [104.16.133.229 104.16.132.229] A, expire at 2024-10-06 02:48:51"
time="2024-10-06T02:47:29.09746296Z" level=debug msg="re-creating the http client due to requesting https://dns.cloudflare.com:443/dns-query: Get \"https://dns.cloudflare.com:443/dns-query?dns=AAABAAABAAAAAAAAA3JhdxFnaXRodWJ1c2VyY29udGVudANjb20AAAEAAQ\": context deadline exceeded"
time="2024-10-06T02:47:29.097572148Z" level=debug msg="[https://dns.cloudflare.com:443/dns-query] using HTTP/2 for this upstream: <nil>"
time="2024-10-06T02:47:29.09757792Z" level=debug msg="re-creating the http client due to requesting https://dns.google:443/dns-query: Get \"https://dns.google:443/dns-query?dns=AAABAAABAAAAAAAAA3JhdxFnaXRodWJ1c2VyY29udGVudANjb20AAAEAAQ\": context deadline exceeded"
time="2024-10-06T02:47:29.097788424Z" level=debug msg="[https://dns.google:443/dns-query] using HTTP/2 for this upstream: <nil>"
time="2024-10-06T02:47:29.097950688Z" level=debug msg="re-creating the http client due to requesting https://dns.cloudflare.com:443/dns-query: Get \"https://dns.cloudflare.com:443/dns-query?dns=AAABAAABAAAAAAAAA3JhdxFnaXRodWJ1c2VyY29udGVudANjb20AAAEAAQ\": context deadline exceeded"
time="2024-10-06T02:47:29.098022112Z" level=debug msg="[https://dns.cloudflare.com:443/dns-query] using HTTP/2 for this upstream: <nil>"
time="2024-10-06T02:47:29.097965028Z" level=debug msg="re-creating the http client due to requesting https://dns.google:443/dns-query: Get \"https://dns.google:443/dns-query?dns=AAABAAABAAAAAAAAA3JhdxFnaXRodWJ1c2VyY29udGVudANjb20AAAEAAQ\": context deadline exceeded"
time="2024-10-06T02:47:29.0981427Z" level=debug msg="[https://dns.google:443/dns-query] using HTTP/2 for this upstream: <nil>"
time="2024-10-06T02:47:29.09837598Z" level=debug msg="[DNS Server] Exchange ;raw.githubusercontent.com.\tIN\t A failed: all DNS requests failed, first error: requesting https://dns.cloudflare.com:443/dns-query: Get \"https://dns.cloudflare.com:443/dns-query?dns=AAABAAABAAAAAAAAA3JhdxFnaXRodWJ1c2VyY29udGVudANjb20AAAEAAQ\": context deadline exceeded"
time="2024-10-06T02:47:29.098545564Z" level=debug msg="[DNS Server] Exchange ;raw.githubusercontent.com.\tIN\t A failed: all DNS requests failed, first error: requesting https://dns.cloudflare.com:443/dns-query: Get \"https://dns.cloudflare.com:443/dns-query?dns=AAABAAABAAAAAAAAA3JhdxFnaXRodWJ1c2VyY29udGVudANjb20AAAEAAQ\": context deadline exceeded"
time="2024-10-06T02:47:29.098567248Z" level=debug msg="[DNS] resolve raw.githubusercontent.com A from udp://1.1.1.1:53"
time="2024-10-06T02:47:29.098602012Z" level=debug msg="[DNS Server] Exchange ;raw.githubusercontent.com.\tIN\t A failed: all DNS requests failed, first error: requesting https://dns.cloudflare.com:443/dns-query: Get \"https://dns.cloudflare.com:443/dns-query?dns=AAABAAABAAAAAAAAA3JhdxFnaXRodWJ1c2VyY29udGVudANjb20AAAEAAQ\": context deadline exceeded"
time="2024-10-06T02:47:29.098620444Z" level=debug msg="[DNS] resolve raw.githubusercontent.com A from udp://119.29.29.29:53"
time="2024-10-06T02:47:29.098622004Z" level=debug msg="[DNS] resolve raw.githubusercontent.com A from udp://8.8.8.8:53"
time="2024-10-06T02:47:29.098629564Z" level=debug msg="[DNS] resolve raw.githubusercontent.com A from udp://114.114.114.114:53"
time="2024-10-06T02:47:29.103090312Z" level=debug msg="[DNS] raw.githubusercontent.com --> [185.199.109.133 185.199.110.133 185.199.111.133] A from udp://114.114.114.114:53"
time="2024-10-06T02:47:29.103299388Z" level=debug msg="[DNS] resolve raw.githubusercontent.com A from https://dns.google:443/dns-query"
time="2024-10-06T02:47:29.103397836Z" level=debug msg="[DNS] resolve raw.githubusercontent.com A from https://dns.cloudflare.com:443/dns-query"
time="2024-10-06T02:47:29.103604284Z" level=debug msg="[DNS] cache hit dns.google --> [8.8.4.4 8.8.8.8] A, expire at 2024-10-06 02:55:35"
time="2024-10-06T02:47:29.103730344Z" level=debug msg="[DNS] cache hit dns.cloudflare.com --> [104.16.133.229 104.16.132.229] A, expire at 2024-10-06 02:48:51"
time="2024-10-06T02:47:29.157226452Z" level=debug msg="re-creating the http client due to requesting https://dns.google:443/dns-query: Get \"https://dns.google:443/dns-query?dns=AAABAAABAAAAAAAAE3JyMy0tLXNuLWlwb3h1LXVtYmsLZ29vZ2xldmlkZW8DY29tAAABAAE\": context deadline exceeded"
time="2024-10-06T02:47:29.1573306Z" level=debug msg="[https://dns.google:443/dns-query] using HTTP/2 for this upstream: <nil>"
time="2024-10-06T02:47:29.157455376Z" level=debug msg="re-creating the http client due to requesting https://dns.cloudflare.com:443/dns-query: Get \"https://dns.cloudflare.com:443/dns-query?dns=AAABAAABAAAAAAAAE3JyMy0tLXNuLWlwb3h1LXVtYmsLZ29vZ2xldmlkZW8DY29tAAABAAE\": context deadline exceeded"
time="2024-10-06T02:47:29.157525852Z" level=debug msg="[https://dns.cloudflare.com:443/dns-query] using HTTP/2 for this upstream: <nil>"
time="2024-10-06T02:47:29.157717372Z" level=debug msg="re-creating the http client due to requesting https://dns.cloudflare.com:443/dns-query: Get \"https://dns.cloudflare.com:443/dns-query?dns=AAABAAABAAAAAAAAE3JyMy0tLXNuLWlwb3h1LXVtYmsLZ29vZ2xldmlkZW8DY29tAAABAAE\": context deadline exceeded"
time="2024-10-06T02:47:29.15781438Z" level=debug msg="[https://dns.cloudflare.com:443/dns-query] using HTTP/2 for this upstream: <nil>"
time="2024-10-06T02:47:29.15777592Z" level=debug msg="re-creating the http client due to requesting https://dns.google:443/dns-query: Get \"https://dns.google:443/dns-query?dns=AAABAAABAAAAAAAAE3JyMy0tLXNuLWlwb3h1LXVtYmsLZ29vZ2xldmlkZW8DY29tAAABAAE\": context deadline exceeded"
time="2024-10-06T02:47:29.157926052Z" level=debug msg="[https://dns.google:443/dns-query] using HTTP/2 for this upstream: <nil>"
time="2024-10-06T02:47:29.158107684Z" level=debug msg="[DNS Server] Exchange ;rr3---sn-ipoxu-umbk.googlevideo.com.\tIN\t A failed: all DNS requests failed, first error: requesting https://dns.cloudflare.com:443/dns-query: Get \"https://dns.cloudflare.com:443/dns-query?dns=AAABAAABAAAAAAAAE3JyMy0tLXNuLWlwb3h1LXVtYmsLZ29vZ2xldmlkZW8DY29tAAABAAE\": context deadline exceeded"
time="2024-10-06T02:47:29.158312908Z" level=debug msg="[DNS] resolve rr3---sn-ipoxu-umbk.googlevideo.com A from udp://8.8.8.8:53"
time="2024-10-06T02:47:29.158427808Z" level=debug msg="[DNS Server] Exchange ;rr3---sn-ipoxu-umbk.googlevideo.com.\tIN\t A failed: all DNS requests failed, first error: requesting https://dns.cloudflare.com:443/dns-query: Get \"https://dns.cloudflare.com:443/dns-query?dns=AAABAAABAAAAAAAAE3JyMy0tLXNuLWlwb3h1LXVtYmsLZ29vZ2xldmlkZW8DY29tAAABAAE\": context deadline exceeded"
time="2024-10-06T02:47:29.158544712Z" level=debug msg="[DNS] resolve rr3---sn-ipoxu-umbk.googlevideo.com A from udp://114.114.114.114:53"
time="2024-10-06T02:47:29.1585549Z" level=debug msg="[DNS] resolve rr3---sn-ipoxu-umbk.googlevideo.com A from udp://1.1.1.1:53"
time="2024-10-06T02:47:29.158576704Z" level=debug msg="[DNS] resolve rr3---sn-ipoxu-umbk.googlevideo.com A from udp://119.29.29.29:53"
time="2024-10-06T02:47:29.16259992Z" level=debug msg="[DNS] rr3---sn-ipoxu-umbk.googlevideo.com --> [103.200.30.143] A from udp://114.114.114.114:53"
time="2024-10-06T02:47:29.16278382Z" level=debug msg="[DNS] resolve rr3---sn-ipoxu-umbk.googlevideo.com A from https://dns.google:443/dns-query"
time="2024-10-06T02:47:29.162979408Z" level=debug msg="[DNS] resolve rr3---sn-ipoxu-umbk.googlevideo.com A from https://dns.cloudflare.com:443/dns-query"
time="2024-10-06T02:47:29.163082584Z" level=debug msg="[DNS] cache hit dns.google --> [8.8.4.4 8.8.8.8] A, expire at 2024-10-06 02:55:35"
time="2024-10-06T02:47:29.163242304Z" level=debug msg="[DNS] cache hit dns.cloudflare.com --> [104.16.133.229 104.16.132.229] A, expire at 2024-10-06 02:48:51"

#===================== 最近运行日志获取完成(自动切换为silent模式) =====================#

#===================== 活动连接信息 =====================#

1. SourceIP:【192.168.10.202】 - Host:【mail.tencent.com】 - DestinationIP:【112.86.128.91】 - Network:【tcp】 - RulePayload:【tencent.com】 - Lastchain:【DIRECT】
2. SourceIP:【192.168.10.202】 - Host:【aps.amap.com】 - DestinationIP:【49.79.227.241】 - Network:【tcp】 - RulePayload:【amap.com】 - Lastchain:【DIRECT】
3. SourceIP:【192.168.10.209】 - Host:【mail.azroad.com】 - DestinationIP:【103.129.255.182】 - Network:【tcp】 - RulePayload:【azroad.com】 - Lastchain:【DIRECT】
4. SourceIP:【192.168.10.202】 - Host:【Empty】 - DestinationIP:【119.147.19.76】 - Network:【tcp】 - RulePayload:【cn】 - Lastchain:【DIRECT】
5. SourceIP:【192.168.10.202】 - Host:【connect.rom.miui.com】 - DestinationIP:【118.26.253.72】 - Network:【tcp】 - RulePayload:【cn】 - Lastchain:【DIRECT】
6. SourceIP:【192.168.10.202】 - Host:【metok.sys.miui.com】 - DestinationIP:【220.181.52.36】 - Network:【tcp】 - RulePayload:【cn】 - Lastchain:【DIRECT】
7. SourceIP:【192.168.10.209】 - Host:【appleimap.126.com】 - DestinationIP:【111.124.203.46】 - Network:【tcp】 - RulePayload:【cn】 - Lastchain:【DIRECT】
8. SourceIP:【192.168.10.202】 - Host:【www.googleapis.com】 - DestinationIP:【172.217.12.106】 - Network:【tcp】 - RulePayload:【google】 - Lastchain:【V1-俄罗斯01 CDN隧道 1.2x】
9. SourceIP:【192.168.10.209】 - Host:【g.whatsapp.net】 - DestinationIP:【157.240.22.54】 - Network:【tcp】 - RulePayload:【whatsapp.net】 - Lastchain:【V2-PRO 香港B 4x】
10. SourceIP:【192.168.10.209】 - Host:【csp.withgoogle.com】 - DestinationIP:【142.250.188.17】 - Network:【udp】 - RulePayload:【google】 - Lastchain:【V2-台湾11 套娃 中继 1.5x】
11. SourceIP:【192.168.10.209】 - Host:【clientservices.googleapis.com】 - DestinationIP:【180.163.151.162】 - Network:【tcp】 - RulePayload:【google】 - Lastchain:【V2-PRO 香港A 4x】
12. SourceIP:【192.168.10.202】 - Host:【flash.sec.miui.com】 - DestinationIP:【220.181.52.19】 - Network:【tcp】 - RulePayload:【cn】 - Lastchain:【DIRECT】
13. SourceIP:【192.168.10.209】 - Host:【csp.withgoogle.com】 - DestinationIP:【142.250.188.17】 - Network:【udp】 - RulePayload:【google】 - Lastchain:【V2-新加坡06 套娃 中继 1.5x】
14. SourceIP:【192.168.10.209】 - Host:【imap.qq.com】 - DestinationIP:【183.47.101.192】 - Network:【tcp】 - RulePayload:【qq.com】 - Lastchain:【DIRECT】
15. SourceIP:【192.168.10.209】 - Host:【api.ipify.org】 - DestinationIP:【104.26.12.205】 - Network:【tcp】 - RulePayload:【】 - Lastchain:【V2-PRO 澳洲01 | 7x】
16. SourceIP:【192.168.10.209】 - Host:【Empty】 - DestinationIP:【183.47.122.25】 - Network:【tcp】 - RulePayload:【cn】 - Lastchain:【DIRECT】
17. SourceIP:【192.168.10.209】 - Host:【imap.qq.com】 - DestinationIP:【183.47.101.192】 - Network:【tcp】 - RulePayload:【qq.com】 - Lastchain:【DIRECT】
18. SourceIP:【192.168.10.202】 - Host:【mmbiz.qpic.cn】 - DestinationIP:【61.160.209.111】 - Network:【tcp】 - RulePayload:【qpic.cn】 - Lastchain:【DIRECT】
19. SourceIP:【192.168.10.209】 - Host:【mtalk.google.com】 - DestinationIP:【142.251.2.188】 - Network:【tcp】 - RulePayload:【google】 - Lastchain:【V2-PRO 英国01 6x】
20. SourceIP:【192.168.10.209】 - Host:【imap.qq.com】 - DestinationIP:【183.47.101.192】 - Network:【tcp】 - RulePayload:【qq.com】 - Lastchain:【DIRECT】
21. SourceIP:【192.168.10.209】 - Host:【appleimap.126.com】 - DestinationIP:【111.124.203.46】 - Network:【tcp】 - RulePayload:【cn】 - Lastchain:【DIRECT】
22. SourceIP:【192.168.10.209】 - Host:【Empty】 - DestinationIP:【103.195.103.66】 - Network:【udp】 - RulePayload:【】 - Lastchain:【V1-美国03 隧道 1.5x】
23. SourceIP:【192.168.10.209】 - Host:【Empty】 - DestinationIP:【124.239.14.170】 - Network:【tcp】 - RulePayload:【cn】 - Lastchain:【DIRECT】
24. SourceIP:【192.168.10.209】 - Host:【imap.qq.com】 - DestinationIP:【183.47.101.192】 - Network:【tcp】 - RulePayload:【qq.com】 - Lastchain:【DIRECT】
25. SourceIP:【192.168.10.202】 - Host:【mmbiz.qpic.cn】 - DestinationIP:【61.160.209.111】 - Network:【tcp】 - RulePayload:【qpic.cn】 - Lastchain:【DIRECT】
26. SourceIP:【192.168.10.209】 - Host:【config.extension.grammarly.com】 - DestinationIP:【18.155.192.59】 - Network:【tcp】 - RulePayload:【】 - Lastchain:【V2-PRO 巴西01 7x】
27. SourceIP:【192.168.10.209】 - Host:【www.youtube.com】 - DestinationIP:【142.251.46.238】 - Network:【tcp】 - RulePayload:【youtube】 - Lastchain:【V1-台湾01 隧道 1.5x】
28. SourceIP:【192.168.10.209】 - Host:【appleimap.163.com】 - DestinationIP:【111.124.203.45】 - Network:【tcp】 - RulePayload:【163.com】 - Lastchain:【DIRECT】
29. SourceIP:【192.168.10.209】 - Host:【alive.github.com】 - DestinationIP:【140.82.114.25】 - Network:【tcp】 - RulePayload:【github】 - Lastchain:【V1-美国 隧道 均衡负载 动态IP 1.3x】
30. SourceIP:【192.168.10.209】 - Host:【imap.qq.com】 - DestinationIP:【183.47.101.192】 - Network:【tcp】 - RulePayload:【qq.com】 - Lastchain:【DIRECT】
31. SourceIP:【192.168.10.209】 - Host:【apac-china-courier-4.push-apple.com.akadns.net】 - DestinationIP:【17.57.145.152】 - Network:【tcp】 - RulePayload:【akadns.net】 - Lastchain:【DIRECT】
32. SourceIP:【192.168.10.209】 - Host:【imap.qq.com】 - DestinationIP:【183.47.101.192】 - Network:【tcp】 - RulePayload:【qq.com】 - Lastchain:【DIRECT】
33. SourceIP:【192.168.10.202】 - Host:【findermp.video.qq.com】 - DestinationIP:【61.160.231.193】 - Network:【tcp】 - RulePayload:【qq.com】 - Lastchain:【DIRECT】
34. SourceIP:【192.168.10.209】 - Host:【ssl.gstatic.com】 - DestinationIP:【203.208.40.34】 - Network:【tcp】 - RulePayload:【gstatic.com】 - Lastchain:【V2-PRO 香港B 4x】
35. SourceIP:【192.168.10.202】 - Host:【tracking.miui.com】 - DestinationIP:【220.181.106.234】 - Network:【tcp】 - RulePayload:【cn】 - Lastchain:【DIRECT】
36. SourceIP:【192.168.10.209】 - Host:【Empty】 - DestinationIP:【103.195.103.66】 - Network:【udp】 - RulePayload:【】 - Lastchain:【V1-美国01 隧道 1.5x】
37. SourceIP:【192.168.10.202】 - Host:【Empty】 - DestinationIP:【119.147.19.76】 - Network:【tcp】 - RulePayload:【cn】 - Lastchain:【DIRECT】
38. SourceIP:【192.168.10.209】 - Host:【csp.withgoogle.com】 - DestinationIP:【142.250.188.17】 - Network:【tcp】 - RulePayload:【google】 - Lastchain:【V2-香港B 隧道 1.6x】
39. SourceIP:【192.168.10.202】 - Host:【Empty】 - DestinationIP:【180.102.49.55】 - Network:【tcp】 - RulePayload:【cn】 - Lastchain:【DIRECT】

### OpenClash Config

_No response_

### Expected Behavior

希望能顺畅上网，不受DNS解析影响

### Additional Context

_No response_

试一下在Default-NameServer那里添加“119.29.29.29”的dns服务器，把"节点域名解析"的勾打上后，保存并应用试试
目前发现的情况是：节点刚被[google]选择，后面就接着命中一条 GEOIP,CN DIRECT规则

redir-host模式需要你的fallback里的DNS服务器直连能够访问
勾选DNS覆写设置的遵循规则即可，DNS会按照规则走代理，如果DNS服务器没按规则走代理就自定义一下

试一下在Default-NameServer那里添加“119.29.29.29”的dns服务器，把"节点域名解析"的勾打上后，保存并应用试试 目前发现的情况是：节点刚被[google]选择，后面就接着命中一条 GEOIP,CN DIRECT规则

已经配置上这个IP了，目前使用的是fake-ip模式可以上网，但是自定义规则里面的域名不起作用。如果切换到redir-host模式则支持域名不使用clash内核

redir-host模式需要你的fallback里的DNS服务器直连能够访问
勾选DNS覆写设置的遵循规则即可，DNS会按照规则走代理，如果DNS服务器没按规则走代理就自定义一下

以前一直不知道这个“遵循规则”干啥用，不知道是否有对应的文档跟随新版本发布

按照上面的指导，好像问题解决了，感谢各位

redir-host模式需要你的fallback里的DNS服务器直连能够访问
勾选DNS覆写设置的遵循规则即可，DNS会按照规则走代理，如果DNS服务器没按规则走代理就自定义一下

以前一直不知道这个“遵循规则”干啥用，不知道是否有对应的文档跟随新版本发布

看运行配置应该是设置跟节点域名解析有关，勾选了之后需要设置节点域名解析dns地址

今天我也更新了0.46.033，然后梯子就不能用了，这个问题确实还没有解决。
我删除了0.46.033，重新安装了0.46.31，然后把覆写设置里的DNS设置，设置成“自定义上游DNS” ‘遵循规则’，还有“追加默认dns”都打上勾，然后114.114.114.114，119.29.29.29，223.5.5.5这些常用的DNS都设置好，然后问题就解决了。
这个0.46.033感觉DNS解析有问题，希望UP主如果暂时解决不了，那不如下个新版本直接回滚盗0.46.31，起码那个版本可以正常使用

今天我也更新了0.46.033，然后梯子就不能用了，这个问题确实还没有解决。 我删除了0.46.033，重新安装了0.46.31，然后把覆写设置里的DNS设置，设置成“自定义上游DNS” ‘遵循规则’，还有“追加默认dns”都打上勾，然后114.114.114.114，119.29.29.29，223.5.5.5这些常用的DNS都设置好，然后问题就解决了。 这个0.46.033感觉DNS解析有问题，希望UP主如果暂时解决不了，那不如下个新版本直接回滚盗0.46.31，起码那个版本可以正常使用

你看看自己说的是什么......不会设置教op回滚... 0.46.040 日志时间格式还有问题...是不是也要回滚呢？

今天我也更新了0.46.033，然后梯子就不能用了，这个问题确实还没有解决。 我删除了0.46.033，重新安装了0.46.31，然后把覆写设置里的DNS设置，设置成“自定义上游DNS” ‘遵循规则’，还有“追加默认dns”都打上勾，然后114.114.114.114，119.29.29.29，223.5.5.5这些常用的DNS都设置好，然后问题就解决了。 这个0.46.033感觉DNS解析有问题，希望UP主如果暂时解决不了，那不如下个新版本直接回滚盗0.46.31，起码那个版本可以正常使用

你看看自己说的是什么......自己不会设置却教op回滚... 0.46.040 日志时间格式还有问题...是不是也要回滚呢？

我之前根本都不需要设置覆写DNS，之前的版本不存在这个问题，不是我不会设置，我也是看了上面人家的解决方法尝试之后才解决的。分享出来只是给遇到问题的人一个解决方法，毕竟我也是个建议，有问题的版本debug分厂费时费力，回滚是最安全的。

0.46.042也有这个问题，0.46.040倒是正常

0.46.042也有这个问题，0.46.040倒是正常

我没测试过dev版本，但我把软件版本重装0.46.031，然后恢复所有默认设置之后可以正常运行了，还是0.33版本之后的这个DNS解析有问题。

我发现错怪0.46.033了，不是客户端的问题，还是内核的问题，最新的alpha-g08dcef8的meta内核是造成问题的原因，
我把meta内核替换成V1.18.3以下版本就没问题了，我现在用的V1.18.1，大家可以试一下这个思路，不是openclash客户端的问题

我发现错怪0.46.033了，不是客户端的问题，还是内核的问题，最新的alpha-g08dcef8的meta内核是造成问题的原因， 我把meta内核替换成V1.18.3以下版本就没问题了，我现在用的V1.18.1，大家可以试一下这个思路，不是openclash客户端的问题

我降级到1.18.2之后好像还是不行么？redir-host，tun模式。

我发现错怪0.46.033了，不是客户端的问题，还是内核的问题，最新的alpha-g08dcef8的meta内核是造成问题的原因， 我把meta内核替换成V1.18.3以下版本就没问题了，我现在用的V1.18.1，大家可以试一下这个思路，不是openclash客户端的问题

我降级到1.18.2之后好像还是不行么？redir-host，tun模式。

换了个机场貌似正常了，但是奈飞地区节点识别又有问题，新加坡变成了香港。

我发现错怪0.46.033了，不是客户端的问题，还是内核的问题，最新的alpha-g08dcef8的meta内核是造成问题的原因， 我把meta内核替换成V1.18.3以下版本就没问题了，我现在用的V1.18.1，大家可以试一下这个思路，不是openclash客户端的问题

大佬，去哪里可以搞到1.18.1的内核，下载放进到目录下识别不了

我发现错怪0.46.033了，不是客户端的问题，还是内核的问题，最新的alpha-g08dcef8的meta内核是造成问题的原因， 我把meta内核替换成V1.18.3以下版本就没问题了，我现在用的V1.18.1，大家可以试一下这个思路，不是openclash客户端的问题

大佬，去哪里可以搞到1.18.1的内核，下载放进到目录下识别不了

https://github.com/MetaCubeX/mihomo/releases/tag/v1.18.1

我也是这个问题，最近更新成0.46.033后就不行了。

现在我安装新OpenWrt的OpenClash也安装不了了，内核自己下载不了，上传又识别不出来

我发现错怪0.46.033了，不是客户端的问题，还是内核的问题，最新的alpha-g08dcef8的元内核是造成问题的原因，我把元内核替换成V1.18.3以下版本还没问题了，我现在使用V1.18.1，大家可以试一下这个思路，不是openclash客户端的问题

我降级到1.18.2之后想要还是不行？redir-host，tun模式。

我这边不是你说的这个内核，最新的内核下redir-host，tun模式依旧访问youtube可以但是300内就锁死了，最后发现修改-网络栈类型-gVisor可以其他两个就锁死300，其他两个如果运行redir- TUN混合  就没问题

我用的是高大全，升级了最新0.46.059

【勾选】*自定义上游 DNS 服务器
【勾选】遵循规则(respect-rules)
NameServer 中 如果第一行是114.114.114.114, 需要删除，单独不勾也不行；

原来是版本更新的原因，害得我重装了pve,到最后也没解决，现在试着 @gamert 的方法可以

authors: HenryLuoCN JPLM123 LongShengWen gamert gemnioo izanehuang magickual-5 vernesong xianren78 xiaoyangdkj youzhi1233 yuyedaidao

repo: vernesong/OpenClash


text:
Provide Automatic-Module-Name attribute in MANIFEST.MF

Feature Description
Provide Automatic-Module-Name attribute in MANIFEST.MF file.
Use cases
Provides a reliable module name, instead of using the name derived from the JAR file, without having to target Java 9+ and/or use module-info java/class file. This can be used until there is a module-info file.
Contribution
If this feature request were to be approved I would be happy to work on it.
I believe that this change would require some additional configuration in the pom.xml maven jar plugin, for example:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <configuration>
        <archive>
            <manifestEntries>
                <Automatic-Module-Name>io.vertx.core</Automatic-Module-Name>
            </manifestEntries>
        </archive>
    </configuration>
</plugin>

Naming Scheme
When choosing module names, these rules should be taken into consideration.
Table of automatic module names and their status:
Notes:

The deprecated MySQL / PostgreSQL clients are not included.
AMPQ Bridge is not included as it will be removed in Vertx 4.
Module names cannot contain -, .. or Java keywords, as this article suggests.

Core

Component
Artifact id
Automatic Module Name
Status

Vertx core
vertx-core
io.vertx.core
Merged

Web

Component
Artifact id
Automatic Module Name
Status

Vertx web
vertx-web
io.vertx.web
Merged

Vertx web client
vertx-web-client
io.vertx.web.client
Merged

Vertx web common
vertx-web-common
io.vertx.web.common
Merged

Vertx web OpenAPI
vertx-web-openapi
io.vertx.web.openapi
Merged

Vertx web validation
vertx-web-validation
io.vertx.web.validation
Merged

Vertx web templates
vertx-web-templ-[x]
io.vertx.web.template.[x]
Merged

Vertx web API
vertx-web-api-contract
io.vertx.web.apicontract
Merged

Vertx web API service
vertx-web-api-service
io.vertx.web.apiservice
Merged

Web GraphQL Handler
vertx-web-graphql
io.vertx.web.graphql
Merged

Web sstores
vertx-web-sstore-[x]
io.vertx.web.sstore.[x]
Merged

Data access

Component
Artifact id
Automatic Module Name
Status

MongoDB client
vertx-mongo-client
io.vertx.client.mongo
Merged

Redis client
vertx-redis-client
io.vertx.client.redis
Merged

Cassandra client
vertx-cassandra-client
io.vertx.client.cassandra
Merged

Common SQL interfaces
vertx-sql-common
N/A
Merged

JDBC client
vertx-jdbc-client
io.vertx.client.jdbc
Merged

Reactive SQL clients

Component
Artifact id
Automatic Module Name
Status

SQL client
vertx-sql-client
io.vertx.client.sql
Merged

DB2 client
vertx-db2-client
io.vertx.client.sql.db2
Merged

MSSQL client
vertx-mssql-client
io.vertx.client.sql.mssql
Merged

MySQL client
vertx-mysql-client
io.vertx.client.sql.mysql
Merged

PostgreSQL client
vertx-pg-client
io.vertx.client.sql.pg
Merged

Templates
vertx-client-sql-templates
io.vertx.client.sql.templates
Merged

Reactive

Component
Artifact id
Automatic Module Name
Status

Reactive Streams
vertx-reactive-streams
io.vertx.reactivestreams
Merged

Vertx Sync
vertx-sync
N/A
-

Kotlin coroutines
vertx-lang-kotlin-coroutines
io.vertx.kotlin.coroutines
Merged

Reactive Extensions

Component
Artifact id
Automatic Module Name
Status

Rx code generator
vertx-rx-gen
io.vertx.rx.gen
Postponed

RxJava code generator
vertx-rx-java-gen
io.vertx.rx.java.gen
Postponed

RxJava API
vertx-rx-java
io.vertx.rx.java
Postponed

RxJava2 Code Generator
vertx-rx-java2-gen
io.vertx.rx.java2.gen
Postponed

RxJava2 API
vertx-rx-java2
io.vertx.rx.java2
Postponed

JUnit 5 RxJava support
vertx-junit5-rx-java
io.vertx.junit5.rx.java
Postponed

JUnit 5 RxJava2 support
vertx-junit5-rx-java2
io.vertx.junit5.rx.java2
Postponed

Microservices

Component
Artifact id
Automatic Module Name
Status

Circuit Breaker
vertx-circuit-breaker
io.vertx.circuitbreaker
Merged

Vertx Config

Component
Artifact id
Automatic Module Name
Status

Vertx Config
vertx-config
io.vertx.config
Merged

Consul
vertx-config-consul
io.vertx.config.consul
Merged

Git
vertx-config-git
io.vertx.config.git
Merged

HOCON
vertx-config-hocon
io.vertx.config.hocon
Merged

Kubernetes ConfigMap
vertx-config-kubernetes-configmap
io.vertx.config.configmap
Merged

Redis
vertx-config-redis
io.vertx.config.redis
Merged

Spring config server
vertx-config-spring-config-server
io.vertx.config.springconfigserver
Merged

Vault
vertx-config-vault
io.vertx.config.vault
Merged

YAML
vertx-config-yaml
io.vertx.config.yaml
Merged

Zookeeper
vertx-config-zookeeper
io.vertx.config.zookeeper
Merged

Vertx Service Discovery

Component
Artifact id
Automatic Module Name
Status

Service Discovery
vertx-service-discovery
io.vertx.servicediscovery
Merged

Consul Backend
vertx-service-discovery-backend-consul
io.vertx.servicediscovery.backend.consul
Merged

Redis Backend
vertx-service-discovery-backend-redis
io.vertx.servicediscovery.backend.redis
Merged

Zookeeper Backend
vertx-service-discovery-backend-zookeeper
io.vertx.servicediscovery.backend.zookeeper
Merged

Consul Bridge
vertx-service-discovery-bridge-consul
io.vertx.servicediscovery.bridge.consul
Merged

Docker links Bridge
vertx-service-discovery-bridge-docker-links
io.vertx.servicediscovery.bridge.dockerlinks
Merged

Docker Bridge
vertx-service-discovery-bridge-docker
io.vertx.servicediscovery.bridge.docker
Merged

Kubernetes Bridge
vertx-service-discovery-bridge-kubernetes
io.vertx.servicediscovery.bridge.kubernetes
Merged

Zookeeper Bridge
vertx-service-discovery-bridge-zookeeper
io.vertx.servicediscovery.bridge.zookeeper
Merged

MQTT

Component
Artifact id
Automatic Module Name
Status

Vertx MQTT
vertx-mqtt
io.vertx.mqtt
Merged

Authentication and Authorisation

Component
Artifact id
Automatic Module Name
Status

Auth Common
vertx-auth-common
io.vertx.auth.common
Merged

JDBC Auth
vertx-auth-jdbc
io.vertx.auth.jdbc
Merged

JWT Auth
vertx-auth-jwt
io.vertx.auth.jwt
Merged

JWT
vertx-jwt
N/A
Artifact code merged into vertx-auth-common

LDAP
vertx-auth-ldap
io.vertx.auth.ldap
Merged

Shiro Auth
vertx-auth-shiro
io.vertx.auth.shiro
Merged

MongoDB Auth
vertx-auth-mongo
io.vertx.auth.mongo
Merged

OAuth 2
vertx-auth-oauth2
Io.vertx.auth.oauth2
Merged

Properties
vertx-auth-properties
Io.vertx.auth.properties
Merged

.htdigest Auth
vertx-auth-htdigest
io.vertx.auth.htdigest
Merged

.htpasswd
vertx-auth-htpasswd
io.vertx.auth.htpasswd
Merged

SQL Auth
vertx-auth-sql
io.vertx.auth.sql
Merged

WebAuthN
vertx-auth-webauthn
io.vertx.auth.webauthn
Merged

Messaging

Component
Artifact id
Automatic Module Name
Status

AMQP Client
vertx-amqp-client
io.vertx.client.amqp
Merged

STOMP
vertx-stomp
io.vertx.stomp
Merged

RabbitMQ Client
vertx-rabbitmq-client
io.vertx.client.rabbitmq
Merged

Vert.x Proton
vertx-proton
io.vertx.proton
Merged

Integration

Component
Artifact id
Automatic Module Name
Status

Kafka Client
vertx-kafka-client
io.vertx.client.kafka
Merged

Mail Client
vertx-mail-client
io.vertx.client.mail
Merged

Consul Client
vertx-consul-client
io.vertx.client.consul
Merged

JCA Adaptor

Component
Artifact id
Automatic Module Name
Status

JCA Adapter
vertx-jca-adapter
N/A
-

JCA API
vertx-jca-api
N/A
-

Event Bus Bridge

Component
Artifact id
Automatic Module Name
Status

Common
vertx-bridge-common
io.vertx.eventbusbridge.common
Merged

TCP Event Bus Bridge
vertx-tcp-eventbus-bridge
io.vertx.eventbusbridge.tcp
Under discussion

Camel Bridge
vertx-camel-bridge
io.vertx.eventbusbridge.camel
Under discussion

Devops

Component
Artifact id
Automatic Module Name
Status

Dropwizard metrics
vertx-dropwizard-metrics
io.vertx.metrics.dropwizard
Merged

Micrometer
vertx-micrometer-metrics
io.vertx.metrics.micrometer
Merged

Health Check
vertx-health-check
io.vertx.healthcheck
Merged

Shell
vertx-shell
io.vertx.shell
Merged

Docker
vertx-stack-docker
N/A
-

Stack Manager
vertx-stack-manager
N/A
-

Tracing

Component
Artifact id
Automatic Module Name
Status

Zipkin
vertx-zipkin
io.vertx.tracing.zipkin
Merged

Opentracing
vertx-opentracing
io.vertx.tracing.opentracing
Merged

Testing

Component
Artifact id
Automatic Module Name
Status

Vertx Unit
vertx-unit
io.vertx.testing.unit
Merged

JUnit 5
vertx-junit5
io.vertx.testing.junit5
Merged

Clustering

Component
Artifact id
Automatic Module Name
Status

Hazelcast
vertx-hazelcast
io.vertx.clustermanager.hazelcast
Merged

Infinispan
vertx-infinispan
io.vertx.clustermanager.infinispan
Merged

Apache Ignite
vertx-ignite
io.vertx.clustermanager.ignite
Merged

Zookeeper
vertx-zookeeper
io.vertx.clustermanager.zookeeper
Merged

Services

Component
Artifact id
Automatic Module Name
Status

Service Proxies
vertx-service-proxy
io.vertx.serviceproxy
Merged

Service Factories
vertx-service-factory
N/A
-

HTTP Service Factory
vertx-http-service-factory
N/A
-

SockJs Service Proxy
vertx-sockjs-service-proxy
io.vertx.serviceproxy.sockjs
Merged

Maven Service Factory
vertx-maven-service-factory
N/A
-

gRPC

Component
Artifact id
Automatic Module Name
Status

gRPC
vertx-grpc
io.vertx.grpc
Merged

gRPC protoc plugin
vertx-grpc-protoc-plugin
N/A
-

Internal Magic

Component
Artifact id
Automatic Module Name
Status

Codegen
vertx-codegen
io.vertx.codegen
Merged

Docgen
vertx-docgen
N/A
-

Codetrans
vertx-codetrans
N/A
-

Bridge Common
vertx-bridge-common
io.vertx.eventbusbridge.common
Merged

Distro Stack Manager
vertx-stack-manager
io.vertx.stack.manager
N/A

Languages

Component
Artifact id
Automatic Module Name
Status

Groovy lang
vertx-lang-groovy
N/A
N/A

Kotlin

Component
Artifact id
Automatic Module Name
Status

Kotlin gen
vertx-lang-kotlin-gen
io.vertx.kotlin.gen
Under discussion

Kotling lang
vertx-lang-kotlin
io.vertx.kotlin
Merged

Scala

Component
Artifact id
Automatic Module Name
Status

Scala lang codegen
vertx-lang-scala-codegen
N/A
-

Scala language support
vertx-lang-scala_2.13
N/A
-

I believe we cannot use package names because some package have the ext name and some don't, which is inconsistent. So I would like module to be rather named after the related Maven artifact, likely prefixed with io.vertx instead of vertx-, e.g

vertx-core: io.vertx.core
vertx-web: io.vertx.web
vertx-web-client: io.vertx.web.client

That being said, are we allowed to have a module named "io.vertx.ext.web" and another one named "io.vertx.ext.web.client" ?
There is in the rules defines by https://sormuras.github.io/blog/2018-11-16-invalid-automatic-module-names#how-to-name-a-module a rule I do not understand: Creating a module with a particular name takes ownership of that package name and everything beneath it.:

what is the supposed relationship between module names and package names ? I think there is not such relationship, i.e one can create a module named foo.bar that contains a com.whatever package
what means everything beneath it ?

I believe that there is no issue with having automatic modules/submodules, such as io.vertx.web and io.vertx.web.client as long as they do not have any split packages between them.
A thing to note: Say you have 2 artifacts/jars/libraries A and B which have a split package P (they both have classes in package P).
If they do not have a module name (via MANIFEST property) and are placed on the module path, then they will get mashed up into the unnamed module. The client JPMS application will run.
If however, they had module names (via MANIFEST), they would each become a (automatic) module. The client JPMS application will not run in this case because of the split package. This outcome would be the same if module A would be named but module B would not have a name since they will end up in different modules again.
Client code can require/use both io.vertx.web and io.vertx.web.client as long as the 2 jars/artifacts/modules do not have any split packages.
In regards to the ownership of the package name and everything beneath it - What I understand from this is that if you choose the package name io.vertx then you are responsible for creating unique modules under that name (io.vertx.x.y.z) that do not have split packages.
There is no strict relationship between the module name and the package name. It is only a recommandation that facilitates module name uniqueness.
Considering your example, you can indeed create a module foo.bar that contains a com.whatever package. Since you own whatever.com, no one else would create classes under that package , but they could use the module name foo.bar, say with com.something.else package. A client application would not be able however to use both modules at the same time, even thought there are totally different packages in the 2 modules and that is because the modules have the same name.
To summarize, I believe that the requirement is to have unique modules names under io.vertx that do not have split packages. Maybe more useful/detailed information could be found here: https://blog.joda.org/2017/04/java-se-9-jpms-module-naming.html

So the rule Creating a module with a particular name takes ownership of that package name and everything beneath it. is not a JPMS rule to satisfy as I understand it ?

No, I believe it is not. You are right.

ok, so let's get first a proposal for providing automatic module names to vertx jars (when it makes sense) and then we can see how this can be achieved in the stack which will require to update the vertx-parent pom

I am not sure I understand. I think your suggestion is good, that is, the module name would be io.vertx.${processed-artifact-name}, where the processed artifact name would be the artifact name without the vertx- prefix and with - converted to . (i.e. the vertx-jdbc-client-<version> jar would have the module name io.vertx.jdbc.client)

by proposal I mean list all module names according to this convention and then see discuss this in community to see if there are issues with that

Ok, well here is the list so far ( I will edit this comment to keep the list up to date based on your suggestions )
Core

Component
Artifact id
Automatic Module Name

Vertx core
vertx-core
io.vertx.core

Web

Component
Artifact id
Automatic Module Name

Vertx web
vertx-web
io.vertx.web

Vertx web client
vertx-web-client
io.vertx.web.client

Vertx web API
vertx-web-api-contract
io.vertx.web.api.contract

Vertx web API service
vertx-web-api-service
io.vertx.web.api.service

Web GraphQL Handler
vertx-web-graphql
io.vertx.web.graphql

Data access
Note: I did not include the deprecated MySQL / PostgreSQL clients.

Component
Artifact id
Automatic Module Name

MongoDB client
vertx-mongo-client
io.vertx.mongo.client

Redis client
vertx-redis-client
io.vertx.redis.client

Cassandra client
vertx-cassandra-client
io.vertx.cassandra.client

Common SQL interfaces
vertx-sql-common
io.vertx.sql.common

JDBC client
vertx-jdbc-client
io.vertx.jdbc.client

Reactive SQL clients

Component
Artifact id
Automatic Module Name

DB2 client
vertx-db2-client
io.vertx.db2.client

MSSQL client
vertx-mssql-client
io.vertx.mssql.client

MySQL client
vertx-mysql-client
io.vertx.mysql.client

PostgreSQL client
vertx-pg-client
io.vertx.pg.client

SQL client
vertx-sql-client
io.vertx.sql.client

Reactive

Component
Artifact id
Automatic Module Name

Reactive Streams
vertx-reactive-streams
io.vertx.reactive.streams

Vertx Sync
vertx-sync
io.vertx.sync

Kotlin coroutines
vertx-lang-kotlin-coroutines
io.vertx.lang.kotlin.coroutines

Reactive Extensions

Component
Artifact id
Automatic Module Name

Rx code generator
vertx-rx-gen
io.vertx.rx.gen

RxJava code generator
vertx-rx-java-gen
io.vertx.rx.java.gen

RxJava API
vertx-rx-java
io.vertx.rx.java

RxJava2 Code Generator
vertx-rx-java2-gen
io.vertx.rx.java2.gen

RxJava2 API
vertx-rx-java2
io.vertx.rx.java2

JUnit 5 RxJava support
vertx-junit5-rx-java
io.vertx.junit5.rx.java

JUnit 5 RxJava2 support
vertx-junit5-rx-java2
io.vertx.junit5.rx.java2

Microservices

Component
Artifact id
Automatic Module Name

Circuit Breaker
vertx-circuit-breaker
io.vertx.circuit.breaker

Vertx Config

Component
Artifact id
Automatic Module Name

Vertx Config
vertx-config
io.vertx.config

Consul
vertx-config-consul
io.vertx.config.consul

Git
vertx-config-git
io.vertx.config.git

HOCON
vertx-config-hocon
io.vertx.config.hocon

Kubernetes ConfigMap
vertx-config-kubernetes-configmap
io.vertx.config.kubernetes.configmap

Redis
vertx-config-redis
io.vertx.config.redis

Spring config server
vertx-config-spring-config-server
io.vertx.config.spring.config.server

Vault
vertx-config-vault
io.vertx.config.vault

YAML
vertx-config-yaml
io.vertx.config.yaml

Zookeeper
vertx-config-zookeeper
io.vertx.config.zookeeper

Vertx Service Discovery

Component
Artifact id
Automatic Module Name

Service Discovery
vertx-service-discovery
io.vertx.service.discovery

Consul Backend
vertx-service-discovery-backend-consul
io.vertx.service.discovery.backend.consul

Redis Backend
vertx-service-discovery-backend-redis
io.vertx.service.discovery.backend.redis

Zookeeper Backend
vertx-service-discovery-backend-zookeeper
io.vertx.service.discovery.backend.zookeeper

Consul Bridge
vertx-service-discovery-bridge-consul
io.vertx.service.discovery.bridge.consul

Docker links Bridge
vertx-service-discovery-bridge-docker-links
io.vertx.service.discovery.bridge.docker.links

Docker Bridge
vertx-service-discovery-bridge-docker
io.vertx.service.discovery.bridge.docker

Kubernetes Bridge
vertx-service-discovery-bridge-kubernetes
io.vertx.service.discovery.bridge.kubernetes

Zookeeper Bridge
vertx-service-discovery-bridge-zookeeper
io.vertx.service.discovery.bridge.zookeeper

MQTT

Component
Artifact id
Automatic Module Name

Vertx MQTT
vertx-mqtt
io.vertx.mqtt

Authentication and Authorisation

Component
Artifact id
Automatic Module Name

Auth Common
vertx-auth-common
io.vertx.auth.common

JDBC Auth
vertx-auth-jdbc
io.vertx.auth.jdbc

JWT Auth
vertx-auth-jwt
io.vertx.auth.jwt

Shiro Auth
vertx-auth-shiro
io.vertx.auth.shiro

MongoDB Auth
vertx-auth-mongo
io.vertx.auth.mongo

OAuth 2
vertx-auth-oauth2
Io.vertx.auth.oauth2

.htdigest Auth
vertx-auth-htdigest
io.vertx.auth.htdigest

Messaging
Note: I did not include AMPQ Bridge as it will be removed in Vertx 4.

Component
Artifact id
Automatic Module Name

AMQP Client
vertx-amqp-client
io.vertx.amqp.client

STOMP
vertx-stomp
io.vertx.stomp

RabbitMQ Client
vertx-rabbitmq-client
io.vertx.rabbitmq.client

Integration
Note: The link to the Vertx Mail Client repo from the documentation page is broken.

Component
Artifact id
Automatic Module Name

Kafka Client
vertx-kafka-client
io.vertx.kafka.client

Mail Client
vertx-mail-client
io.vertx.mail.client

Consul Client
vertx-consul-client
io.vertx.consul.client

JCA Adaptor

Component
Artifact id
Automatic Module Name

JCA Adapter
vertx-jca-adapter
io.vertx.jca.adapter

JCA API
vertx-jca-api
io.vertx.jca.api

Event Bus Bridge

Component
Artifact id
Automatic Module Name

TCP Event Bus Bridge
vertx-tcp-eventbus-bridge
io.vertx.tcp.eventbus.bridge

Camel Bridge
vertx-camel-bridge
io.vertx.camel.bridge

Devops
Note: The link to the Vertx Health Check repo from the documentation page is broken.

Component
Artifact id
Automatic Module Name

Dropwizard metrics
vertx-dropwizard-metrics
io.vertx.dropwizard.metrics

Micrometer
vertx-micrometer-metrics
io.vertx.micrometer.metrics

Health Check
vertx-health-check
io.vertx.health.check

Shell
vertx-shell
io.vertx.shell

Docker
vertx-stack-docker
io.vertx.stack.docker

Stack Manager
vertx-stack-manager
io.vertx.stack.manager

Testing

Component
Artifact id
Automatic Module Name

Vertx Unit
vertx-unit
io.vertx.unit

JUnit 5
vertx-junit5
io.vertx.junit5

Clustering

Component
Artifact id
Automatic Module Name

Hazelcast
vertx-hazelcast
io.vertx.hazelcast

Infinispan
vertx-infinispan
io.vertx.infinispan

Apache Ignite
vertx-ignite
io.vertx.ignite

Zookeeper
vertx-zookeeper
io.vertx.zookeeper

Services
Note: The link to the SockJS Service Proxies repo from the documentation page is broken.

Component
Artifact id
Automatic Module Name

Service Proxies
vertx-service-proxy
io.vertx.service.proxy

Service Factories
vertx-service-factory
io.vertx.service.factory

HTTP Service Factory
vertx-http-service-factory
io.vertx.http.service.factory

SockJs Service Proxy
vertx-sockjs-service-proxy
io.vertx.sockjs.service.proxy

Maven Service Factory
vertx-maven-service-factory
io.vertx.maven.service.factory

gRPC

Component
Artifact id
Automatic Module Name

gRPC
vertx-grpc
io.vertx.grpc

gRPC protoc plugin
vertx-grpc-protoc-plugin
io.vertx.grpc.protoc.plugin

Internal Magic

Component
Artifact id
Automatic Module Name

Codegen
vertx-codegen
io.vertx.codegen

Docgen
vertx-docgen
io.vertx.docgen

Codetrans
vertx-codetrans
io.vertx.codetrans

Bridge Common
vertx-bridge-common
io.vertx.bridge.common

Distro Stack Manager
vertx-stack-manager
io.vertx.stack.manager

Languages

Component
Artifact id
Automatic Module Name

Groovy lang
vertx-lang-groovy
io.vertx.lang.groovy

JS lang gen
vertx-lang-js-gen
io.vertx.lang.js.gen

Ruby

Component
Artifact id
Automatic Module Name

Ruby lang gen
vertx-lang-ruby-gen
io.vertx.lang.ruby.gen

Ruby MVEL
vertx-lang-ruby-mvel
io.vertx.lang.ruby,mvel

Kotlin
Note: There are 2 repositories with kotlin coroutines?

Component
Artifact id
Automatic Module Name

Kotlin gen
vertx-lang-kotlin-gen
io.vertx.lang.kotlin.gen

Kotling lang
vertx-lang-kotlin
io.vertx.lang.kotlin

Scala

Component
Artifact id
Automatic Module Name

Scala lang codegen
vertx-lang-scala-codegen
io.vertx.lang.scala.codegen

Scala language support
vertx-lang-scala_2.13
io.vertx.lang.scala_2.13

Unclassified

Component
Artifact id
Automatic Module Name

Vert.x Proton
vertx-proton
io.vertx.proton

I might have added too many. Hopefully I did not miss any. You have a LOT of stuff :)

I think there are a few names we shall override, e.g

io.vertx.reactive.streams -> io.vertx.reactive_streams
io.vertx.sql.client -> io.vertx.sqlclient or io.vertx.sql_client

etc...

I think we can do both in parallel.
For the packaging, can we study the modification of the vertx-parent to have the automatic module name applied optionally ? i.e if we define a property in the pom.xml then there is an automatic module otherwise it is left outside (I believe there are some module that won't benefit from automatic module name such as vertx-lang-groovy).

Perhaps for keeping track of this we should use the wiki, is that possible to get PR on a GitHub wiki ?

Thank you for the prompt response @vietj . I will look into the change to the vertx-parent and raise a PR on the GitHub wiki and get back to you.

please do an RFC like page in wiki

I have created the RFC page, but I cannot push it to a remote branch in order to create PR because I do not have permission. I assumed that this is the wiki.
I have also looked into changing the parent pom so that when a property in the child pom is defined, then the module name is applied. Unfortunately, I could not find a way for this to work, since maven profiles cannot be activated by a property defined in a pom.xml, only via system property, file, etc, so the closest thing would be mvn package -Dautomatic.module=io.vertx.core.
In my opinion, it would be easier to just add the <automatic.module>io.vertx.whatever</automatic.module> as a maven property in the child pom and also add the jar plugin configuration in the child pom for the default-jar execution and not modify the parent pom at all.

@afloarea where are your changes ?

I have cloned the wiki and created a local branch on my machine but I cannot push the branch because I do not have permission to push to the wiki repo.
Is there a different way to contribute that I am not aware of?

let me investigate how the wiki thing work :-)

On 24 Apr 2020, at 19:45, Adrian Floarea notifications@github.com wrote:
I have cloned the wiki and created a local branch on my machine but I cannot push the branch because I do not have permission to push to the wiki repo.
Is there a different way to contribute that I am not aware of?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub https://github.com/vert-x3/issues/issues/524#issuecomment-619156009, or unsubscribe https://github.com/notifications/unsubscribe-auth/AABXDCTW6HXIPTBG3M7WZB3ROHF5FANCNFSM4MF7SADQ.

what if a problem should not have an automatic name ? e.g we have some jars which will never be modules.

@afloarea unfortunately the wiki access management of GitHub is quite weak, so the best I think is that you edit this issue content instead of commenting and we continue using this issue to discuss

what if a problem should not have an automatic name ? e.g we have some jars which will never be modules.

I agree, not every jar file needs an automatic module name.
My proposal is that based on the component/project table, a name is approved and marked as approved in the table. After that, a PR is made for only that component that will edit the pom.xml file of that project/component only. The PR would simply add an <automatic.module.name> property in the <properties> section of the pom.xml and add the additional jar-plugin configuration of the manifest and use that property. The PR would only affect the child pom.xml of the component, so only one component.
So, for example, say you approve the io.vertx.core name, then a PR would be made to the child pom.xml of the vertx-core component which will add the automatic module name. Upon merge, only the vertx-core jar would have an automatic module name.
If, for example, it is decided that the vertx-lang-groovy jar should remain without an automatic module name, then no PR is raised for that component's pom.xml file, and the table is simply updated with 'not applicable' or something similar and that's that. It will remain as is (i.e. without a name)
What do you think?

+1 Adrian

can you edit this topic and move here the table and add checks ?

Of course. You are referring to the table from above, right? When you say 'add checks' do you want me to add checkboxes or do you want me to mark some entries as checked / confirmed name.
I was thinking that you could confirm some of the names and I would update the table and with your approval I would start working on a PR for the confirmed names and possibly provide a link to the PR in the table.

@afloarea I mean in the first message of the issue you created
by check box I mean using this:

[ ] foo
[ ] bar

@vietj I have moved the table to the top and I have added check boxes as you suggested.

Hey @vietj . I have went ahead and raised a PR for adding automatic module name for vertx-core -> https://github.com/eclipse-vertx/vert.x/pull/3401
Could you please confirm other module names so that I may start working on those as well?
Also, would it be possible to shorten the contribution flow? I saw that for small changes it may be possible to contribute directly to master. It's a bit cumbersome to fork the project, create a branch with one commit with 2 additional lines and then raise a PR.

@afloarea for the name I think we need to do a meeting with the team and discuss that, e.g I feel that for clients we should maybe name to io.vertx.client.mongo rather than io.vertx.mongo.client

@afloarea I've setup an hangout meeting next Monday to agree on the name of modules, if you give me your email you can join the meeting

@vietj Thank you for the invite. My email is adrianfloarea07@yahoo.com

you should receive an invite.

On 7 May 2020, at 17:36, Adrian Floarea notifications@github.com wrote:
@vietj https://github.com/vietj Thank you for the invite. My email is adrianfloarea07@yahoo.com mailto:adrianfloarea07@yahoo.com
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub https://github.com/vert-x3/issues/issues/524#issuecomment-625330093, or unsubscribe https://github.com/notifications/unsubscribe-auth/AABXDCUW4TEQ2PRR7OHGZ5LRQLIQLANCNFSM4MF7SADQ.

See https://github.com/vert-x3/vertx-auth/issues/388

See https://github.com/vert-x3/vertx-sql-common/issues/69

@afloarea vertx 4 projects have been updated with new parent pom

Thanks @vietj . I have updated the PR for vertx-core. I will proceed in a similar fashion with the web artifacts.

@afloarea I updated the tables with more approvals

can you point out the pending PR to merge ?

@vietj The PR should appear on this issue. They are just above your comment where you say that you updated the tables.
Currently vertx-mongo-client has been merged, the redis, cassandra and jdbc clients have an open PR and the web artifactis also have an open PR, but I guess that is on hold until the openAPI gets merged.
Also, I have seen that you approved more service discovery artifacts. I forgot to update the suggested automatic module name for those that you approved and they were left with sevice.discovery in the module name instead of servicediscovery (without the dot). I will change them to the latter (just FYI, let me know if you did actually want them with the dot and I will change them back)
I will also update the table with any open PRs.

@afloarea I don't see any pending PR linked in this document, am I missing something ?

I am also updating the table as we speak.

@vietj  I have updated the table

@vietj I noticed you added Distro Stack Manager under 'Internal Magick'. Is this different than the stack manager under 'Devops'? Or did I made a mistake by putting it there?

I just meant that stack manager is something we don't really care about.

@afloarea I've just merged the vertx-jwt into vertx-auth-common as discussed in the issue. I think you are now able to work the vertx-auth modules without a problem!

@afloarea can we try getting the property in the parent pom for multi module project when it is possible ?

Thanks @pmlopes . I have raised a PR for auth.
@vietj Yes, I actually don't know why didn't I do that in the first place 😅. I have updated the auth and service discovery to use the parent pom. I will update the others as well

@vietj @pmlopes I can't build the jars for vertx-web anymore, so I coudn't test with the parent pom.
It fails to compile because it can't find io.vertx.ext.jwt.JWTOptions.
I did merge from upstream vertx-web

Ah, that's my bad, there's a reference to a class from the merged modules in auth. I'll fix it...

web should be building correctly now...

I tested web with parent pom and I updated the PR. Thank you @pmlopes :+1:

I believe I merged all the open PR @afloarea keep the PR flow coming in :-)

Merged all submitted PR's @afloarea

@vietj I have raised PRs for most of the approved names.
The ones missing are for kotlin. I have a question about that: should I only add only for kotlin lang and coroutines? or should I wait for the kotlin.gen one as well. Also, what about the vertx-kotlin-compiler? I did not add it to the table but I noticed it in the repository.
Also, the vertx-codegen was a bit different than the others because it's using the assembly plugin so I did not use the parent pom there (FYI).
Apart from these, I believe there are no other approved names, only postponed and marked as 'under discussion'.

for kotlin I think for now indeed we only add kotlin lang and coroutines indeed -  I merged all open PR's

kotlin done

@vietj since all the approved names have merged PRs, what's next? I assume this issue will remain open until the postponed/under discussion names are resolved too, right?
Also, if you want, I could also have a look at merging the vertx-sql-common into vertx-jdbc-client.

for sql-common, I will have a look soon.
besides, I think what we need now is to capture the current state in a wiki page and write some documentation that defines the expectations and possibly at some point we need an how-to with JPMS for Vert.x 4 using automatic module names (https://how-to.vertx.io) that could be based on 4.0.0-milestone5 (cc @jponge)

I will create a wiki page with the current names soon I think in the vertx wiki

Here is the wiki page https://github.com/vert-x3/wiki/wiki/JPMS

I will close this issue for Vert.x 4

@vietj I've just noticed that as we missed vertx-bridge-common in web a jpms application will fail to build if it attempts to configure the eventbus sockjs bridge as the classes are not made public.

I've re-open it because we faced a issue with:
https://github.com/vert-x3/vertx-bridge-common/pull/6
Can we settle on a name for it?
io.vertx.bridge.common or io.vertx.eventbus.bridge.common ?

Is there any information on the status of the rxjava packages? They're listed as 'postponed' but I can't find any more information on why or if that will be resolved?

I don't remember why we didn't do it for rxjava

I'd like to remember the reason and get the context

@vietj Do you think it is worth adding automatic module names for the newer projects? I can raise some PRs if so.

Web Proxy[Tech Preview] (vertx-web-proxy) -> io.verx.web.proxy
URI Template[Tech Preview] (vertx-uri-template) -> io.vertx.uri.template
Json Schema[Tech Preview] (vertx-json-schema) -> io.vertx.json.schema
Http Proxy[Tech Preview] (vertx-http-proxy) -> io.vertx.http.proxy

Regarding rxjava, I unfortunately do not remember why it was postponed.

rather

io.vertx.web.proxy
io.vertx.uritemplate
io.vertx.jsonschema
io.vertx.httpproxy

On Tue, Feb 28, 2023 at 8:02 PM Adrian Floarea @.***>
wrote:

@vietj https://github.com/vietj Do you think it is worth adding
automatic module names for the newer projects? I can raise some PRs if so.

Web Proxy[Tech Preview] (vertx-web-proxy) -> io.verx.web.proxy
URI Template[Tech Preview] (vertx-uri-template) ->
io.vertx.uri.template
Json Schema[Tech Preview] (vertx-json-schema) -> io.vertx.json.schema
Http Proxy[Tech Preview] (vertx-http-proxy) -> io.vertx.http.proxy

Regarding rxjava, I unfortunately do not remember why it was postponed.
—
Reply to this email directly, view it on GitHub
https://github.com/vert-x3/issues/issues/524#issuecomment-1448706053,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AABXDCWEN6NSANIYSF2KWM3WZZDVHANCNFSM4MF7SADQ
.
You are receiving this because you were mentioned.Message ID:
@.***>

@afloarea can you provide PR soon ? we will release 4.4 tomorrow
we should also have io.vertx.web.openapi.router
I added Todo to the initial list in the issue.

I'm closing this issue, I moved the content to the vertx wiki https://github.com/eclipse-vertx/vert.x/wiki/Automatic-Module-Names

Actually I've done them myself for 4.4 as it was o the critical path of the
release.
On Tue, Feb 28, 2023 at 10:02 PM Julien Viet @.***> wrote:

rather

io.vertx.web.proxy
io.vertx.uritemplate
io.vertx.jsonschema
io.vertx.httpproxy

On Tue, Feb 28, 2023 at 8:02 PM Adrian Floarea @.***>
wrote:

@vietj https://github.com/vietj Do you think it is worth adding
automatic module names for the newer projects? I can raise some PRs if so.

Web Proxy[Tech Preview] (vertx-web-proxy) -> io.verx.web.proxy
URI Template[Tech Preview] (vertx-uri-template) ->
io.vertx.uri.template
Json Schema[Tech Preview] (vertx-json-schema) ->
io.vertx.json.schema
Http Proxy[Tech Preview] (vertx-http-proxy) -> io.vertx.http.proxy

Regarding rxjava, I unfortunately do not remember why it was postponed.
—
Reply to this email directly, view it on GitHub
https://github.com/vert-x3/issues/issues/524#issuecomment-1448706053,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AABXDCWEN6NSANIYSF2KWM3WZZDVHANCNFSM4MF7SADQ
.
You are receiving this because you were mentioned.Message ID:
@.***>

source: gharchive/issue

authors: afloarea overshareware pmlopes vietj

license_type: permissive

license_source: github-api


text:
pandas_to_vertica, temporary table

hello,
I think there is a problem with pandas_to_vertica function. In fact, I can't save a pandas dataframe in vertica with this function. I think, it always creates temporary tables. In source code, we are (lines 522-525) :
    if not(tmp_name):
        vdf = read_csv(path, cursor, table_name=tmp_name, temporary_local_table=True, parse_n_lines=parse_n_lines,)
    else:
        vdf = read_csv(path, cursor, table_name=tmp_name, schema=schema, temporary_local_table=False, parse_n_lines=parse_n_lines,)

where not(tmp_name) =  True if name <> "".
In documentation, we are for "name" variable : "If empty, a temporary local table is created". So, if "name" isn't empty, and not(tmp_name) =  True we want a table and not temporary table. In code, we are temporary_local_table=True line 523, but we want temporary_local_table=False. I think you inversed lines 523 and 525.
Regards
Alexandre

Hi Alexandre,
Thanks a lot for reporting the issue.
It will be corrected in the next PR.
Badr

authors: lepelletieralexandre oualib

repo: vertica/VerticaPy


text:
socket.timeout: timed out

Description
I start a query, if I set the query date as early as '2013-01-01' , then the query will timeout in around 18 seconds.
python:3.9.7
Error Message
Traceback (most recent call last):
  File "C:\Users\larry\anaconda3\lib\site-packages\vertica_python\vertica\connection.py", line 655, in read_message
    type_ = self.read_bytes(1)
  File "C:\Users\larry\anaconda3\lib\site-packages\vertica_python\vertica\connection.py", line 716, in read_bytes
    result = self._socket_as_file().read(1)
  File "C:\Users\larry\anaconda3\lib\socket.py", line 704, in readinto
    return self._sock.recv_into(b)
socket.timeout: timed out

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "e:\tang_task\connect_vertica.py", line 114, in <module>
    task.vquery(game='ue', sql_file=u'UE_query_years.sql',out_csv=f'result_ue_{query_date_list}.csv',query_date_list=query_date_list)
  File "e:\tang_task\connect_vertica.py", line 97, in vquery
    cur.execute(c)
  File "C:\Users\larry\anaconda3\lib\site-packages\vertica_python\vertica\cursor.py", line 238, in execute
    self._execute_simple_query(operation)
  File "C:\Users\larry\anaconda3\lib\site-packages\vertica_python\vertica\cursor.py", line 656, in _execute_simple_query
    self._message = self.connection.read_message()
  File "C:\Users\larry\anaconda3\lib\site-packages\vertica_python\vertica\connection.py", line 689, in read_message
    raise_from(errors.ConnectionError(str(e)), e)
  File "<string>", line 3, in raise_from
vertica_python.errors.ConnectionError: timed out

part of python code
        conn = vertica_python.connect(**conn_info)
        cur = conn.cursor()
        cur.execute(c)  <------------------------Here c is a heavy sql query task string from year 2013.
        result = cur.fetchall()
        conn.close()

part of sql code
SELECT distinct
            owner_id,
            min(date(created_at)) as firstpaydt,
            substr(date(created_at)::varchar,1,7) as firstpayyrmo
FROM event_track
WHERE track_id in ('purchase', 'purchase_android') and date(created_at)>='2013-01-01'
GROUP BY owner_id,firstpayyrmo

problem found, 'connection_timeout': 20

repo: vertica/vertica-python


text:
Encode trait bounds in AIR/SMT to enable broadcast_forall with trait bounds

Up to now, broadcast_forall was only allowed for proof functions with no trait bounds.  This pull request adds AIR/SMT encodings of trait bounds so that we generate axioms for broadcast_forall that can include trait bounds as preconditions.  This is also relevant to https://github.com/verus-lang/verus/pull/744 , since axioms about spec function ensures may need preconditions for trait bounds.
Here is an example test:
trait T1<A, B> {}
trait T2<C, D> {}

struct S<E>(E);

impl<X> T1<X, bool> for S<X> {}
impl<Y, Z: T1<int, Y>> T2<Z, u16> for S<(Y, u8)> {}

spec fn f<A>(i: int) -> bool;

#[verifier::external_body]
#[verifier::broadcast_forall]
proof fn p<A: T2<S<int>, u16>>(i: int)
    ensures f::<A>(i)
{
}

proof fn test1() {
    assert(f::<S<(bool, u8)>>(3));
}

proof fn test2() {
    assert(f::<S<(u32, u8)>>(3)); // FAILS
}

proof fn test3() {
    assert(f::<S<(bool, u32)>>(3)); // FAILS
}

In this, only test1 succeeds, because p's trait bound A: T2<S<int>, u16> is satisfied by A = S<(bool, u8)> but not by A = S<(u32, u8)> or A = S<(bool, u32)>.  For Z3 to see that the trait bound is satisfied, we need to encode the trait bounds as AIR/SMT predicates.  This encoding looks like the following, where each relevant trait impl becomes an axiom:
(declare-fun tr_bound%!T1. (Dcr Type Dcr Type Dcr Type) Bool)
(declare-fun tr_bound%!T2. (Dcr Type Dcr Type Dcr Type) Bool)
(axiom (forall ((X&. Dcr) (X& Type)) (!
   (tr_bound%!T1. $ (TYPE%!S. X&. X&) X&. X& $ BOOL)
   :pattern ((tr_bound%!T1. $ (TYPE%!S. X&. X&) X&. X& $ BOOL))
)))
(axiom (forall ((Y&. Dcr) (Y& Type) (Z&. Dcr) (Z& Type)) (!
   (=>
    (tr_bound%!T1. Z&. Z& $ INT Y&. Y&)
    (tr_bound%!T2. $ (TYPE%!S. $ (TYPE%tuple%2. Y&. Y& $ (UINT 8))) Z&.
     Z& $ (UINT 16)
   ))
   :pattern ((tr_bound%!T2. $ (TYPE%!S. $ (TYPE%tuple%2. Y&. Y& $ (UINT 8)))
     Z&. Z& $ (UINT 16)
   ))
)))

With this, the axiom for p's broadcast_forall can use the trait bound tr_bound%!T2. as a precondition, so that it only applies to A that satisfy the proper T2 trait bound:
(axiom (forall ((A&. Dcr) (A& Type) (i~2$ Poly)) (!
   (=>
    (has_type i~2$ INT)
    (=>
     (tr_bound%!T2. A&. A& $ (TYPE%!S. $ INT) $ (UINT 16))
     (!f.? A&. A& i~2$)
   ))
   :pattern ((!f.? A&. A& i~2$))
)))

Let me check my understanding: in the example:
(declare-fun tr_bound%!T1. (Dcr Type Dcr Type Dcr Type) Bool)

The first Dcr Type is the type that conforms to the bound;
the other Dcr Types are the type arguments to T1.
Is that right?

Let me check my understanding: in the example:
(declare-fun tr_bound%!T1. (Dcr Type Dcr Type Dcr Type) Bool)

The first Dcr Type is the type that conforms to the bound; the other Dcr Types are the type arguments to T1.
Is that right?

Yes, internally T1 is viewed as having 3 type parameters, Self, A, and B, so the first Dcr Type is for Self.  Internally, the bound Z: T1<int, Y> is viewed as being a predicate T1(Z, int, Y) instantiating Self = Z, A = int, B = Y.

source: gharchive/pull-request

authors: Chris-Hawblitzel utaal

repo: verus-lang/verus

license: MIT


text:
support arm64 image

Is your feature request related to a problem? Please describe.

Describe the solution you'd like

Describe alternatives you've considered

Additional context

https://github.com/vesoft-inc/nebula-operator/issues/308

The console is already dual-arch since 3.4.0

repo: vesoft-inc/nebula-console