update 2026-09-21 10:56:09
No files matched your search
@@ -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)
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
After Width: | Height: | Size: 91 KiB |
|
After Width: | Height: | Size: 319 KiB |
|
After Width: | Height: | Size: 389 KiB |
|
Before Width: | Height: | Size: 640 KiB |
|
Before Width: | Height: | Size: 550 KiB |
|
Before Width: | Height: | Size: 547 KiB |
|
Before Width: | Height: | Size: 659 KiB |
|
Before Width: | Height: | Size: 650 KiB |
@@ -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)
|
||||
|
||||
|
||||
@@ -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.");
|
||||
|
||||
@@ -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 ""
|
||||
|
||||
|
||||
@@ -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 "操作失败: "
|
||||
|
||||
@@ -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
|
||||
@@ -12,6 +12,9 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
|
||||
msgid "Home"
|
||||
msgstr "首页"
|
||||
|
||||
msgid "Setup Wizard"
|
||||
msgstr "快速设置向导"
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||