From 0a0e5c0af971996a692b4f182da8dea07982dfeb Mon Sep 17 00:00:00 2001 From: juewuy Date: Wed, 7 Jan 2026 20:17:36 +0800 Subject: [PATCH] =?UTF-8?q?~=E5=A2=9E=E5=8A=A0ecs=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/libs/get_ecsip.sh | 17 +++++++++++++++++ scripts/libs/web_get_lite.sh | 4 ++-- scripts/menus/dns.sh | 9 ++++++++- scripts/starts/clash_modify.sh | 9 +++++++++ scripts/starts/singbox_modify.sh | 22 +++++++++++++++------- 5 files changed, 51 insertions(+), 10 deletions(-) create mode 100644 scripts/libs/get_ecsip.sh diff --git a/scripts/libs/get_ecsip.sh b/scripts/libs/get_ecsip.sh new file mode 100644 index 00000000..d99a15ef --- /dev/null +++ b/scripts/libs/get_ecsip.sh @@ -0,0 +1,17 @@ + +get_ecs_address() { + ip=$(uci get network.wan.dns 2>/dev/null) + [ -n "$ip" ] && return + for f in /tmp/resolv.conf.auto /tmp/resolv.conf /tmp/resolv.conf.d/resolv.conf.auto; do + [ -f "$f" ] || continue + ip=$(grep -A2 "^# Interface wan" "$f" | grep nameserver | awk '{printf "%s ", $2}') + [ -n "$ip" ] && return + done + . "$CRASHDIR"/libs/web_get_lite.sh + for web in http://members.3322.org/dyndns/getip http://4.ipw.cn http://ipinfo.io/ip; do + ip=$(web_get_lite "$web" 0) + [ -n "$ip" ] && return + done +} +get_ecs_address +[ -n "$ip" ] && ecs_address="${ip%.*}.0/24" diff --git a/scripts/libs/web_get_lite.sh b/scripts/libs/web_get_lite.sh index c8172674..cf485b18 100644 --- a/scripts/libs/web_get_lite.sh +++ b/scripts/libs/web_get_lite.sh @@ -1,7 +1,7 @@ . "$CRASHDIR"/libs/set_proxy.sh -#$1:目标地址 $2:json字符串 +#$1:目标地址 $2:禁用proxy web_get_lite() { - setproxy + [ -z "$2" ] && setproxy if curl --version >/dev/null 2>&1; then curl -ksSl --connect-timeout 3 "$1" 2>/dev/null else diff --git a/scripts/menus/dns.sh b/scripts/menus/dns.sh index b479786c..1407f068 100644 --- a/scripts/menus/dns.sh +++ b/scripts/menus/dns.sh @@ -7,6 +7,7 @@ __IS_MODULE_DNS_LOADED=1 set_dns_mod() { #DNS模式设置 [ -z "$hosts_opt" ] && hosts_opt=ON [ -z "$dns_protect" ] && dns_protect=ON + [ -z "$ecs_subnet" ] && ecs_subnet=OFF || ecs_subnet=ON echo "-----------------------------------------------" echo -e "当前DNS运行模式为:\033[47;30m $dns_mod \033[0m" echo -e "\033[33m切换模式后需要手动重启服务以生效!\033[0m" @@ -17,7 +18,8 @@ set_dns_mod() { #DNS模式设置 echo "-----------------------------------------------" echo -e " 4 DNS防泄漏: \033[36m$dns_protect\033[0m ———启用时少量网站可能连接卡顿" echo -e " 5 Hosts优化: \033[36m$hosts_opt\033[0m ———调用本机hosts并劫持NTP服务" - echo -e " 6 DNS劫持端口:\033[36m$dns_redir_port\033[0m ———用于兼容第三方DNS服务" + echo -e " 6 ECS优化: \033[36m$ecs_subnet\033[0m ———解决CDN下载浪费流量等问题" + echo -e " 7 DNS劫持端口:\033[36m$dns_redir_port\033[0m ———用于兼容第三方DNS服务" [ "$dns_mod" = "mix" ] && echo -e " 8 管理MIX模式\033[33mFake-ip过滤列表\033[0m" echo -e " 9 修改\033[36mDNS服务器\033[0m" @@ -68,6 +70,11 @@ set_dns_mod() { #DNS模式设置 set_dns_mod ;; 6) + [ "$ecs_subnet" = "ON" ] && ecs_subnet=OFF || ecs_subnet=ON + setconfig ecs_subnet "$ecs_subnet" + set_dns_mod + ;; + 7) echo "-----------------------------------------------" echo -e "\033[31m仅限搭配第三方DNS服务(AdGuard、SmartDNS……)使用!\033[0m" echo -e "\033[33m设置为第三方DNS服务的监听端口即可修改防火墙劫持!\n建议在第三方DNS服务中将上游DNS指向【localhost:$dns_port】\033[0m" diff --git a/scripts/starts/clash_modify.sh b/scripts/starts/clash_modify.sh index bdda33b4..e08e9be1 100644 --- a/scripts/starts/clash_modify.sh +++ b/scripts/starts/clash_modify.sh @@ -16,6 +16,15 @@ modify_yaml() { #Meta内核专属配置 [ "$crashcore" = 'meta' ] && { [ "$redir_mod" != "纯净模式" ] && [ -z "$(grep 'PROCESS' "$CRASHDIR"/yamls/*.yaml)" ] && find_process='find-process-mode: "off"' + #ecs优化 + [ "$ecs_subnet" = ON ] && { + . "$CRASHDIR"/libs/get_ecsip.sh + if [ -n "$ecs_address" ];then + dns_fallback=$(echo "$dns_fallback, " | sed "s|, |#ecs-override=true\&ecs=$ecs_address, |g" | sed 's|, $||') + else + logger "自动获取ecs网段失败!" + fi + } } #dns配置 [ -z "$(cat "$CRASHDIR"/yamls/user.yaml 2>/dev/null | grep '^dns:')" ] && { diff --git a/scripts/starts/singbox_modify.sh b/scripts/starts/singbox_modify.sh index 8b778205..3d6fd345 100644 --- a/scripts/starts/singbox_modify.sh +++ b/scripts/starts/singbox_modify.sh @@ -63,8 +63,7 @@ modify_json() { EOF #生成add_hosts.json if [ "$hosts_opt" != "OFF" ]; then #本机hosts - sys_hosts=/etc/hosts - [ -s /data/etc/custom_hosts ] && sys_hosts=/data/etc/custom_hosts + [ -s /data/etc/custom_hosts ] && custom_hosts='"/data/etc/custom_hosts",' #NTP劫持 cat >"$TMPDIR"/jsons/add_hosts.json <"$TMPDIR"/jsons/add_rule_set.json <"$TMPDIR"/jsons/dns.json <