OpenClash icon indicating copy to clipboard operation
OpenClash copied to clipboard

[Bug] 为啥每次DNS 劫持模式为 Dnsmasq 转发都需要很长的时间

Open felix-klk opened this issue 7 months ago • 10 comments

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.079

Bug on Environment

Official OpenWrt

OpenWrt Version

v0.46.079

Bug on Platform

Linux-amd64(x86-64)

Describe the Bug

不知道从什么版本为啥每次DNS 劫持模式为 Dnsmasq 转发都需要两分钟左右 有点影响使用

Image

To Reproduce

开机 或者更新订阅

OpenClash Log

OpenClash 调试日志

生成时间: 2025-05-14 00:48:20
插件版本: 0.46.079
隐私提示: 上传此日志前请注意检查、屏蔽公网IP、节点、密码等相关敏感信息



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

主机型号: Gigabyte Technology Co., Ltd. B75M-D2V
固件版本: iStoreOS 22.03.7 2025050912
LuCI版本: git-23.093.42303-d58cd69
内核版本: 5.10.221
处理器架构: x86_64

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

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

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

dnsmasq-full: 已安装
dnsmasq-full(ipset): 已安装
dnsmasq-full(nftset): 已安装
bash: 已安装
curl: 已安装
ca-bundle: 已安装
ipset: 已安装
ip-full: 已安装
ruby: 已安装
ruby-yaml: 已安装
ruby-psych: 已安装
ruby-pstore: 已安装
kmod-tun(TUN模式): 已安装
luci-compat(Luci >= 19.07): 已安装
kmod-inet-diag(PROCESS-NAME): 已安装
unzip: 已安装
iptables-mod-tproxy: 已安装
kmod-ipt-tproxy: 已安装
iptables-mod-extra: 已安装
kmod-ipt-extra: 已安装
kmod-ipt-nat: 已安装

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

运行状态: 运行中
运行内核:Meta
进程pid: 19984
运行用户: 
已选择的架构: linux-amd64

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

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

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

当前配置文件: /etc/openclash/config/100G.yaml
启动配置文件: /etc/openclash/100G.yaml
运行模式: redir-host-mix
默认代理模式: 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.*.*/32') and time.now().hour < 20 or time.now().hour > 21
##    time-limit: src_ip == '192.168.*.*' 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.*.*/8,DIRECT #匹配数据目标IP(直连)
##- SRC-IP-CIDR,192.168.*.*/32,DIRECT #匹配数据发起IP(直连)
##- DST-PORT,80,DIRECT #匹配数据目标端口(直连)
##- SRC-PORT,7777,DIRECT #匹配数据源端口(直连)

OpenClash Config


Expected Behavior

加快启动速度

Additional Context

No response

felix-klk avatar May 13 '25 16:05 felix-klk

我使用了adguard home 我是否应该切换为dns拦截 使用防火墙

felix-klk avatar May 13 '25 17:05 felix-klk

Image

felix-klk avatar May 13 '25 17:05 felix-klk

看你adguard home上是不是劫持了53端口 如果劫持了,那openclash里就选择禁用

kojiqi avatar May 15 '25 01:05 kojiqi

看你adguard home上是不是劫持了53端口 如果劫持了,那openclash里就选择禁用

没有劫持的

Image

felix-klk avatar May 15 '25 01:05 felix-klk

相同问题, 我没有其他工具劫持DNS, 每次启动都卡这好几分钟, 日志时间都是60秒180秒整这样, 感觉像添加规则哪里操作超时了

DetectiveLemon avatar May 17 '25 04:05 DetectiveLemon

相同问题, 我没有其他工具劫持DNS, 每次启动都卡这好几分钟, 日志时间都是60秒180秒整这样, 感觉像添加规则哪里操作超时了

#端口转发
LOG_OUT "Tip: Start Add Port Bypassing Rules For Firewall Redirect and Firewall Rules..."
config_load "firewall"
config_foreach firewall_redirect_exclude "redirect"
config_foreach firewall_rule_exclude "rule"
config_load "openclash"
config_foreach firewall_lan_ac_traffic "lan_ac_traffic"

不太懂shell脚本和防火墙规则这些, 简单定位了一下我是在set_firewall()里面config_foreach firewall_redirect_exclude "redirect"这一步耗时几分钟

DetectiveLemon avatar May 17 '25 04:05 DetectiveLemon

别不懂装懂> 那么大个警告没看到么

felix-klk avatar May 20 '25 07:05 felix-klk

相同问题, 我没有其他工具劫持DNS, 每次启动都卡这好几分钟, 日志时间都是60秒180秒整这样, 感觉像添加规则哪里操作超时了

#端口转发
LOG_OUT "Tip: Start Add Port Bypassing Rules For Firewall Redirect and Firewall Rules..."
config_load "firewall"
config_foreach firewall_redirect_exclude "redirect"
config_foreach firewall_rule_exclude "rule"
config_load "openclash"
config_foreach firewall_lan_ac_traffic "lan_ac_traffic"

不太懂shell脚本和防火墙规则这些, 简单定位了一下我是在set_firewall()里面config_foreach firewall_redirect_exclude "redirect"这一步耗时几分钟

有个简单的操作治标不治本, 但是可能有用, 可以在先在_openwrt状态-防火墙_里面先_重启防火墙_, 再启动openclash就不会卡添加规则了, 确实是防火墙操作耗费大量时间, 应该是一直在等防火墙操作的锁. 但是为什么就不清楚了.

DetectiveLemon avatar Jun 16 '25 04:06 DetectiveLemon

This issue is stale because it has been open 60 days with no activity. Remove stale label or comment or this will be closed in 5 days

github-actions[bot] avatar Aug 15 '25 08:08 github-actions[bot]