diff --git a/clashoo/Makefile b/clashoo/Makefile index d84bb409..0f5072ad 100644 --- a/clashoo/Makefile +++ b/clashoo/Makefile @@ -5,7 +5,7 @@ PKG_SHORT_SHA:=5019cc0 PKG_COMMIT_DATE:=2026.09.19 PKG_VERSION:=$(PKG_COMMIT_DATE)~$(PKG_SHORT_SHA) -PKG_RELEASE:=1 +PKG_RELEASE:=2 PKG_SOURCE:=$(PKG_NAME)-alpha-$(PKG_SHORT_SHA).tar.gz PKG_SOURCE_SUBDIR:=$(PKG_NAME)-alpha-$(PKG_SHORT_SHA) diff --git a/clashoo/files/etc/config/clashoo b/clashoo/files/etc/config/clashoo index 1f2112ff..1b0e2392 100644 --- a/clashoo/files/etc/config/clashoo +++ b/clashoo/files/etc/config/clashoo @@ -48,8 +48,6 @@ config clashoo 'config' list fallback_filter_ipcidr '240.0.0.0/4' option dns_respect_rules '1' option dns_loopback_compat '0' - list dns_loopback_compat_resolver 'udp://223.5.5.5:53' - list dns_loopback_compat_resolver 'udp://119.29.29.29:53' option dns_migrated '1' option block_quic '0' option singbox_independent_cache '0' diff --git a/clashoo/files/etc/init.d/clashoo b/clashoo/files/etc/init.d/clashoo index 5a1cd15f..f4f347f2 100755 --- a/clashoo/files/etc/init.d/clashoo +++ b/clashoo/files/etc/init.d/clashoo @@ -1089,6 +1089,38 @@ _dns_nameserver_inherit_mode() { printf '%s' inherit } +_dns_proxy_nameservers() { + local i=0 t en a p port s out="" prefix + while :; do + t="$(uci -q get clashoo.@dnsservers[$i].ser_type 2>/dev/null)" + [ -n "$t" ] || break + en="$(uci -q get clashoo.@dnsservers[$i].enabled 2>/dev/null)" + a="$(uci -q get clashoo.@dnsservers[$i].ser_address 2>/dev/null)" + p="$(uci -q get clashoo.@dnsservers[$i].protocol 2>/dev/null)" + port="$(uci -q get clashoo.@dnsservers[$i].ser_port 2>/dev/null)" + i=$((i + 1)) + [ "$t" = "proxy-server-nameserver" ] || continue + [ "$en" = "0" ] && continue + if printf '%s' "$a" | grep -Eq '^[A-Za-z][A-Za-z0-9+.-]*://'; then + s="$a" + else + case "$p" in + ''|none) prefix='' ;; + udp|udp://) prefix='udp://' ;; + tcp|tcp://) prefix='tcp://' ;; + dot|tls|tls://) prefix='tls://' ;; + doh|https|https://) prefix='https://' ;; + doq|quic|quic://) prefix='quic://' ;; + *) prefix="$p" ;; + esac + s="${prefix}${a}" + [ -n "$port" ] && s="${s}:${port}" + fi + [ -n "$s" ] && out="${out}${out:+ }${s}" + done + printf '%s' "$out" +} + _adapt_dns_loopback_resolver() { local filter listen host host_pattern old_port servers replacement tmp [ "$(uci -q get clashoo.config.dns_loopback_compat 2>/dev/null)" = "1" ] || return 0 @@ -1121,8 +1153,8 @@ _adapt_dns_loopback_resolver() { servers="$(yq -M e -r '.dns."proxy-server-nameserver"[]' "$CONFIG_YAML" 2>/dev/null)" printf '%s\n' "$servers" | grep -Eiq "^([A-Za-z][A-Za-z0-9+.-]*://)?(${host_pattern}):${old_port}($|[/#?])" || return 0 - replacement="$(uci -q get clashoo.config.dns_loopback_compat_resolver 2>/dev/null)" - [ -n "$replacement" ] || replacement='udp://223.5.5.5:53 udp://119.29.29.29:53' + replacement="$(_dns_proxy_nameservers)" + [ -n "$replacement" ] || replacement='tls://1.1.1.1:853' tmp="$(mktemp "${CONFIG_YAML}.dns-loopback.XXXXXX" 2>/dev/null)" || return 0 export CLASHOO_DNS_OLD_PORT="$old_port" export CLASHOO_DNS_HOST_PATTERN="$host_pattern" diff --git a/doc/lucky1.png b/doc/lucky1.png new file mode 100644 index 00000000..a5b41b6e Binary files /dev/null and b/doc/lucky1.png differ diff --git a/doc/lucky2.png b/doc/lucky2.png new file mode 100644 index 00000000..ba4c026f Binary files /dev/null and b/doc/lucky2.png differ diff --git a/doc/lucky3.png b/doc/lucky3.png new file mode 100644 index 00000000..6fa7982f Binary files /dev/null and b/doc/lucky3.png differ diff --git a/doc/taskplan1.png b/doc/taskplan1.png deleted file mode 100644 index 1f8db7be..00000000 Binary files a/doc/taskplan1.png and /dev/null differ diff --git a/doc/taskplan2.png b/doc/taskplan2.png deleted file mode 100644 index edb45d6d..00000000 Binary files a/doc/taskplan2.png and /dev/null differ diff --git a/doc/taskplan3.png b/doc/taskplan3.png deleted file mode 100644 index d4794702..00000000 Binary files a/doc/taskplan3.png and /dev/null differ diff --git a/doc/view.png b/doc/view.png deleted file mode 100644 index 169e112f..00000000 Binary files a/doc/view.png and /dev/null differ diff --git a/doc/view2.png b/doc/view2.png deleted file mode 100644 index 9058c632..00000000 Binary files a/doc/view2.png and /dev/null differ diff --git a/luci-app-clashoo/Makefile b/luci-app-clashoo/Makefile index 414ae71c..10f2b4c2 100644 --- a/luci-app-clashoo/Makefile +++ b/luci-app-clashoo/Makefile @@ -2,7 +2,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-clashoo PKG_VERSION:=1.30.0 -PKG_RELEASE:=15 +PKG_RELEASE:=16 PKG_MAINTAINER:=kenzok8 PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) diff --git a/luci-app-clashoo/htdocs/luci-static/resources/view/clashoo/config.js b/luci-app-clashoo/htdocs/luci-static/resources/view/clashoo/config.js index 0fc8f2cd..8a9bb6b5 100644 --- a/luci-app-clashoo/htdocs/luci-static/resources/view/clashoo/config.js +++ b/luci-app-clashoo/htdocs/luci-static/resources/view/clashoo/config.js @@ -1425,12 +1425,8 @@ return view.extend({ o.description = _("DNS queries follow the routing rules, so overseas domains resolve through the proxy instead of a polluted result. Requires proxy-server-nameserver."); o = s.option(form.Flag, 'dns_loopback_compat', _("OpenClash/Nikki Loopback DNS Compatibility")); o.default = '0'; - o.description = _("Optional compatibility for normal managed mode. At runtime, replace only proxy node resolvers that point back to the imported configuration's own DNS listener. Core Only mode stays verbatim; the source configuration and unrelated local DNS services remain unchanged."); + o.description = _("Optional compatibility for normal managed mode. At runtime, replace only proxy node resolvers that point back to the imported configuration's own DNS listener with the proxy-server-nameserver setting. Core Only mode stays verbatim; the source configuration and unrelated local DNS services remain unchanged."); o.depends('enable_dns', '1'); - o = s.option(form.DynamicList, 'dns_loopback_compat_resolver', _("Loopback DNS Replacement")); - o.placeholder = 'udp://223.5.5.5:53'; - o.description = _("Used only when the compatibility switch detects a stale self-reference. When empty, udp://223.5.5.5:53 and udp://119.29.29.29:53 are used. Plain IP DNS is recommended to avoid bootstrap loops."); - o.depends('dns_loopback_compat', '1'); o = s.option(form.Value, 'dns_ecs', _("ECS Client Subnet")); o.placeholder = _("Recommended blank"); o.description = _("mihomo writes the ecs parameter to DNS URLs; sing-box writes dns.client_subnet. Leave empty to skip."); diff --git a/luci-app-clashoo/po/templates/clashoo.pot b/luci-app-clashoo/po/templates/clashoo.pot index db1f757a..d31f14df 100644 --- a/luci-app-clashoo/po/templates/clashoo.pot +++ b/luci-app-clashoo/po/templates/clashoo.pot @@ -908,10 +908,7 @@ msgstr "" msgid "Operation failed: " msgstr "" -msgid "Loopback DNS Replacement" -msgstr "" - -msgid "Optional compatibility for normal managed mode. At runtime, replace only proxy node resolvers that point back to the imported configuration's own DNS listener. Core Only mode stays verbatim; the source configuration and unrelated local DNS services remain unchanged." +msgid "Optional compatibility for normal managed mode. At runtime, replace only proxy node resolvers that point back to the imported configuration's own DNS listener with the proxy-server-nameserver setting. Core Only mode stays verbatim; the source configuration and unrelated local DNS services remain unchanged." msgstr "" msgid "Other Configuration Files (upload / overwrite output)" @@ -1511,9 +1508,6 @@ msgstr "" msgid "User-Agent (UA)" msgstr "" -msgid "Used only when the compatibility switch detects a stale self-reference. When empty, udp://223.5.5.5:53 and udp://119.29.29.29:53 are used. Plain IP DNS is recommended to avoid bootstrap loops." -msgstr "" - msgid "Username" msgstr "" diff --git a/luci-app-clashoo/po/zh-cn/clashoo.po b/luci-app-clashoo/po/zh-cn/clashoo.po index 4d376654..fe30cb1b 100644 --- a/luci-app-clashoo/po/zh-cn/clashoo.po +++ b/luci-app-clashoo/po/zh-cn/clashoo.po @@ -912,14 +912,8 @@ msgstr "OpenClash 已启用,请先停用以避免规则冲突" msgid "OpenClash/Nikki Loopback DNS Compatibility" msgstr "OpenClash/Nikki 回环 DNS 兼容" -msgid "Loopback DNS Replacement" -msgstr "回环 DNS 替换地址" - -msgid "Optional compatibility for normal managed mode. At runtime, replace only proxy node resolvers that point back to the imported configuration's own DNS listener. Core Only mode stays verbatim; the source configuration and unrelated local DNS services remain unchanged." -msgstr "用于普通接管模式的可选兼容功能。运行时仅替换指回导入配置自身 DNS 监听的节点解析器;仅内核模式保持原样,源配置和其他本地 DNS 服务不受影响。" - -msgid "Used only when the compatibility switch detects a stale self-reference. When empty, udp://223.5.5.5:53 and udp://119.29.29.29:53 are used. Plain IP DNS is recommended to avoid bootstrap loops." -msgstr "仅在兼容开关检测到失效自引用时使用。留空则使用 udp://223.5.5.5:53 和 udp://119.29.29.29:53。建议使用纯 IP DNS,避免启动解析死循环。" +msgid "Optional compatibility for normal managed mode. At runtime, replace only proxy node resolvers that point back to the imported configuration's own DNS listener with the proxy-server-nameserver setting. Core Only mode stays verbatim; the source configuration and unrelated local DNS services remain unchanged." +msgstr "用于普通接管模式的可选兼容功能。运行时仅把指回导入配置自身 DNS 监听的节点解析器替换为 proxy-server-nameserver(节点域名解析)的设置;仅内核模式保持原样,源配置和其他本地 DNS 服务不受影响。" msgid "Operation failed: " msgstr "操作失败: " diff --git a/luci-app-wizard/luasrc/controller/wizard.lua b/luci-app-wizard/luasrc/controller/wizard.lua index 31544c2d..09795581 100644 --- a/luci-app-wizard/luasrc/controller/wizard.lua +++ b/luci-app-wizard/luasrc/controller/wizard.lua @@ -4,7 +4,25 @@ local uci = luci.model.uci.cursor() local http = require "luci.http" function index() - entry({"admin", "index"}, call("landing_page"), _("Home") , 1).dependent = false + entry({"admin", "index"}, call("landing_page"), _("Home") , 0).dependent = false + + -- 2. 核心:直接改写 admin 根节点的调度目标 + -- 这样当用户访问 /admin、登录后跳转或访问根目录时,无需经过 firstchild(),直接执行 landing_page() + local admin = node("admin") + if admin then + admin.target = call("landing_page") + end +end + +local function check_wifi() + local has_wifi = false + pcall(function() + uci:foreach("wireless", "wifi-device", function(s) + has_wifi = true + return false -- 检测到任意 wifi-device 即终止遍历 + end) + end) + return has_wifi end function landing_page() @@ -22,7 +40,13 @@ function landing_page() http.redirect(luci.dispatcher.build_url("admin","quickstart")); end else - http.redirect(luci.dispatcher.build_url("admin","status", "overview")) - end + if check_wifi() then + -- 具备无线功能,跳转至常用无线仪表盘界面 + http.redirect(luci.dispatcher.build_url("admin", "dashboard")) + else + -- 无无线设备(纯有线环境),跳转至原生状态概览 + http.redirect(luci.dispatcher.build_url("admin", "status", "overview")) + end + end end diff --git a/luci-app-wizard/po/zh_Hans/wizard.po b/luci-app-wizard/po/zh_Hans/wizard.po index b04fe8d1..6e77f94f 100644 --- a/luci-app-wizard/po/zh_Hans/wizard.po +++ b/luci-app-wizard/po/zh_Hans/wizard.po @@ -12,6 +12,9 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" +msgid "Home" +msgstr "首页" + msgid "Setup Wizard" msgstr "快速设置向导" diff --git a/v2ray-core/Makefile b/v2ray-core/Makefile index 34f971f4..dbda723e 100644 --- a/v2ray-core/Makefile +++ b/v2ray-core/Makefile @@ -5,12 +5,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=v2ray-core -PKG_VERSION:=5.53.0 +PKG_VERSION:=5.54.0 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://codeload.github.com/v2fly/v2ray-core/tar.gz/v$(PKG_VERSION)? -PKG_HASH:=f2a78ff50ce36c4a577a39016485cdfb835a75137d514a0a5e8e9e983f0d38bb +PKG_HASH:=509aaf0d0c07d1d911223ad80a622e2e8eec214e6b950c1189187f25a7d779fb PKG_LICENSE:=MIT PKG_LICENSE_FILES:=LICENSE