feat(dns.sh): redesign static text menu

This commit is contained in:
sofia
2026-01-23 14:42:27 +08:00
parent 236fb8cd9a
commit 5647f60373
2 changed files with 382 additions and 104 deletions

View File

@@ -23,17 +23,16 @@ DNS_SET_OK="DNS模式已设置为"
DNS_CORE_UNSUPPORTED="当前内核不支持该功能!"
#=====DNS重定向=====
DNS_REDIR_WARN="仅限搭配第三方DNS服务(AdGuard、SmartDNS等)使用!"
DNS_REDIR_WARN="仅限搭配第三方DNS服务AdGuard、SmartDNS等使用!"
DNS_REDIR_HINT="建议第三方DNS上游指向"
DNS_REDIR_INPUT="请输入第三方DNS服务监听端口(0重置)>"
DNS_REDIR_NO_SERVICE="该端口未检测到正在运行的DNS服务"
#=====Fake-IP=====
DNS_FAKEIP_DESC="用于解决Fake-IP模式下部分地址或应用无法连接的问题"
DNS_FAKEIP_TIP="脚本已内置大量地址,只需添加出现问题的地址"
DNS_FAKEIP_EXAMPLE="示例a.b.com\n*.b.com\n*.*.b.com"
DNS_FAKEIP_EXAMPLE="示例格式如下:\na.b.com\n*.b.com\n*.*.b.com"
DNS_FAKEIP_EXIST="已添加的Fake-IP过滤地址"
DNS_FAKEIP_EMPTY="尚未添加Fake-IP过滤地址"
DNS_FAKEIP_EMPTY="当前尚未添加任何自定义Fake-IP过滤地址"
DNS_FAKEIP_EDIT="输入序号移除,输入地址添加"
#=====DNS高级=====
@@ -42,12 +41,11 @@ DNS_ADV_CERT="使用DoH/DoT需具备本地根证书文件"
DNS_ADV_SINGBOX_LIMIT="注意SingBox内核仅加载第一个DNS"
DNS_ADV_EDIT_DIRECT="修改DIRECT-DNS"
DNS_ADV_EDIT_PROXY="修改PROXY-DNS(该DNS查询会经过节点)"
DNS_ADV_EDIT_DEFAULT="修改DEFAULT-DNS(必须是IP,用于解析其他DNS)"
DNS_ADV_EDIT_PROXY="修改PROXY-DNS该DNS查询会经过节点"
DNS_ADV_EDIT_DEFAULT="修改DEFAULT-DNS必须是IP用于解析其他DNS"
DNS_ADV_AUTO_ENCRYPT="一键配置加密DNS"
DNS_ADV_RESET="重置默认DNS配置"
DNS_INPUT_NEW="请输入新的DNS地址>"
DNS_IPV6_NOT_SUPPORT="该选项暂不支持IPv6加密DNS"
DNS_ENCRYPT_OK="已设置加密DNS如遇DNS解析问题请重置DNS配置"

View File

