From 980d1ed77fb3e97346e23bf2f4177892ebd4a0e7 Mon Sep 17 00:00:00 2001 From: vernesong <42875168+vernesong@users.noreply.github.com> Date: Sun, 25 Feb 2024 18:49:41 +0800 Subject: [PATCH 01/10] chore: #3768 #3763 # --- .../luasrc/model/cbi/openclash/settings.lua | 4 + .../po/zh-cn/openclash.zh-cn.po | 8 +- .../usr/share/openclash/openclash_watchdog.sh | 168 ++++++++++-------- 3 files changed, 100 insertions(+), 80 deletions(-) diff --git a/luci-app-openclash/luasrc/model/cbi/openclash/settings.lua b/luci-app-openclash/luasrc/model/cbi/openclash/settings.lua index b6979260f1..659d57be04 100644 --- a/luci-app-openclash/luasrc/model/cbi/openclash/settings.lua +++ b/luci-app-openclash/luasrc/model/cbi/openclash/settings.lua @@ -236,6 +236,10 @@ o = s:taboption("traffic_control", Flag, "disable_udp_quic", font_red..bold_on.. o.description = translate("Prevent YouTube and Others To Use QUIC Transmission")..", "..font_red..bold_on..translate("REJECT UDP Traffic(Not Include CN) On Port 443")..bold_off..font_off o.default = 1 +o = s:taboption("traffic_control", Flag, "skip_proxy_address", translate("Skip Proxy Address")) +o.description = translate("Bypassing Server Addresses And Preventing Duplicate Proxies") +o.default = 0 + o = s:taboption("traffic_control", Value, "common_ports", font_red..bold_on..translate("Common Ports Proxy Mode")..bold_off..font_off) o.description = translate("Only Common Ports, Prevent BT/P2P Passing") o:value("0", translate("Disable")) diff --git a/luci-app-openclash/po/zh-cn/openclash.zh-cn.po b/luci-app-openclash/po/zh-cn/openclash.zh-cn.po index d27fe7fa46..002925f696 100644 --- a/luci-app-openclash/po/zh-cn/openclash.zh-cn.po +++ b/luci-app-openclash/po/zh-cn/openclash.zh-cn.po @@ -3487,4 +3487,10 @@ msgid "Error: Set Fallback DNS Proxy Group Failed," msgstr "错误:Fallback DNS 代理策略组设置失败," msgid "To Use in Fake-IP Mode, Please Switch The Dns Redirect Mode To Firewall Forwarding" -msgstr "要在 Fake-IP 模式下使用,请将 Dns 重定向模式切换为防火墙转发模式" \ No newline at end of file +msgstr "要在 Fake-IP 模式下使用,请将 Dns 重定向模式切换为防火墙转发模式" + +msgid "Skip Proxy Address" +msgstr "绕过服务器地址" + +msgid "Bypassing Server Addresses And Preventing Duplicate Proxies" +msgstr "绕过服务器地址,防止重复代理" \ No newline at end of file diff --git a/luci-app-openclash/root/usr/share/openclash/openclash_watchdog.sh b/luci-app-openclash/root/usr/share/openclash/openclash_watchdog.sh index 16f75da469..bafd708f80 100644 --- a/luci-app-openclash/root/usr/share/openclash/openclash_watchdog.sh +++ b/luci-app-openclash/root/usr/share/openclash/openclash_watchdog.sh @@ -25,8 +25,11 @@ china_ip_route=$(uci -q get openclash.config.china_ip_route) en_mode=$(uci -q get openclash.config.en_mode) fakeip_range=$(uci -q get openclash.config.fakeip_range || echo "198.18.0.1/16") ipv6_mode=$(uci -q get openclash.config.ipv6_mode || echo 0) +skip_proxy_address=$(uci -q get openclash.config.skip_proxy_address || echo 0) CRASH_NUM=0 CFG_UPDATE_INT=1 +SKIP_PROXY_ADDRESS=1 +SKIP_PROXY_ADDRESS_INTERVAL=30 STREAM_DOMAINS_PREFETCH=1 STREAM_AUTO_SELECT=1 FW4=$(command -v fw4) @@ -310,99 +313,106 @@ fi fi ## Skip Proxies Address - 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; - begin - Thread.new{ - reg = /^((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.){3}(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])(?::(?:[0-9]|[1-9][0-9]{1,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]))?$/; - reg6 = /^(?:(?:(?:[0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))|\[(?:(?:(?:[0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))\](?::(?:[0-9]|[1-9][0-9]{1,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]))?$/i; - if Value.key?('proxies') or Value.key?('proxy-providers') then - firewall_v = '$FW4'; - if firewall_v.empty? then - firewall_v = 'ipt' - else - firewall_v = 'nft' + if [ "$skip_proxy_address" -eq 1 ]; then + if [ "$SKIP_PROXY_ADDRESS" -eq 1 ] || [ "$(expr "$SKIP_PROXY_ADDRESS" % "$SKIP_PROXY_ADDRESS_INTERVAL")" -eq 0 ]; then + 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; - ips = Array.new; - servers = Array.new; - if Value.key?('proxies') and not Value['proxies'].nil? then - Value['proxies'].each do - |i| - if i['server'] then - if not i['server'] =~ reg and not i['server'] =~ reg6 and not servers.include?(i['server']) then - servers = servers.push(i['server']).uniq - syscall = '/usr/share/openclash/openclash_debug_dns.lua 2>/dev/null \"' + i['server'] + '\" \"true\"' - if IO.popen(syscall).read.split(/\n+/) then - ips = ips | IO.popen(syscall).read.split(/\n+/) + begin + Thread.new{ + reg = /^((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.){3}(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])(?::(?:[0-9]|[1-9][0-9]{1,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]))?$/; + reg6 = /^(?:(?:(?:[0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))|\[(?:(?:(?:[0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))\](?::(?:[0-9]|[1-9][0-9]{1,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]))?$/i; + if Value.key?('proxies') or Value.key?('proxy-providers') then + firewall_v = '$FW4'; + if firewall_v.empty? then + firewall_v = 'ipt' + else + firewall_v = 'nft' + end; + ips = Array.new; + servers = Array.new; + if Value.key?('proxies') and not Value['proxies'].nil? then + Value['proxies'].each do + |i| + if i['server'] then + if not i['server'] =~ reg and not i['server'] =~ reg6 and not servers.include?(i['server']) then + servers = servers.push(i['server']).uniq + syscall = '/usr/share/openclash/openclash_debug_dns.lua 2>/dev/null \"' + i['server'] + '\" \"true\"' + if IO.popen(syscall).read.split(/\n+/) then + ips = ips | IO.popen(syscall).read.split(/\n+/) + end; + else + ips = ips.push(i['server']).uniq + end; end; - else - ips = ips.push(i['server']).uniq end; end; - end; - end; - if Value.key?('proxy-providers') and not Value['proxy-providers'].nil? then - Value['proxy-providers'].values.each do - |i,path| - if i['path'] and not i['path'].empty? then - if i['path'].split('/')[0] == '.' then - path = '/etc/openclash/'+i['path'].split('./')[1] - else - path = i['path'] - end; - if File::exist?(path) then - if YAML.load_file(path).key?('proxies') and not YAML.load_file(path)['proxies'].nil? then - YAML.load_file(path)['proxies'].each do - |j| - if j['server'] then - if not j['server'] =~ reg and not j['server'] =~ reg6 and not servers.include?(j['server']) then - servers = servers.push(j['server']).uniq - syscall = '/usr/share/openclash/openclash_debug_dns.lua 2>/dev/null \"' + j['server'] + '\" \"true\"' - if IO.popen(syscall).read.split(/\n+/) then - ips = ips | IO.popen(syscall).read.split(/\n+/) + if Value.key?('proxy-providers') and not Value['proxy-providers'].nil? then + Value['proxy-providers'].values.each do + |i,path| + if i['path'] and not i['path'].empty? then + if i['path'].split('/')[0] == '.' then + path = '/etc/openclash/'+i['path'].split('./')[1] + else + path = i['path'] + end; + if File::exist?(path) then + if YAML.load_file(path).key?('proxies') and not YAML.load_file(path)['proxies'].nil? then + YAML.load_file(path)['proxies'].each do + |j| + if j['server'] then + if not j['server'] =~ reg and not j['server'] =~ reg6 and not servers.include?(j['server']) then + servers = servers.push(j['server']).uniq + syscall = '/usr/share/openclash/openclash_debug_dns.lua 2>/dev/null \"' + j['server'] + '\" \"true\"' + if IO.popen(syscall).read.split(/\n+/) then + ips = ips | IO.popen(syscall).read.split(/\n+/) + end; + else + ips = ips.push(j['server']).uniq + end; end; - else - ips = ips.push(j['server']).uniq end; end; end; end; end; end; - end; - end; - #Add ip skip - if ips and not ips.empty? then - ips.each do - |ip| - if ip and ip =~ reg then - if firewall_v == 'nft' then - syscall = 'nft add element inet fw4 localnetwork { \"' + ip + '\" } 2>/dev/null' - system(syscall) - else - syscall = 'ipset add localnetwork \"' + ip + '\" 2>/dev/null' - system(syscall) - end; - elsif ip and ip =~ reg6 then - if firewall_v == 'nft' then - syscall = 'nft add element inet fw4 localnetwork6 { \"' + ip + '\" } 2>/dev/null' - system(syscall) - else - syscall = 'ipset add localnetwork6 \"' + ip + '\" 2>/dev/null' - system(syscall) + #Add ip skip + if ips and not ips.empty? then + ips.each do + |ip| + if ip and ip =~ reg then + if firewall_v == 'nft' then + syscall = 'nft add element inet fw4 localnetwork { \"' + ip + '\" } 2>/dev/null' + system(syscall) + else + syscall = 'ipset add localnetwork \"' + ip + '\" 2>/dev/null' + system(syscall) + end; + elsif ip and ip =~ reg6 then + if firewall_v == 'nft' then + syscall = 'nft add element inet fw4 localnetwork6 { \"' + ip + '\" } 2>/dev/null' + system(syscall) + else + syscall = 'ipset add localnetwork6 \"' + ip + '\" 2>/dev/null' + system(syscall) + end; + end; end; end; end; - end; - end; - }.join; - rescue Exception => e - puts '${LOGTIME} Error: Set Proxies Address Skip Failed,【' + e.message + '】'; - end" >> $LOG_FILE + }.join; + rescue Exception => e + puts '${LOGTIME} Error: Set Proxies Address Skip Failed,【' + e.message + '】'; + end" >> $LOG_FILE + let SKIP_PROXY_ADDRESS++ + else + let SKIP_PROXY_ADDRESS++ + fi + fi ## DNS转发劫持 if [ "$enable_redirect_dns" = "1" ]; then From 51d78c8410947c2df2d4d02cae4f515177e34b58 Mon Sep 17 00:00:00 2001 From: forestL <45709305+ForestL18@users.noreply.github.com> Date: Sun, 25 Feb 2024 18:52:08 +0800 Subject: [PATCH 02/10] fix:Disable the startup of the utun interface. (#3764) --- luci-app-openclash/root/etc/uci-defaults/luci-openclash | 1 + 1 file changed, 1 insertion(+) diff --git a/luci-app-openclash/root/etc/uci-defaults/luci-openclash b/luci-app-openclash/root/etc/uci-defaults/luci-openclash index 707738ae85..98bf0d7b5c 100644 --- a/luci-app-openclash/root/etc/uci-defaults/luci-openclash +++ b/luci-app-openclash/root/etc/uci-defaults/luci-openclash @@ -213,6 +213,7 @@ uci -q set network.utun=interface uci -q set network.utun.proto=none uci -q set network.utun.ifname=utun uci -q set network.utun.device=utun +uci -q set network.utun.auto='0' uci -q commit network config_load "firewall" From fea042ce2767b87f122c09eb3710f19649f6bdbe Mon Sep 17 00:00:00 2001 From: vernesong <42875168+vernesong@users.noreply.github.com> Date: Tue, 27 Feb 2024 14:47:40 +0800 Subject: [PATCH 03/10] chore: refine --- luci-app-openclash/po/zh-cn/openclash.zh-cn.po | 3 +++ .../root/usr/share/openclash/openclash_watchdog.sh | 3 +++ 2 files changed, 6 insertions(+) diff --git a/luci-app-openclash/po/zh-cn/openclash.zh-cn.po b/luci-app-openclash/po/zh-cn/openclash.zh-cn.po index 002925f696..44a68bd864 100644 --- a/luci-app-openclash/po/zh-cn/openclash.zh-cn.po +++ b/luci-app-openclash/po/zh-cn/openclash.zh-cn.po @@ -3240,6 +3240,9 @@ msgstr "大陆域名 DNS 服务器" msgid "Specify DNS Server For CN Domain Lists, Only One IP Server Address Support" msgstr "指定大陆域名的 DNS 服务器,只支持填写一个IP地址" +msgid "Warning: Dnsmasq Work is Unnormal, Setting The Firewall DNS Hijacking Rules..." +msgstr "警告:检测到 Dnsmasq 工作异常,设置防火墙 DNS 劫持规则..." + msgid "Tip: Dnsmasq Work is Normal, Restore The Firewall DNS Hijacking Rules..." msgstr "提示:检测到 Dnsmasq 正常工作,还原防火墙 DNS 劫持规则..." diff --git a/luci-app-openclash/root/usr/share/openclash/openclash_watchdog.sh b/luci-app-openclash/root/usr/share/openclash/openclash_watchdog.sh index bafd708f80..95b5e6c309 100644 --- a/luci-app-openclash/root/usr/share/openclash/openclash_watchdog.sh +++ b/luci-app-openclash/root/usr/share/openclash/openclash_watchdog.sh @@ -34,6 +34,7 @@ STREAM_DOMAINS_PREFETCH=1 STREAM_AUTO_SELECT=1 FW4=$(command -v fw4) + check_dnsmasq() { if [ -z "$(echo "$en_mode" |grep "redir-host")" ] && [ "$china_ip_route" -eq 1 ] && [ "$enable_redirect_dns" != "2" ]; then DNSPORT=$(uci -q get dhcp.@dnsmasq[0].port) @@ -43,6 +44,7 @@ check_dnsmasq() { if [ "$(nslookup www.baidu.com 127.0.0.1:"$DNSPORT" >/dev/null 2>&1 || echo $?)" = "1" ]; then if [ -n "$FW4" ]; then if [ -z "$(nft list chain inet fw4 nat_output |grep '12353')" ]; then + LOG_OUT "Warning: Dnsmasq Work is Unnormal, Setting The Firewall DNS Hijacking Rules..." nft insert rule inet fw4 dstnat position 0 tcp dport 53 counter redirect to "$dns_port" comment \"OpenClash DNS Hijack\" 2>/dev/null nft insert rule inet fw4 dstnat position 0 udp dport 53 counter redirect to "$dns_port" comment \"OpenClash DNS Hijack\" 2>/dev/null nft 'add chain inet fw4 nat_output { type nat hook output priority -1; }' 2>/dev/null @@ -62,6 +64,7 @@ check_dnsmasq() { fi else if [ -z "$(iptables -t nat -nL OUTPUT --line-number |grep '12353')" ]; then + LOG_OUT "Warning: Dnsmasq Work is Unnormal, Setting The Firewall DNS Hijacking Rules..." iptables -t nat -I PREROUTING -p udp --dport 53 -j REDIRECT --to-ports "$dns_port" -m comment --comment "OpenClash DNS Hijack" 2>/dev/null iptables -t nat -I PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports "$dns_port" -m comment --comment "OpenClash DNS Hijack" 2>/dev/null iptables -t nat -I OUTPUT -p udp --dport 53 -m owner ! --uid-owner 65534 -j REDIRECT --to-ports "$dns_port" -m comment --comment "OpenClash DNS Hijack" 2>/dev/null From 7b31695bfcafd0b63a45f4a2c4340663ba153e05 Mon Sep 17 00:00:00 2001 From: vernesong <42875168+vernesong@users.noreply.github.com> Date: Tue, 27 Feb 2024 14:47:57 +0800 Subject: [PATCH 04/10] 0.46.002 --- luci-app-openclash/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/luci-app-openclash/Makefile b/luci-app-openclash/Makefile index 089531bc9a..243bf23913 100644 --- a/luci-app-openclash/Makefile +++ b/luci-app-openclash/Makefile @@ -1,7 +1,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-openclash -PKG_VERSION:=0.46.001 +PKG_VERSION:=0.46.002 PKG_RELEASE:=beta PKG_MAINTAINER:=vernesong From 782c437fb59a5b506c9dc519b13612ef21b313a0 Mon Sep 17 00:00:00 2001 From: vernesong <42875168+vernesong@users.noreply.github.com> Date: Tue, 27 Feb 2024 15:09:47 +0800 Subject: [PATCH 05/10] chore: #3771 --- luci-app-openclash/luasrc/controller/openclash.lua | 7 +++---- .../luasrc/view/openclash/sub_info_show.htm | 8 ++++---- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/luci-app-openclash/luasrc/controller/openclash.lua b/luci-app-openclash/luasrc/controller/openclash.lua index 207907b334..9e33c865b5 100644 --- a/luci-app-openclash/luasrc/controller/openclash.lua +++ b/luci-app-openclash/luasrc/controller/openclash.lua @@ -654,7 +654,7 @@ function set_subinfo_url() end function sub_info_get() - local filepath, filename, sub_url, sub_info, info, upload, download, total, expire, http_code, len, percent, day_left, day_expire + local filepath, filename, sub_url, sub_info, info, upload, download, total, expire, http_code, len, percent, day_left, day_expire, surplus, used local info_tb = {} filename = luci.http.formvalue("filename") sub_info = "" @@ -705,7 +705,6 @@ function sub_info_get() else day_left = 0 end - if used and total and used < total then percent = string.format("%.1f",((total-used)/total)*100) or nil elseif used == nil or total == nil or total == 0 then @@ -713,8 +712,8 @@ function sub_info_get() else percent = 0 end + surplus = fs.filesize(total - used) or "null" total = fs.filesize(total) or "null" - used = fs.filesize(used) or "null" sub_info = "Successful" else sub_info = "No Sub Info Found" @@ -727,7 +726,7 @@ function sub_info_get() luci.http.write_json({ http_code = http_code, sub_info = sub_info, - used = used, + surplus = surplus, total = total, percent = percent, day_left = day_left, diff --git a/luci-app-openclash/luasrc/view/openclash/sub_info_show.htm b/luci-app-openclash/luasrc/view/openclash/sub_info_show.htm index bc829f7c41..01640b2756 100644 --- a/luci-app-openclash/luasrc/view/openclash/sub_info_show.htm +++ b/luci-app-openclash/luasrc/view/openclash/sub_info_show.htm @@ -72,8 +72,8 @@ retry_<%=idname%> = 0; localStorage.setItem("<%=filename%>",JSON.stringify(status)); document.getElementById('<%=idname%>').className = "sub_tab_show"; - document.getElementById('<%=idname%>').innerHTML = progressbar_<%=idname%>((status.used), (status.total), (status.percent), false, false, (status.expire), (status.day_left)); - //document.getElementById('<%=idname%>').innerHTML = "<%:Plan Traffic%>" + ": " + "" + status.used + " | " + status.total + "
<%:Plan Expiration Time%>: " + "" + status.expire + ""; + document.getElementById('<%=idname%>').innerHTML = progressbar_<%=idname%>((status.surplus), (status.total), (status.percent), false, false, (status.expire), (status.day_left)); + //document.getElementById('<%=idname%>').innerHTML = "<%:Plan Traffic%>" + ": " + "" + status.surplus + " | " + status.total + "
<%:Plan Expiration Time%>: " + "" + status.expire + ""; } else if ( x && x.status == 200 && status.sub_info == "No Sub Info Found" ) { retry_<%=idname%> = 0; @@ -110,8 +110,8 @@ document.getElementById('<%=idname%>').innerHTML = "<%:No Sub Info Found%>"; } else { - //document.getElementById('<%=idname%>').innerHTML = "<%:Plan Traffic%>" + ": " + "" + save_info.used + " | " + save_info.total + "
<%:Plan Expiration Time%>: " + "" + save_info.expire + ""; - document.getElementById('<%=idname%>').innerHTML = progressbar_<%=idname%>((save_info.used), (save_info.total), (save_info.percent ? save_info.percent : 0), false, false, (save_info.expire), (save_info.day_left ? save_info.day_left : 0)); + //document.getElementById('<%=idname%>').innerHTML = "<%:Plan Traffic%>" + ": " + "" + save_info.surplus + " | " + save_info.total + "
<%:Plan Expiration Time%>: " + "" + save_info.expire + ""; + document.getElementById('<%=idname%>').innerHTML = progressbar_<%=idname%>((save_info.surplus), (save_info.total), (save_info.percent ? save_info.percent : 0), false, false, (save_info.expire), (save_info.day_left ? save_info.day_left : 0)); } } else { From ba804a57819fa27c5fea8d3707fe633d9ef251b4 Mon Sep 17 00:00:00 2001 From: vernesong <42875168+vernesong@users.noreply.github.com> Date: Tue, 27 Feb 2024 15:24:27 +0800 Subject: [PATCH 06/10] chore: refine --- luci-app-openclash/luasrc/controller/openclash.lua | 2 ++ luci-app-openclash/luasrc/view/openclash/sub_info_show.htm | 6 ++---- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/luci-app-openclash/luasrc/controller/openclash.lua b/luci-app-openclash/luasrc/controller/openclash.lua index 9e33c865b5..a87b5ebb1f 100644 --- a/luci-app-openclash/luasrc/controller/openclash.lua +++ b/luci-app-openclash/luasrc/controller/openclash.lua @@ -714,6 +714,7 @@ function sub_info_get() end surplus = fs.filesize(total - used) or "null" total = fs.filesize(total) or "null" + used = fs.filesize(used) or "null" sub_info = "Successful" else sub_info = "No Sub Info Found" @@ -727,6 +728,7 @@ function sub_info_get() http_code = http_code, sub_info = sub_info, surplus = surplus, + used = used, total = total, percent = percent, day_left = day_left, diff --git a/luci-app-openclash/luasrc/view/openclash/sub_info_show.htm b/luci-app-openclash/luasrc/view/openclash/sub_info_show.htm index 01640b2756..deab390112 100644 --- a/luci-app-openclash/luasrc/view/openclash/sub_info_show.htm +++ b/luci-app-openclash/luasrc/view/openclash/sub_info_show.htm @@ -72,8 +72,7 @@ retry_<%=idname%> = 0; localStorage.setItem("<%=filename%>",JSON.stringify(status)); document.getElementById('<%=idname%>').className = "sub_tab_show"; - document.getElementById('<%=idname%>').innerHTML = progressbar_<%=idname%>((status.surplus), (status.total), (status.percent), false, false, (status.expire), (status.day_left)); - //document.getElementById('<%=idname%>').innerHTML = "<%:Plan Traffic%>" + ": " + "" + status.surplus + " | " + status.total + "
<%:Plan Expiration Time%>: " + "" + status.expire + ""; + document.getElementById('<%=idname%>').innerHTML = progressbar_<%=idname%>((status.surplus ? status.surplus : status.used), (status.total), (status.percent), false, false, (status.expire), (status.day_left)); } else if ( x && x.status == 200 && status.sub_info == "No Sub Info Found" ) { retry_<%=idname%> = 0; @@ -110,8 +109,7 @@ document.getElementById('<%=idname%>').innerHTML = "<%:No Sub Info Found%>"; } else { - //document.getElementById('<%=idname%>').innerHTML = "<%:Plan Traffic%>" + ": " + "" + save_info.surplus + " | " + save_info.total + "
<%:Plan Expiration Time%>: " + "" + save_info.expire + ""; - document.getElementById('<%=idname%>').innerHTML = progressbar_<%=idname%>((save_info.surplus), (save_info.total), (save_info.percent ? save_info.percent : 0), false, false, (save_info.expire), (save_info.day_left ? save_info.day_left : 0)); + document.getElementById('<%=idname%>').innerHTML = progressbar_<%=idname%>((save_info.surplus ? save_info.surplus : save_info.used), (save_info.total), (save_info.percent ? save_info.percent : 0), false, false, (save_info.expire), (save_info.day_left ? save_info.day_left : 0)); } } else { From 1a10eb982b72fa1dde0567491077fa236a59abdb Mon Sep 17 00:00:00 2001 From: vernesong <42875168+vernesong@users.noreply.github.com> Date: Tue, 5 Mar 2024 14:40:07 +0800 Subject: [PATCH 07/10] fix #3780 --- .../root/usr/share/openclash/yml_rules_change.sh | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/luci-app-openclash/root/usr/share/openclash/yml_rules_change.sh b/luci-app-openclash/root/usr/share/openclash/yml_rules_change.sh index d05d1ea3c2..3581cf901b 100644 --- a/luci-app-openclash/root/usr/share/openclash/yml_rules_change.sh +++ b/luci-app-openclash/root/usr/share/openclash/yml_rules_change.sh @@ -333,16 +333,8 @@ yml_other_set() 'PROCESS-NAME,transmission-qt,DIRECT', 'PROCESS-NAME,uTorrent,DIRECT', 'PROCESS-NAME,WebTorrent,DIRECT', - 'PROCESS-NAME,aria2c,DIRECT', - 'PROCESS-NAME,fdm,DIRECT', 'PROCESS-NAME,Folx,DIRECT', - 'PROCESS-NAME,NetTransport,DIRECT', - 'PROCESS-NAME,qbittorrent,DIRECT', - 'PROCESS-NAME,Thunder,DIRECT', 'PROCESS-NAME,Transmission,DIRECT', - 'PROCESS-NAME,transmission,DIRECT', - 'PROCESS-NAME,uTorrent,DIRECT', - 'PROCESS-NAME,WebTorrent,DIRECT', 'PROCESS-NAME,WebTorrent Helper,DIRECT', 'PROCESS-NAME,v2ray,DIRECT', 'PROCESS-NAME,ss-local,DIRECT', @@ -353,6 +345,7 @@ yml_other_set() 'PROCESS-NAME,trojan-go,DIRECT', 'PROCESS-NAME,xray,DIRECT', 'PROCESS-NAME,hysteria,DIRECT', + 'PROCESS-NAME,singbox,DIRECT', 'PROCESS-NAME,UUBooster,DIRECT', 'PROCESS-NAME,uugamebooster,DIRECT', 'DST-PORT,80,' + common_port_group, From ae3a9d0aa86cad2a8f2d2a9bdf240dc8c75a3d37 Mon Sep 17 00:00:00 2001 From: vernesong <42875168+vernesong@users.noreply.github.com> Date: Wed, 6 Mar 2024 17:42:27 +0800 Subject: [PATCH 08/10] chore: refine --- luci-app-openclash/luasrc/controller/openclash.lua | 3 ++- luci-app-openclash/luasrc/view/openclash/status.htm | 4 ++-- .../root/usr/share/openclash/openclash_watchdog.sh | 3 ++- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/luci-app-openclash/luasrc/controller/openclash.lua b/luci-app-openclash/luasrc/controller/openclash.lua index a87b5ebb1f..2d993e38ff 100644 --- a/luci-app-openclash/luasrc/controller/openclash.lua +++ b/luci-app-openclash/luasrc/controller/openclash.lua @@ -1072,7 +1072,8 @@ function action_status() db_forward_ssl = db_foward_ssl(), web = is_web(), cn_port = cn_port(), - restricted_mode = restricted_mode(); + restricted_mode = restricted_mode(), + core_type = uci:get("openclash", "config", "core_type") or "Dev"; }) end diff --git a/luci-app-openclash/luasrc/view/openclash/status.htm b/luci-app-openclash/luasrc/view/openclash/status.htm index 8f732d4c3f..0c9288ab19 100644 --- a/luci-app-openclash/luasrc/view/openclash/status.htm +++ b/luci-app-openclash/luasrc/view/openclash/status.htm @@ -252,11 +252,11 @@ if ( x && x.status == 200 ) { if ( status.restricted_mode != "1" ) { - clash.innerHTML = status.clash ? '<%:Running%>' : '<%:Not Running%>'; + clash.innerHTML = status.clash ? '' + status.core_type +'   <%:Running%>' : '<%:Not Running%>'; } else { - clash.innerHTML = status.clash ? '<%:Running%> <%:%>' : '<%:Not Running%>'; + clash.innerHTML = status.clash ? '' + status.core_type +'   <%:Running%>   <%:%>' : '<%:Not Running%>'; } watchdog.innerHTML = status.watchdog ? '   |   <%:Daemons%>:   <%:Running%>' : '   |   <%:Daemons%>:   <%:Not Running%>'; dase.innerHTML = status.dase ? ""+status.dase+"" : ""+"<%:Not Set%>"+""; diff --git a/luci-app-openclash/root/usr/share/openclash/openclash_watchdog.sh b/luci-app-openclash/root/usr/share/openclash/openclash_watchdog.sh index 95b5e6c309..e412ecb5ad 100644 --- a/luci-app-openclash/root/usr/share/openclash/openclash_watchdog.sh +++ b/luci-app-openclash/root/usr/share/openclash/openclash_watchdog.sh @@ -41,7 +41,7 @@ check_dnsmasq() { if [ -z "$DNSPORT" ]; then DNSPORT=$(netstat -nlp |grep -E '127.0.0.1:.*dnsmasq' |awk -F '127.0.0.1:' '{print $2}' |awk '{print $1}' |head -1 || echo 53) fi - if [ "$(nslookup www.baidu.com 127.0.0.1:"$DNSPORT" >/dev/null 2>&1 || echo $?)" = "1" ]; then + if [ "$(nslookup www.baidu.com >/dev/null 2>&1 || echo $?)" = "1" ]; then if [ -n "$FW4" ]; then if [ -z "$(nft list chain inet fw4 nat_output |grep '12353')" ]; then LOG_OUT "Warning: Dnsmasq Work is Unnormal, Setting The Firewall DNS Hijacking Rules..." @@ -131,6 +131,7 @@ check_dnsmasq() { } check_dnsmasq +SLOG_CLEAN sleep 60 while :; From b83d6981fe7b11277ccb243109aa5fe06c1ec14b Mon Sep 17 00:00:00 2001 From: vernesong <42875168+vernesong@users.noreply.github.com> Date: Wed, 6 Mar 2024 17:42:54 +0800 Subject: [PATCH 09/10] 0.46.003 --- luci-app-openclash/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/luci-app-openclash/Makefile b/luci-app-openclash/Makefile index 243bf23913..f8333d64b5 100644 --- a/luci-app-openclash/Makefile +++ b/luci-app-openclash/Makefile @@ -1,7 +1,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-openclash -PKG_VERSION:=0.46.002 +PKG_VERSION:=0.46.003 PKG_RELEASE:=beta PKG_MAINTAINER:=vernesong From d8bcf91b5cf7781a326b5f1f7b9100183df4caef Mon Sep 17 00:00:00 2001 From: vernesong <42875168+vernesong@users.noreply.github.com> Date: Wed, 6 Mar 2024 17:48:20 +0800 Subject: [PATCH 10/10] workflow: fix error sdk address --- .github/workflows/clear_cache.yml | 2 +- .github/workflows/compile_dev_core.yml | 10 +++++----- .github/workflows/compile_meta_core.yml | 10 +++++----- .github/workflows/compile_new_ipk.yml | 12 ++++++------ .github/workflows/compile_premium_core.yml | 4 ++-- .github/workflows/master_release_sync.yml | 4 ++-- README.md | 10 ++++++---- 7 files changed, 27 insertions(+), 25 deletions(-) diff --git a/.github/workflows/clear_cache.yml b/.github/workflows/clear_cache.yml index 566d8f105e..0d846cc2d9 100644 --- a/.github/workflows/clear_cache.yml +++ b/.github/workflows/clear_cache.yml @@ -18,7 +18,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 # https://github.com/marketplace/actions/git-changesets - id: changed_files diff --git a/.github/workflows/compile_dev_core.yml b/.github/workflows/compile_dev_core.yml index 8b3045771e..069f759557 100644 --- a/.github/workflows/compile_dev_core.yml +++ b/.github/workflows/compile_dev_core.yml @@ -21,7 +21,7 @@ jobs: sudo apt-get -y install git - name: Clone OpenClash Repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: ref: core @@ -32,7 +32,7 @@ jobs: echo "current_id: $(sed -n 1p ./dev/core_version)" - name: Clone Clash Repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: repository: Dreamacro/clash ref: dev @@ -64,7 +64,7 @@ jobs: echo "upx=../upx-3.95-amd64_linux/upx" >> $GITHUB_ENV - name: Clone OpenClash Repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: ref: core @@ -82,7 +82,7 @@ jobs: check-latest: true - name: Clone Clash Repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: repository: Dreamacro/clash ref: dev @@ -98,7 +98,7 @@ jobs: cp -rf "./bin/." "../tmp/bin/" - name: Clone OpenClash Repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: ref: core diff --git a/.github/workflows/compile_meta_core.yml b/.github/workflows/compile_meta_core.yml index 35b23ff8f4..580fcbd02f 100644 --- a/.github/workflows/compile_meta_core.yml +++ b/.github/workflows/compile_meta_core.yml @@ -21,7 +21,7 @@ jobs: sudo apt-get -y install git - name: Clone OpenClash Repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: ref: core @@ -32,7 +32,7 @@ jobs: echo "current_id: $(sed -n 3p ./dev/core_version)" - name: Clone Clash Meta Repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: repository: MetaCubeX/mihomo ref: Alpha @@ -63,7 +63,7 @@ jobs: echo "upx=../upx-3.95-amd64_linux/upx" >> $GITHUB_ENV - name: Clone OpenClash Repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: ref: core @@ -81,7 +81,7 @@ jobs: check-latest: true - name: Clone Clash Meta Repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: repository: MetaCubeX/mihomo ref: Alpha @@ -96,7 +96,7 @@ jobs: cp -rf "./bin/." "../tmp/bin/" - name: Clone OpenClash Repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: ref: core diff --git a/.github/workflows/compile_new_ipk.yml b/.github/workflows/compile_new_ipk.yml index ee403f7b24..e2842bad6f 100644 --- a/.github/workflows/compile_new_ipk.yml +++ b/.github/workflows/compile_new_ipk.yml @@ -17,7 +17,7 @@ jobs: current_version: ${{ steps.current_version.outputs.version }} steps: - name: Clone Repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: ref: ${{ github.ref_name }} @@ -28,7 +28,7 @@ jobs: echo "New Version: $(grep 'PKG_VERSION:=' ./luci-app-openclash/Makefile |awk -F '=' '{print $2}')" - name: Clone Repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: ref: package @@ -44,7 +44,7 @@ jobs: if: ${{ needs.Get-Version.outputs.version != needs.Get-Version.outputs.current_version }} steps: - name: Clone OpenClash dev Repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: ref: ${{ github.ref_name }} @@ -59,10 +59,10 @@ jobs: run: | cd .. mkdir tmp - curl -SLk --connect-timeout 30 --retry 2 "https://archive.openwrt.org/snapshots/trunk/ar71xx/generic/OpenWrt-SDK-ar71xx-generic_gcc-5.3.0_musl-1.1.16.Linux-x86_64.tar.bz2" -o "./tmp/SDK.tar.bz2" + curl -SLk --connect-timeout 30 --retry 2 "https://archive.openwrt.org/chaos_calmer/15.05.1/ar71xx/generic/OpenWrt-SDK-15.05.1-ar71xx-generic_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64.tar.bz2" -o "./tmp/SDK.tar.bz2" cd \tmp tar xjf SDK.tar.bz2 - mv "OpenWrt-SDK-ar71xx-generic_gcc-5.3.0_musl-1.1.16.Linux-x86_64" "SDK" + mv "OpenWrt-SDK-15.05.1-ar71xx-generic_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64" "SDK" - name: Copy OpenClash Source Codes run: | @@ -85,7 +85,7 @@ jobs: make package/luci-app-openclash/compile V=99 - name: Switch OpenClash Repository to Package - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: ref: package diff --git a/.github/workflows/compile_premium_core.yml b/.github/workflows/compile_premium_core.yml index 94835bcf1e..907609f57b 100644 --- a/.github/workflows/compile_premium_core.yml +++ b/.github/workflows/compile_premium_core.yml @@ -21,7 +21,7 @@ jobs: sudo apt-get -y install curl git gzip - name: Clone OpenClash Repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: ref: core @@ -63,7 +63,7 @@ jobs: echo "upx=../upx-3.95-amd64_linux/upx" >> $GITHUB_ENV - name: Clone OpenClash Repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: ref: core diff --git a/.github/workflows/master_release_sync.yml b/.github/workflows/master_release_sync.yml index c215ca6ff4..115bd8ac74 100644 --- a/.github/workflows/master_release_sync.yml +++ b/.github/workflows/master_release_sync.yml @@ -17,7 +17,7 @@ jobs: sudo apt-get -y install git - name: Clone OpenClash Repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: ref: core @@ -39,7 +39,7 @@ jobs: fi - name: Clone OpenClash Repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: ref: package diff --git a/README.md b/README.md index 56b61904f7..664f533fd8 100644 --- a/README.md +++ b/README.md @@ -68,11 +68,13 @@ --- -从 OpenWrt 的 [SDK](https://archive.openwrt.org/snapshots/trunk/ar71xx/generic/OpenWrt-SDK-ar71xx-generic_gcc-5.3.0_musl-1.1.16.Linux-x86_64.tar.bz2) 编译 +从 OpenWrt 的 [SDK](https://archive.openwrt.org/chaos_calmer/15.05.1/ar71xx/generic/OpenWrt-SDK-15.05.1-ar71xx-generic_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64.tar.bz2) 编译 ```bash # 解压下载好的 SDK -tar xjf OpenWrt-SDK-ar71xx-generic_gcc-5.3.0_musl-1.1.16.Linux-x86_64.tar.bz2 -cd OpenWrt-SDK-ar71xx-* +curl -SLk --connect-timeout 30 --retry 2 "https://archive.openwrt.org/chaos_calmer/15.05.1/ar71xx/generic/OpenWrt-SDK-15.05.1-ar71xx-generic_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64.tar.bz2" -o "/tmp/SDK.tar.bz2" +cd \tmp +tar xjf SDK.tar.bz2 +cd OpenWrt-SDK-15.05.1-* # Clone 项目 mkdir package/luci-app-openclash @@ -96,7 +98,7 @@ cd ../.. make package/luci-app-openclash/luci-app-openclash/compile V=99 # IPK文件位置 -./bin/ar71xx/packages/base/luci-app-openclash_0.39.7-beta_all.ipk +./bin/ar71xx/packages/base/luci-app-openclash_*-beta_all.ipk ``` ```bash