@@ -12,79 +12,233 @@ set_dns_mod() {
[ -z "$hosts_opt" ] && hosts_opt=ON
[ -z "$dns_protect" ] && dns_protect=ON
[ -z "$ecs_subnet" ] && ecs_subnet=OFF
echo "-----------------------------------------------"
echo -e "$DNS_CURRENT_MODE \033[47;30m $dns_mod \033[0m"
echo -e "\033[33m$DNS_RESTART_NOTICE\033[0m"
echo "-----------------------------------------------"
echo -e " 1 MIX$COMMON_MOD\t\033[32m$DNS_MODE_MIX_DESC\033[0m"
echo -e " 2 Route$COMMON_MOD\t\033[32m$DNS_MODE_ROUTE_DESC\033[0m"
echo -e " 3 Redir$COMMON_MOD\t\033[33m$DNS_MODE_REDIR_DESC\033[0m"
echo "-----------------------------------------------"
echo -e " 4 $DNS_MENU_PROTECT\t\033[36m$dns_protect\033[0m\t$DNS_PROTECT_DESC"
echo -e " 5 $DNS_MENU_HOSTS\t\033[36m$hosts_opt\033[0m\t$DNS_HOSTS_DESC"
echo -e " 6 $DNS_MENU_ECS\t\033[36m$ecs_subnet\033[0m\t$DNS_ECS_DESC"
echo -e " 7 $DNS_MENU_REDIR\033[36m$dns_redir_port\033[0m\t$DNS_REDIR_PORT_DESC"
line_break
separator_line "="
content_line "$DNS_CURRENT_MODE\033[47;30m $dns_mod \033[0m"
content_line "\033[33m$DNS_RESTART_NOTICE\033[0m"
separator_line "-"
content_line "1) MIX$COMMON_MOD\t\033[32m$DNS_MODE_MIX_DESC\033[0m"
content_line "2) Route$COMMON_MOD\t\033[32m$DNS_MODE_ROUTE_DESC\033[0m"
content_line "3) Redir$COMMON_MOD\t\033[33m$DNS_MODE_REDIR_DESC\033[0m"
content_line ""
content_line "4) $DNS_MENU_PROTECT\t\033[36m$dns_protect\033[0m\t$DNS_PROTECT_DESC"
content_line "5) $DNS_MENU_HOSTS\t\033[36m$hosts_opt\033[0m\t$DNS_HOSTS_DESC"
content_line "6) $DNS_MENU_ECS\t\033[36m$ecs_subnet\033[0m\t$DNS_ECS_DESC"
content_line "7) $DNS_MENU_REDIR\033[36m$dns_redir_port\033[0m\t$DNS_REDIR_PORT_DESC"
[ "$dns_mod" = "mix" ] &&
echo -e " 8 \033[33m$DNS_FAKEIP_MENU\033[0m"
echo -e " 9 \033[36m$DNS_ADV_MENU\033[0m"
echo "-----------------------------------------------"
echo " 0 $COMMON_BACK"
read -r -p "$COMMON_INPUT > " num
content_line "8) \033[33m$DNS_FAKEIP_MENU\033[0m"
content_line "9) \033[36m$DNS_ADV_MENU\033[0m"
content_line "0) $COMMON_BACK"
separator_line "="
read -r -p "$COMMON_INPUT> " num
case "$num" in
"" | 0)
break
;;
1 | 2)
line_break
separator_line "="
if echo "$crashcore" | grep -q 'singbox' || [ "$crashcore" = meta ]; then
[ "$num" = 1 ] && dns_mod=mix || dns_mod=route
setconfig dns_mod "$dns_mod"
echo "-----------------------------------------------"
echo -e "\033[36m$DNS_SET_OK: $dns_mod\033[0m"
content_line "\033[36m$DNS_SET_OK$dns_mod\033[0m"
else
echo -e "\033[31m$DNS_CORE_UNSUPPORTED\033[0m"
sleep 1
econtent_line "\033[31m$DNS_CORE_UNSUPPORTED\033[0m"
fi
separator_line "="
sleep 1
;;
3)
dns_mod=redir_host
setconfig dns_mod "$dns_mod"
echo -e "\033[36m$DNS_SET_OK: $dns_mod\033[0m"
line_break
separator_line "="
content_line "\033[36m$DNS_SET_OK$dns_mod\033[0m"
separator_line "="
;;
4)
[ "$dns_protect" = ON ] && dns_protect=OFF || dns_protect=ON
setconfig dns_protect "$dns_protect"
while true; do
line_break
separator_line "="
if [ "$dns_protect" = ON ]; then
content_line "当前\033[33m已启用\033[0mDNS防泄漏是否确认禁用"
else
content_line "当前\033[33m已禁用\033[0mDNS防泄漏是否确认启用"
fi
separator_line "-"
content_line "1) 是"
content_line "2) 重置为默认值"
content_line "0) 否,返回上级菜单"
separator_line "="
read -r -p "$COMMON_INPUT> " num
case "$num" in
0)
break
;;
1)
if [ "$dns_protect" = ON ]; then
dns_protect=OFF
else
dns_protect=ON
fi
;;
2)
dns_protect=ON
;;
*)
errornum
sleep 1
continue
;;
esac
setconfig dns_protect "$dns_protect"
line_break
separator_line "="
content_line "\033[32m操作成功\033[0m"
separator_line "="
sleep 1
done
;;
5)
[ "$hosts_opt" = ON ] && hosts_opt=OFF || hosts_opt=ON
setconfig hosts_opt "$hosts_opt"
while true; do
line_break
separator_line "="
if [ "$hosts_opt" = ON ]; then
content_line "当前\033[33m已启用\033[0mHosts优化是否确认禁用"
else
content_line "当前\033[33m已禁用\033[0mHosts优化是否确认启用"
fi
separator_line "-"
content_line "1) 是"
content_line "2) 重置为默认值"
content_line "0) 否,返回上级菜单"
separator_line "="
read -r -p "$COMMON_INPUT> " num
case "$num" in
0)
break
;;
1)
if [ "$hosts_opt" = ON ]; then
hosts_opt=OFF
else
hosts_opt=ON
fi
;;
2)
hosts_opt=ON
;;
*)
errornum
sleep 1
continue
;;
esac
setconfig dns_protect "$hosts_opt"
line_break
separator_line "="
content_line "\033[32m操作成功\033[0m"
separator_line "="
sleep 1
done
;;
6)
[ "$ecs_subnet" = ON ] && ecs_subnet=OFF || ecs_subnet=ON
setconfig ecs_subnet "$ecs_subnet"
while true; do
line_break
separator_line "="
if [ "$ecs_subnet" = ON ]; then
content_line "当前\033[33m已启用\033[0mHosts优化是否确认禁用"
else
content_line "当前\033[33m已禁用\033[0mHosts优化是否确认启用"
fi
separator_line "-"
content_line "1) 是"
content_line "2) 重置为默认值"
content_line "0) 否,返回上级菜单"
separator_line "="
read -r -p "$COMMON_INPUT> " num
case "$num" in
0)
break
;;
1)
if [ "$ecs_subnet" = ON ]; then
ecs_subnet=OFF
else
ecs_subnet=ON
fi
;;
2)
ecs_subnet=OFF
;;
*)
errornum
sleep 1
continue
;;
esac
setconfig dns_protect "$ecs_subnet"
line_break
separator_line "="
content_line "\033[32m操作成功\033[0m"
separator_line "="
sleep 1
done
;;
7)
echo "-----------------------------------------------"
echo -e "\033[31m$DNS_REDIR_WARN\033[0m"
echo -e "\033[33m$DNS_REDIR_HINT 127.0.0.1:$dns_port\033[0m"
echo "-----------------------------------------------"
while true; do
line_break
separator_line "="
content_line "\033[31m$DNS_REDIR_WARN\033[0m"
content_line "\033[33m$DNS_REDIR_HINT 127.0.0.1:$dns_port\033[0m"
content_line ""
content_line "请直接输入旁路由IPV4地址"
content_line "或输入 r 重置DNS劫持端口"
content_line "或输入 0 返回上级菜单"
separator_line "="
read -r -p "请输入> " num
case "$num" in
0)
break
;;
r)
dns_redir_port="$dns_port"
setconfig dns_redir_port
read -r -p "$DNS_REDIR_INPUT" num
if [ "$num" = 0 ]; then
dns_redir_port="$dns_port"
setconfig dns_redir_port
elif [ "$num" -ge 1 ] && [ "$num" -lt 65535 ]; then
if ckcmd netstat && netstat -ntul | grep -q ":$num "; then
dns_redir_port="$num"
setconfig dns_redir_port "$dns_redir_port"
else
echo -e "\033[33m$DNS_REDIR_NO_SERVICE\033[0m"
fi
else
errornum
fi
sleep 1
line_break
separator_line "="
content_line "\033[32m操作成功\033[0m"
separator_line "="
sleep 1
break
;;
*)
if [ "$num" -ge 1 ] && [ "$num" -lt 65535 ]; then
line_break
separator_line "="
if ckcmd netstat && netstat -ntul | grep -q ":$num "; then
dns_redir_port="$num"
setconfig dns_redir_port "$dns_redir_port"
content_line "\033[32m操作成功\033[0m"
separator_line "="
sleep 1
break
else
content_line "\033[33m$DNS_REDIR_NO_SERVICE\033[0m"
separator_line "="
sleep 1
fi
else
errornum
sleep 1
fi
;;
esac
done
;;
8)
fake_ip_filter
@@ -102,31 +256,60 @@ set_dns_mod() {
fake_ip_filter() {
while true; do
echo -e "\033[32m$DNS_FAKEIP_DESC\033[0m"
echo -e "\033[31m$DNS_FAKEIP_TIP\033[0m"
echo -e "\033[36m$DNS_FAKEIP_EXAMPLE\033[0m"
echo "-----------------------------------------------"
line_break
separator_line "="
content_line "\033[32m$DNS_FAKEIP_DESC\033[0m"
content_line "\033[31m$DNS_FAKEIP_TIP\033[0m"
content_line "\033[36m$DNS_FAKEIP_EXAMPLE\033[0m"
separator_line "-"
if [ -s "$CRASHDIR/configs/fake_ip_filter" ]; then
echo -e "\033[33m$DNS_FAKEIP_EXIST\033[0m"
awk '{print NR" "$1}' "$CRASHDIR/configs/fake_ip_filter"
content_line "\033[33m$DNS_FAKEIP_EXIST\033[0m"
content_line ""
awk '{print NR") "$1}' "$CRASHDIR/configs/fake_ip_filter" |
while IFS= read -r line; do
content_line "$line"
done
else
echo -e "\033[33m$DNS_FAKEIP_EMPTY\033[0m"
content_line "\033[33m$DNS_FAKEIP_EMPTY\033[0m"
fi
echo "-----------------------------------------------"
read -r -p "$DNS_FAKEIP_EDIT > " input
content_line ""
content_line "0) 返回上级菜单"
separator_line "="
read -r -p "$DNS_FAKEIP_EDIT> " input
case "$input" in
"" | 0)
break
;;
*)
line_break
separator_line "="
if [ "$input" -ge 1 ] 2>/dev/null; then
sed -i "${input}d" "$CRASHDIR/configs/fake_ip_filter"
echo -e "\033[32m$COMMON_REMOVE_OK\033[0m"
if sed -i "${input}d" "$CRASHDIR/configs/fake_ip_filter"; then
content_line "\033[32m移除成功\033[0m"
else
content_line "\033[31m移除失败\033[0m"
fi
else
echo -e "$COMMON_YOUR_INPUT \033[32m$input\033[0m"
read -r -p "$COMMON_CONFIRM" res
[ "$res" = 1 ] && echo "$input" >>"$CRASHDIR/configs/fake_ip_filter"
content_line "请确认需要添加的地址:\033[32m$input\033[0m"
separator_line "-"
content_line "1) 确认无误"
content_line "0) 返回上级菜单"
separator_line "="
read -r -p "$COMMON_INPUT>" res
if [ "$res" = 1 ]; then
line_break
separator_line "="
if echo "$input" >>"$CRASHDIR/configs/fake_ip_filter"; then
content_line "\033[32m添加成功\033[0m"
else
content_line "\033[31m添加失败\033[0m"
fi
else
break
fi
fi
separator_line "="
sleep 1
;;
esac
@@ -136,53 +319,146 @@ fake_ip_filter() {
# DNS详细设置
set_dns_adv() {
while true; do
echo "-----------------------------------------------"
echo -e "DIRECT-DNS \033[32m$dns_nameserver\033[0m"
echo -e "PROXY-DNS \033[36m$dns_fallback\033[0m"
echo -e "DEFAULT-DNS\033[33m$dns_resolver\033[0m"
line_break
separator_line "="
content_line "\033[31m$DNS_ADV_SINGBOX_LIMIT\033[0m"
content_line "$DNS_ADV_SPLIT"
content_line "\033[33m$DNS_ADV_CERT\033[0m"
content_line ""
content_line "DIRECT-DNS"
content_line "\033[32m$dns_nameserver\033[0m"
content_line ""
echo -e "$DNS_ADV_SPLIT"
echo -e "\033[33m$DNS_ADV_CERT\033[0m"
echo -e "\033[31m$DNS_ADV_SINGBOX_LIMIT\033[0m"
content_line "PROXY-DNS"
content_line "\033[36m$dns_fallback\033[0m"
content_line ""
echo "-----------------------------------------------"
echo -e " 1 $DNS_ADV_EDIT_DIRECT"
echo -e " 2 $DNS_ADV_EDIT_PROXY"
echo -e " 3 $DNS_ADV_EDIT_DEFAULT"
echo -e " 4 \033[32m$DNS_ADV_AUTO_ENCRYPT\033[0m"
echo -e " 9 \033[33m$DNS_ADV_RESET\033[0m"
echo -e " 0 $COMMON_BACK"
echo "-----------------------------------------------"
content_line "DEFAULT-DNS"
content_line "\033[33m$dns_resolver\033[0m"
content_line ""
separator_line "-"
content_line "1) $DNS_ADV_EDIT_DIRECT"
content_line "2) $DNS_ADV_EDIT_PROXY"
content_line "3) $DNS_ADV_EDIT_DEFAULT"
content_line "4) \033[32m$DNS_ADV_AUTO_ENCRYPT\033[0m"
content_line "9) \033[33m$DNS_ADV_RESET\033[0m"
content_line "0) $COMMON_BACK"
separator_line "="
read -r -p "$COMMON_INPUT > " num
case "$num" in
"" | 0)
break
;;
1)
read -r -p "$DNS_INPUT_NEW" dns_nameserver
dns_nameserver=$(echo "$dns_nameserver" | sed 's#|#,\ #g')
[ -n "$dns_nameserver" ] && setconfig dns_nameserver "'$dns_nameserver'"
echo -e "\033[32m$COMMON_SUCCESS\033[0m"
line_break
separator_line "="
content_line "当前DIRECT-DNS\033[32m$dns_nameserver\033[0m"
separator_line "-"
content_line "请直接输入新的DIRECT-DNS地址"
content_line "或输入 r 重置DIRECT-DNS地址"
content_line "或输入 0 返回上级菜单"
separator_line "="
read -r -p "请输入> " res
case "$res" in
0)
continue
;;
r)
dns_nameserver="127.0.0.1"
setconfig dns_nameserver "'$dns_nameserver'"
line_break
separator_line "="
content_line "\033[32m操作成功\033[0m"
;;
*)
dns_nameserver=$(echo "$res" | sed 's#|#,\ #g')
line_break
separator_line "="
if [ -n "$dns_nameserver" ]; then
setconfig dns_nameserver "'$dns_nameserver'"
content_line "\033[32m操作成功\033[0m"
else
ontent_line "\033[32m操作失败\033[0m"
fi
;;
esac
separator_line "="
;;
2)
read -r -p "$DNS_INPUT_NEW" dns_fallback
dns_fallback=$(echo "$dns_fallback" | sed 's#|#,\ #g')
[ -n "$dns_fallback" ] && setconfig dns_fallback "'$dns_fallback'"
echo -e "\033[32m$COMMON_SUCCESS\033[0m"
line_break
separator_line "="
content_line "当前PROXY-DNS\033[32m$dns_fallback\033[0m"
separator_line "-"
content_line "请直接输入新的PROXY-DNS地址"
content_line "或输入 r 重置PROXY-DNS地址"
content_line "或输入 0 返回上级菜单"
separator_line "="
read -r -p "请输入> " res
case "$res" in
0)
continue
;;
r)
dns_fallback="1.1.1.1, 8.8.8.8"
setconfig dns_fallback "'$dns_fallback'"
line_break
separator_line "="
content_line "\033[32m操作成功\033[0m"
;;
*)
dns_fallback=$(echo "$res" | sed 's#|#,\ #g')
line_break
separator_line "="
if [ -n "$dns_fallback" ]; then
setconfig dns_fallback "'$dns_fallback'"
content_line "\033[32m操作成功\033[0m"
else
ontent_line "\033[32m操作失败\033[0m"
fi
;;
esac
separator_line "="
;;
3)
read -r -p "$DNS_INPUT_NEW" text
if echo "$text" | grep -qE '://.*::'; then
echo -e "\033[31m$DNS_IPV6_NOT_SUPPORT\033[0m"
else
dns_resolver=$(echo "$text" | sed 's#|#,\ #g')
line_break
separator_line "="
content_line "当前DEFAULT-DNS\033[32m$dns_resolver\033[0m"
separator_line "-"
content_line "请直接输入新的DEFAULT-DNS地址"
content_line "或输入 r 重置DEFAULT-DNS地址"
content_line "或输入 0 返回上级菜单"
separator_line "="
read -r -p "请输入> " res
case "$res" in
0)
continue
;;
"r")
dns_resolver="223.5.5.5, 2400:3200::1"
setconfig dns_resolver "'$dns_resolver'"
echo -e "\033[32m$COMMON_SUCCESS\033[0m"
fi
line_break
separator_line "="
content_line "\033[32m操作成功\033[0m"
;;
*)
line_break
separator_line "="
if echo "$res" | grep -qE '://.*::'; then
content_line "\033[31m$DNS_IPV6_NOT_SUPPORT\033[0m"
else
dns_resolver=$(echo "$res" | sed 's#|#,\ #g')
setconfig dns_resolver "'$dns_resolver'"
content_line "\033[32m$COMMON_SUCCESS\033[0m"
fi
;;
esac
separator_line "="
;;
4)
line_break
separator_line "="
if echo "$crashcore" | grep -qE 'meta|singbox'; then
dns_nameserver='https://dns.alidns.com/dns-query, https://doh.pub/dns-query'
dns_fallback='https://cloudflare-dns.com/dns-query, https://dns.google/dns-query, https://doh.opendns.com/dns-query'
@@ -190,17 +466,21 @@ set_dns_adv() {
setconfig dns_nameserver "'$dns_nameserver'"
setconfig dns_fallback "'$dns_fallback'"
setconfig dns_resolver "'$dns_resolver'"
echo -e "\033[32m$DNS_ENCRYPT_OK\033[0m"
content_line "\033[32m$DNS_ENCRYPT_OK\033[0m"
else
echo -e "\033[31m$DNS_CORE_REQUIRE\033[0m"
content_line "\033[31m$DNS_CORE_REQUIRE\033[0m"
fi
separator_line "="
;;
9)
setconfig dns_nameserver
setconfig dns_fallback
setconfig dns_resolver
. "$CRASHDIR/libs/get_config.sh"
echo -e "\033[32m$COMMON_SUCCESS\033[0m"
line_break
separator_line "="
content_line "\033[32m$COMMON_SUCCESS\033[0m"
separator_line "="
;;
*)
errornum