feat(2_settings.sh): redesign static text menu

This commit is contained in:
sofia
2026-01-22 23:57:57 +08:00
parent 9ca503ec82
commit a91cfc44ca
3 changed files with 539 additions and 290 deletions

View File

@@ -1,7 +1,7 @@
# ================================================= # =================================================
# Settings main menu # Settings main menu
# ================================================= # =================================================
SET_MENU_TITLE="欢迎使用功能设置菜单" SET_MENU_TITLE="功能设置菜单"
SET_MENU_REDIR="路由模式设置:" SET_MENU_REDIR="路由模式设置:"
SET_MENU_DNS="DNS设置 " SET_MENU_DNS="DNS设置 "
SET_MENU_FW_FILTER="透明路由流量过滤" SET_MENU_FW_FILTER="透明路由流量过滤"
@@ -17,14 +17,14 @@ SET_MENU_UI="UI切换"
# Main menu messages # Main menu messages
# ================================================= # =================================================
SET_WARN_NONROOT="非root用户可能无法正确配置其他模式是否继续" SET_WARN_NONROOT="非root用户可能无法正确配置其他模式是否继续"
SET_SKIP_CERT_ON="已启跳过本地证书验证!" SET_SKIP_CERT_ON="已启跳过本地证书验证!"
SET_SKIP_CERT_OFF="已关闭跳过本地证书验证!" SET_SKIP_CERT_OFF="已禁用跳过本地证书验证!"
SET_SNIFFER_CORE_SWITCH="已自动切换至Meta内核域名嗅探需要" SET_SNIFFER_CORE_SWITCH="已自动切换至Meta内核域名嗅探需要"
SET_SNIFFER_LOCKED="当前内核与DNS模式组合下域名嗅探无法关闭" SET_SNIFFER_LOCKED="当前内核与DNS模式组合下域名嗅探无法关闭"
SET_CORE_RUNNING="检测到服务正在运行,需要先停止服务!" SET_CORE_RUNNING="检测到服务正在运行,需要先停止服务!"
SET_CORE_STOP_CONFIRM="是否停止服务" SET_CORE_STOP_CONFIRM="是否确认停止服务"
# ================================================= # =================================================
# Backup / Restore / Reset # Backup / Restore / Reset
@@ -33,9 +33,11 @@ SET_BACKUP="备份脚本设置"
SET_RESTORE="还原脚本设置" SET_RESTORE="还原脚本设置"
SET_RESET="重置脚本设置" SET_RESET="重置脚本设置"
SET_BACKUP_OK="脚本设置已备份" SET_BACKUP_OK="备份脚本设置成功"
SET_BACKUP_FAIL="备份脚本设置失败!"
SET_RESTORE_OK="脚本设置已还原!(被覆盖配置已备份)" SET_RESTORE_OK="脚本设置已还原!(被覆盖配置已备份)"
SET_RESET_OK="脚本设置已重置!(旧配置已备份)" SET_RESET_OK="重置脚本设置成功!(旧配置已备份)"
SET_RESET_FAIL="重置脚本设置失败!"
SET_BACKUP_MISS="未找到备份文件,请先备份!" SET_BACKUP_MISS="未找到备份文件,请先备份!"
SET_NEED_RESTART="请重新启动脚本以生效!" SET_NEED_RESTART="请重新启动脚本以生效!"
@@ -45,7 +47,7 @@ SET_NEED_RESTART="请重新启动脚本以生效!"
SET_REDIR_DEFAULT="Redir模式" SET_REDIR_DEFAULT="Redir模式"
SET_REDIR_CURRENT="当前路由模式为:" SET_REDIR_CURRENT="当前路由模式为:"
SET_CORE_CURRENT="ShellCrash 核心为:" SET_CORE_CURRENT="ShellCrash 核心为:"
SET_REDIR_RESTART_HINT="切换模式后需要手动重启服务以生效!" SET_REDIR_RESTART_HINT="注意:切换模式后需要手动重启服务以生效!"
SET_REDIR_APPLIED="已设为" SET_REDIR_APPLIED="已设为"
@@ -57,7 +59,7 @@ SET_REDIR_TUN="Tun模式"
SET_REDIR_REDIRDES="Redir转发TCP不转发UDP" SET_REDIR_REDIRDES="Redir转发TCP不转发UDP"
SET_REDIR_MIXDES="Redir转发TCPTun转发UDP" SET_REDIR_MIXDES="Redir转发TCPTun转发UDP"
SET_REDIR_TPROXYDES="Tproxy转发TCP&UDP" SET_REDIR_TPROXYDES="Tproxy转发TCP&UDP"
SET_REDIR_TUNDES="Tun转发TCP&UDP(占用高不推荐)" SET_REDIR_TUNDES="Tun转发TCP&UDP占用高不推荐"
SET_NO_MOD="设备未检测到内核模块:" SET_NO_MOD="设备未检测到内核模块:"
SET_NO_MOD2="请尝试其他模式或者安装相关依赖!" SET_NO_MOD2="请尝试其他模式或者安装相关依赖!"
@@ -72,7 +74,8 @@ SET_FW_SWITCH="切换防火墙应用"
SET_FW_AREA_DESC="仅局域网|仅本机|局域网+本机|纯净模式|旁路转发" SET_FW_AREA_DESC="仅局域网|仅本机|局域网+本机|纯净模式|旁路转发"
FW_AREA_NOTE="如你使用了第三方DNS如smartdns等请勿启用本机劫持或使用shellcrash用户执行" FW_AREA_NOTE_1="如你使用了第三方DNS如smartdns等"
FW_AREA_NOTE_2="请勿启用本机劫持或使用shellcrash用户执行"
FW_AREA_LAN="仅劫持局域网流量" FW_AREA_LAN="仅劫持局域网流量"
FW_AREA_LOCAL="仅劫持本机流量" FW_AREA_LOCAL="仅劫持本机流量"
FW_AREA_BOTH="劫持局域网 + 本机流量" FW_AREA_BOTH="劫持局域网 + 本机流量"
@@ -88,7 +91,8 @@ VM_DISABLE="禁用劫持"
VM_INPUT_INFO="多个网段请用空格连接可使用【ip route】命令查看例如" VM_INPUT_INFO="多个网段请用空格连接可使用【ip route】命令查看例如"
VM_INPUT_NET="请输入自定义网段" VM_INPUT_NET="请输入自定义网段"
VM_NO_NET_DETECTED="未检测到容器或虚拟机网段,请先运行容器后再运行脚本,或选择手动设置网段!" VM_NO_NET_DETECTED="未检测到容器或虚拟机网段,请先运行容器后再运行脚本,或选择手动设置网段!"
VM_INPUT_DESC="多个网段请使用空格分隔可通过【ip route】命令查看,例如:" VM_INPUT_DESC_1="多个网段请使用空格分隔可通过【ip route】命令查看"
VM_INPUT_DESC_2="例如:"
#inputport #inputport
INPUT_PORT="请输入端口号" INPUT_PORT="请输入端口号"

View File

@@ -1,8 +1,7 @@
COMMON_INPUT="请输入对应数字" COMMON_INPUT="请输入对应标号"
COMMON_BACK="返回上级菜单" COMMON_BACK="返回上级菜单"
COMMON_SUCCESS="设置成功!" COMMON_SUCCESS="设置成功!"
COMMON_FAILED="设置失败!" COMMON_FAILED="设置失败!"
COMMON_UNSET="未设置" COMMON_UNSET="未设置"
COMMON_MOD="模式" COMMON_MOD="模式"

View File

@@ -14,81 +14,154 @@ settings() {
[ -z "$sniffer" ] && sniffer=OFF [ -z "$sniffer" ] && sniffer=OFF
[ -z "$dns_mod" ] && dns_mod='redir_host' [ -z "$dns_mod" ] && dns_mod='redir_host'
echo "-----------------------------------------------" line_break
echo -e "\033[30;47m$SET_MENU_TITLE\033[0m" separator_line "="
echo "-----------------------------------------------" content_line "\033[30;47m$SET_MENU_TITLE\033[0m"
echo -e " 1 $SET_MENU_REDIR\t\033[36m$redir_mod$MENU_MOD\033[0m" separator_line "-"
echo -e " 2 $SET_MENU_DNS\t\033[36m$dns_mod\033[0m" content_line "1) $SET_MENU_REDIR\t\033[36m$redir_mod$MENU_MOD\033[0m"
echo -e " 3 $SET_MENU_FW_FILTER" content_line "2) $SET_MENU_DNS\t\033[36m$dns_mod\033[0m"
content_line "3) $SET_MENU_FW_FILTER"
[ "$disoverride" != "1" ] && { [ "$disoverride" != "1" ] && {
echo -e " 4 $SET_MENU_SKIP_CERT\t\033[36m$skip_cert\033[0m" content_line "4) $SET_MENU_SKIP_CERT\t\033[36m$skip_cert\033[0m"
echo -e " 5 $SET_MENU_SNIFFER\t\033[36m$sniffer\033[0m" content_line "5) $SET_MENU_SNIFFER\t\033[36m$sniffer\033[0m"
echo -e " 6 $SET_MENU_ADV_PORT" content_line "6) $SET_MENU_ADV_PORT"
} }
echo -e " 8 $SET_MENU_IPV6\t\033[36m$ipv6_redir\033[0m" content_line "8) $SET_MENU_IPV6\t\033[36m$ipv6_redir\033[0m"
echo "-----------------------------------------------" content_line ""
echo -e " a \033[31m$SET_MENU_RESET\033[0m" content_line "a) \033[31m$SET_MENU_RESET\033[0m"
echo -e " b \033[36m$SET_MENU_LANG\033[0m" content_line "b) \033[36m$SET_MENU_LANG\033[0m"
echo -e " c \033[33m$SET_MENU_UI\033[0m" content_line "c) \033[33m$SET_MENU_UI\033[0m"
echo -e " 0 $COMMON_BACK" content_line ""
echo "-----------------------------------------------" content_line "0) $COMMON_BACK"
read -p "$COMMON_INPUT > " num separator_line "="
read -r -p "$COMMON_INPUT> " num
case "$num" in case "$num" in
"" | 0) "" | 0)
break break
;; ;;
1) 1)
if [ "$USER" != root -a "$USER" != admin ]; then if [ "$USER" != root ] && [ "$USER" != admin ]; then
echo "-----------------------------------------------" line_break
read -p "$SET_WARN_NONROOT (1/0) > " res separator_line "="
[ "$res" = 1 ] && set_redir_mod content_line "$SET_WARN_NONROOT"
separator_line "-"
content_line "1) 是"
content_line "0) 否,返回上级菜单"
separator_line "="
read -r -p "$COMMON_INPUT> " res
if [ "$res" = 1 ]; then
set_redir_mod
else
continue
fi
else else
set_redir_mod set_redir_mod
fi fi
;; ;;
2) 2)
. "$CRASHDIR"/menus/dns.sh && set_dns_mod . "$CRASHDIR"/menus/dns.sh && set_dns_mod
sleep 1
;; ;;
3) 3)
. "$CRASHDIR"/menus/fw_filter.sh && set_fw_filter . "$CRASHDIR"/menus/fw_filter.sh && set_fw_filter
sleep 1
;; ;;
4) 4)
echo "-----------------------------------------------" line_break
separator_line "="
if [ "$skip_cert" = "OFF" ]; then
content_line "当前\033[33m已禁用\033[0m跳过本地证书验证是否确认启用"
else
content_line "当前\033[33m已启用\033[0m跳过本地证书验证是否确认禁用"
fi
separator_line "-"
content_line "1) 是"
content_line "0) 否,返回上级菜单"
separator_line "="
read -r -p "$COMMON_INPUT> " num
if [ "$num" = 1 ]; then
line_break
separator_line "="
if [ "$skip_cert" = OFF ]; then if [ "$skip_cert" = OFF ]; then
skip_cert=ON skip_cert=ON
echo -e "\033[33m$SET_SKIP_CERT_ON\033[0m" content_line "\033[33m$SET_SKIP_CERT_ON\033[0m"
else else
skip_cert=OFF skip_cert=OFF
echo -e "\033[33m$SET_SKIP_CERT_OFF\033[0m" content_line "\033[33m$SET_SKIP_CERT_OFF\033[0m"
fi fi
setconfig skip_cert $skip_cert setconfig skip_cert $skip_cert
separator_line "="
else
continue
fi
sleep 1
;; ;;
5) 5)
echo "-----------------------------------------------" line_break
if [ "$sniffer" = OFF ]; then separator_line "="
if [ "$crashcore" = clash ]; then if [ "$sniffer" = "OFF" ]; then
content_line "当前\033[33m已禁用\033[0m域名嗅探是否确认启用"
separator_line "-"
content_line "1) 是"
content_line "0) 否,返回上级菜单"
separator_line "="
read -r -p "$COMMON_INPUT> " num
if [ "$num" = 1 ]; then
line_break
separator_line "="
if [ "$crashcore" = "clash" ]; then
rm -rf "$TMPDIR/CrashCore" "$CRASHDIR/CrashCore" "$CRASHDIR/CrashCore.tar.gz" rm -rf "$TMPDIR/CrashCore" "$CRASHDIR/CrashCore" "$CRASHDIR/CrashCore.tar.gz"
crashcore=meta crashcore=meta
setconfig crashcore $crashcore setconfig crashcore $crashcore
echo "$SET_SNIFFER_CORE_SWITCH" line_break
content_line "$SET_SNIFFER_CORE_SWITCH"
content_line ""
fi fi
sniffer=ON sniffer=ON
elif [ "$crashcore" = clashpre -a "$dns_mod" = redir_host ]; then
echo -e "\033[31m$SET_SNIFFER_LOCKED\033[0m"
else else
sniffer=OFF continue
fi fi
setconfig sniffer $sniffer elif [ "$crashcore" = clashpre ] && [ "$dns_mod" = redir_host ]; then
content_line "\033[31m$SET_SNIFFER_LOCKED\033[0m"
separator_line "="
sleep 1
continue
else
content_line "当前\033[33m已启用\033[0m域名嗅探是否确认禁用"
separator_line "-"
content_line "1) 是"
content_line "0) 否,返回上级菜单"
separator_line "="
read -r -p "$COMMON_INPUT> " num
if [ "$num" = 1 ]; then
sniffer=OFF
line_break
separator_line "="
else
continue
fi
fi
setconfig sniffer "$sniffer"
content_line "\033[32m操作成功\033[0m"
separator_line "="
sleep 1
;; ;;
6) 6)
if pidof CrashCore >/dev/null; then if pidof CrashCore >/dev/null; then
echo "-----------------------------------------------" line_break
echo -e "\033[33m$SET_CORE_RUNNING\033[0m" separator_line "="
read -p "$SET_CORE_STOP_CONFIRM (1/0) > " res content_line "\033[33m$SET_CORE_RUNNING\033[0m"
[ "$res" = 1 ] && "$CRASHDIR/start.sh" stop && set_adv_config content_line "$SET_CORE_STOP_CONFIRM"
separator_line "-"
content_line "1) 是"
content_line "0) 否,返回上级菜单"
separator_line "="
read -r -p "$COMMON_INPUT> " res
if [ "$res" = 1 ]; then
"$CRASHDIR/start.sh" stop && set_adv_config
else
continue
fi
else else
set_adv_config set_adv_config
fi fi
@@ -97,62 +170,101 @@ settings() {
set_ipv6 set_ipv6
;; ;;
a) a)
echo "-----------------------------------------------" line_break
echo -e " 1 $SET_BACKUP" separator_line "="
echo -e " 2 $SET_RESTORE" content_line "1) $SET_BACKUP"
echo -e " 3 $SET_RESET" content_line "2) $SET_RESTORE"
echo -e " 0 $COMMON_BACK" content_line "3) $SET_RESET"
echo "-----------------------------------------------" content_line "0) $COMMON_BACK"
read -p "$COMMON_INPUT > " num separator_line "="
read -r -p "$COMMON_INPUT> " num
case "$num" in case "$num" in
1) cp -f "$CFG_PATH" "$CFG_PATH.bak" && echo -e "\033[32m$SET_BACKUP_OK\033[0m" ;; "" | 0)
continue
;;
1)
line_break
separator_line "="
if cp -f "$CFG_PATH" "$CFG_PATH.bak"; then
content_line "\033[32m$SET_BACKUP_OK\033[0m"
else
content_line "\033[31m$SET_BACKUP_FAIL\033[0m"
fi
;;
2) 2)
line_break
separator_line "="
if [ -f "$CFG_PATH.bak" ]; then if [ -f "$CFG_PATH.bak" ]; then
mv -f "$CFG_PATH" "$CFG_PATH.bak2" mv -f "$CFG_PATH" "$CFG_PATH.bak2"
mv -f "$CFG_PATH.bak" "$CFG_PATH" mv -f "$CFG_PATH.bak" "$CFG_PATH"
mv -f "$CFG_PATH.bak2" "$CFG_PATH.bak" mv -f "$CFG_PATH.bak2" "$CFG_PATH.bak"
echo -e "\033[32m$SET_RESTORE_OK\033[0m" content_line "\033[32m$SET_RESTORE_OK\033[0m"
else else
echo -e "\033[31m$SET_BACKUP_MISS\033[0m" content_line "\033[31m$SET_BACKUP_MISS\033[0m"
fi fi
;; ;;
3) 3)
mv -f "$CFG_PATH" "$CFG_PATH.bak" line_break
separator_line "="
if mv -f "$CFG_PATH" "$CFG_PATH.bak"; then
. "$CRASHDIR/init.sh" >/dev/null . "$CRASHDIR/init.sh" >/dev/null
echo -e "\033[32m$SET_RESET_OK\033[0m" content_lin e"\033[32m$SET_RESET_OK\033[0m"
else
content_lin e"\033[32m$SET_RESET_FAIL\033[0m"
fi
;;
*)
errornub
sleep 1
continue
;; ;;
esac esac
echo -e "\033[33m$SET_NEED_RESTART\033[0m" content_line ""
content_line "\033[33m$SET_NEED_RESTART\033[0m"
sleep 1
exit 0 exit 0
;; ;;
b) b)
echo "-----------------------------------------------" line_break
echo -e " 1 简体中文" separator_line "="
echo -e " 2 English" content_line "1) 简体中文"
echo -e " 0 $COMMON_BACK" content_line "2) English"
echo "-----------------------------------------------" content_line "0) $COMMON_BACK"
read -p "$COMMON_INPUT > " num separator_line "="
read -r -p "$COMMON_INPUT> " num
case "$num" in case "$num" in
"" | 0)
continue
;;
1) 1)
line_break
separator_line "="
echo chs >"$CRASHDIR"/configs/i18n.cfg echo chs >"$CRASHDIR"/configs/i18n.cfg
echo -e "\033[32m切换成功请重新运行脚本\033[0m" content_line "\033[32m切换成功请重新运行脚本\033[0m"
exit
;; ;;
2) 2)
line_break
separator_line "="
echo en >"$CRASHDIR"/configs/i18n.cfg echo en >"$CRASHDIR"/configs/i18n.cfg
echo -e "\033[32mLanguage switched successfully! Please re-run the script!\033[0m" content_line "\033[32mLanguage switched successfully! Please re-run the script!\033[0m"
exit
;; ;;
esac esac
separator_line "="
sleep 1
exit 0
;; ;;
c) c)
echo "-----------------------------------------------" line_break
echo -e " 1 TUI-layout by Sofia-Riese" separator_line "="
echo -e " 2 TUI-lite" content_line "1) New Design by Sofia-Riese"
echo -e " 0 $COMMON_BACK" content_line "2) TUI-lite"
echo "-----------------------------------------------" content_line "0) $COMMON_BACK"
read -p "$COMMON_INPUT > " num separator_line "="
read -r -p "$COMMON_INPUT> " num
case "$num" in case "$num" in
"" | 0)
continue
;;
1) 1)
setconfig tui_type 'tui_layout' setconfig tui_type 'tui_layout'
. "$CRASHDIR"/menus/tui_layout.sh . "$CRASHDIR"/menus/tui_layout.sh
@@ -162,18 +274,28 @@ settings() {
. "$CRASHDIR"/menus/tui_lite.sh . "$CRASHDIR"/menus/tui_lite.sh
;; ;;
esac esac
;; line_break
*) errornum ;; separator_line "="
esac content_line "\033[32m切换成功\033[0m"
separator_line "="
sleep 1 sleep 1
;;
*)
errornum
sleep 1
;;
esac
done done
} }
set_redir_config() { set_redir_config() {
setconfig redir_mod "$redir_mod" setconfig redir_mod "$redir_mod"
setconfig dns_mod "$dns_mod" setconfig dns_mod "$dns_mod"
echo "-----------------------------------------------" line_break
echo -e "\033[36m$SET_REDIR_APPLIED $redir_mod\033[0m" separator_line "="
content_line "\033[36m$SET_REDIR_APPLIED $redir_mod\033[0m"
separator_line "="
sleep 1
} }
# 路由模式设置 # 路由模式设置
@@ -184,28 +306,30 @@ set_redir_mod() {
[ "$firewall_area" = 4 ] && redir_mod="$MENU_PURE_MOD" [ "$firewall_area" = 4 ] && redir_mod="$MENU_PURE_MOD"
[ -z "$redir_mod" ] && redir_mod='Redir' [ -z "$redir_mod" ] && redir_mod='Redir'
firewall_area_dsc=$(echo "$SET_FW_AREA_DESC($bypass_host)" | cut -d'|' -f$firewall_area) firewall_area_dsc=$(echo "$SET_FW_AREA_DESC($bypass_host)" | cut -d'|' -f$firewall_area)
echo "-----------------------------------------------" line_break
echo -e "$SET_REDIR_CURRENT \033[47;30m$redir_mod$MENU_MOD\033[0m; $SET_CORE_CURRENT \033[47;30m$crashcore\033[0m" separator_line "="
echo -e "\033[33m$SET_REDIR_RESTART_HINT\033[0m" content_line "\033[33m$SET_REDIR_RESTART_HINT\033[0m"
echo "-----------------------------------------------" content_line "$SET_REDIR_CURRENT\033[47;30m$redir_mod$MENU_MOD\033[0m $SET_CORE_CURRENT\033[47;30m$crashcore\033[0m"
[ $firewall_area -le 3 ] && { separator_line "="
echo -e " 1 \033[32m$SET_REDIR_REDIR\033[0m\t$SET_REDIR_REDIRDES" [ "$firewall_area" -le 3 ] && {
echo -e " 2 \033[36m$SET_REDIR_MIX\033[0m\t$SET_REDIR_MIXDES" content_line "1) \033[32m$SET_REDIR_REDIR\033[0m\t$SET_REDIR_REDIRDES"
echo -e " 3 \033[32m$SET_REDIR_TPROXY\033[0m\t$SET_REDIR_TPROXYDES" content_line "2) \033[36m$SET_REDIR_MIX\033[0m\t$SET_REDIR_MIXDES"
echo -e " 4 \033[33m$SET_REDIR_TUN\033[0m\t$SET_REDIR_TUNDES" content_line "3) \033[32m$SET_REDIR_TPROXY\033[0m$SET_REDIR_TPROXYDES"
echo -e "-----------------------------------------------" content_line "4) \033[33m$SET_REDIR_TUN\033[0m\t$SET_REDIR_TUNDES"
content_line ""
} }
[ "$firewall_area" = 5 ] && { [ "$firewall_area" = 5 ] && {
echo -e " 5 \033[32mTCP旁路转发\033[0m 仅转发TCP流量至旁路由" content_line "5) \033[32mTCP旁路转发\033[0m 仅转发TCP流量至旁路由"
echo -e " 6 \033[36mT&U旁路转发\033[0m 转发TCP&UDP流量至旁路由" content_line "6) \033[36mT&U旁路转发\033[0m 转发TCP&UDP流量至旁路由"
echo "-----------------------------------------------" content_line ""
} }
echo -e " 7 $SET_FW_AREA:\t\033[47;30m$firewall_area_dsc\033[0m" content_line "7) $SET_FW_AREA\t\033[47;30m$firewall_area_dsc\033[0m"
echo -e " 8 $SET_VM_REDIR:\t\033[47;30m$vm_redir\033[0m" content_line "8) $SET_VM_REDIR\t\033[47;30m$vm_redir\033[0m"
echo -e " 9 $SET_FW_SWITCH:\t\033[47;30m$firewall_mod\033[0m" content_line "9) $SET_FW_SWITCH\t\033[47;30m$firewall_mod\033[0m"
echo "-----------------------------------------------" content_line ""
echo -e " 0 $COMMON_BACK" content_line "0 $COMMON_BACK"
read -p "$COMMON_INPUT > " num separator_line "="
read -r -p "$COMMON_INPUT> " num
case "$num" in case "$num" in
"" | 0) "" | 0)
@@ -220,14 +344,18 @@ set_redir_mod() {
redir_mod=Mix redir_mod=Mix
set_redir_config set_redir_config
else else
echo -e "\033[31m${SET_NO_MOD}TUN$SET_NO_MOD2\033[0m" line_break
separator_line "="
content_line "\033[31m${SET_NO_MOD}TUN\033[0m"
content_line "\033[31m$SET_NO_MOD2\033[0m"
separator_line "="
sleep 1 sleep 1
fi fi
;; ;;
3) 3)
if [ "$firewall_mod" = "iptables" ]; then if [ "$firewall_mod" = "iptables" ]; then
if [ -f /etc/init.d/qca-nss-ecm -a "$systype" = "mi_snapshot" ]; then if [ -f /etc/init.d/qca-nss-ecm ] && [ "$systype" = "mi_snapshot" ]; then
read -p "$XIAOMI_QOS(1/0) > " res read -r -p "$XIAOMI_QOS(1/0) > " res
[ "$res" = '1' ] && { [ "$res" = '1' ] && {
/data/shellcrash_init.sh tproxyfix /data/shellcrash_init.sh tproxyfix
redir_mod=Tproxy redir_mod=Tproxy
@@ -237,7 +365,11 @@ set_redir_mod() {
redir_mod=Tproxy redir_mod=Tproxy
set_redir_config set_redir_config
else else
echo -e "\033[31m${SET_NO_MOD}iptables-mod-tproxy$SET_NO_MOD2\033[0m" line_break
separator_line "="
content_line "\033[31m${SET_NO_MOD}iptables-mod-tproxy\033[0m"
content_line "\033[31m$SET_NO_MOD2\033[0m"
separator_line "="
sleep 1 sleep 1
fi fi
elif [ "$firewall_mod" = "nftables" ]; then elif [ "$firewall_mod" = "nftables" ]; then
@@ -245,7 +377,11 @@ set_redir_mod() {
redir_mod=Tproxy redir_mod=Tproxy
set_redir_config set_redir_config
else else
echo -e "\033[31m${SET_NO_MOD}nft_tproxy$SET_NO_MOD2\033[0m" line_break
separator_line "="
content_line "\033[31m${SET_NO_MOD}nft_tproxy\033[0m"
content_line "\033[31m$SET_NO_MOD2\033[0m"
separator_line "="
sleep 1 sleep 1
fi fi
fi fi
@@ -255,7 +391,10 @@ set_redir_mod() {
redir_mod=Tun redir_mod=Tun
set_redir_config set_redir_config
else else
echo -e "\033[31m$SET_NO_TUN\033[0m" line_break
separator_line "="
content_line "\033[31m$SET_NO_TUN\033[0m"
separator_line "="
sleep 1 sleep 1
fi fi
;; ;;
@@ -280,7 +419,10 @@ set_redir_mod() {
redir_mod=Redir redir_mod=Redir
setconfig redir_mod $redir_mod setconfig redir_mod $redir_mod
else else
echo -e "\033[31m$FW_NO_NFTABLES\033[0m" line_break
separator_line "="
content_line "\033[31m$FW_NO_NFTABLES\033[0m"
separator_line "="
fi fi
elif [ "$firewall_mod" = 'nftables' ]; then elif [ "$firewall_mod" = 'nftables' ]; then
if ckcmd iptables; then if ckcmd iptables; then
@@ -288,7 +430,10 @@ set_redir_mod() {
redir_mod=Redir redir_mod=Redir
setconfig redir_mod $redir_mod setconfig redir_mod $redir_mod
else else
echo -e "\033[31m$FW_NO_IPTABLES\033[0m" line_break
separator_line "="
content_line "\033[31m$FW_NO_IPTABLES\033[0m"
separator_line "="
fi fi
else else
iptables -j REDIRECT -h >/dev/null 2>&1 && firewall_mod=iptables iptables -j REDIRECT -h >/dev/null 2>&1 && firewall_mod=iptables
@@ -296,32 +441,40 @@ set_redir_mod() {
if [ -n "$firewall_mod" ]; then if [ -n "$firewall_mod" ]; then
redir_mod=Redir redir_mod=Redir
setconfig redir_mod $redir_mod setconfig redir_mod $redir_mod
setconfig firewall_mod $firewall_mod setconfig firewall_mod "$firewall_mod"
else else
echo -e "\033[31m$FW_NO_FIREWALL_BACKEND\033[0m" line_break
separator_line "="
content_line "\033[31m$FW_NO_FIREWALL_BACKEND\033[0m"
separator_line "="
fi fi
fi fi
sleep 1 sleep 1
setconfig firewall_mod $firewall_mod setconfig firewall_mod "$firewall_mod"
;; ;;
*) *)
errornum errornum
sleep 1 sleep 1
break
;; ;;
esac esac
done done
} }
inputport() { inputport() {
read -p "$INPUT_PORT(1-65535) > " portx line_break
read -r -p "$INPUT_PORT165535> " portx
. "$CRASHDIR"/menus/check_port.sh # 加载测试函数 . "$CRASHDIR"/menus/check_port.sh # 加载测试函数
line_break
separator_line "="
if check_port "$portx"; then if check_port "$portx"; then
setconfig "$xport" "$portx" setconfig "$xport" "$portx"
echo -e "\033[32m$COMMON_SUCCESS\033[0m" content_line "\033[32m$COMMON_SUCCESS\033[0m"
separator_line "="
sleep 1
return 0 return 0
else else
echo -e "\033[31m$COMMON_FAILED\033[0m" content_line "\033[31m$COMMON_FAILED\033[0m"
separator_line "="
sleep 1 sleep 1
return 1 return 1
fi fi
@@ -335,17 +488,19 @@ set_adv_config() {
[ -z "$table" ] && table=100 [ -z "$table" ] && table=100
[ -z "$authentication" ] && auth="$COMMON_UNSET" || auth="******" [ -z "$authentication" ] && auth="$COMMON_UNSET" || auth="******"
echo "-----------------------------------------------" line_break
echo -e " 1 $ADV_HTTP_PORT:\t\033[36m$mix_port\033[0m" separator_line "="
echo -e " 2 $ADV_HTTP_AUTH:\t\033[36m$auth\033[0m" content_line "1) $ADV_HTTP_PORT\t\033[36m$mix_port\033[0m"
echo -e " 3 $ADV_REDIR_PORT:\t\033[36m$redir_port,$((redir_port+1))\033[0m" content_line "2) $ADV_HTTP_AUTH\t\033[36m$auth\033[0m"
echo -e " 4 $ADV_DNS_PORT:\t\033[36m$dns_port\033[0m" content_line "3) $ADV_REDIR_PORT\t\033[36m$redir_port,$((redir_port + 1))\033[0m"
echo -e " 5 $ADV_PANEL_PORT:\t\033[36m$db_port\033[0m" content_line "4) $ADV_DNS_PORT\t\t\033[36m$dns_port\033[0m"
echo -e " 6 $ADV_PANEL_PASS:\t\033[36m$secret\033[0m" content_line "5) $ADV_PANEL_PORT\t\t\033[36m$db_port\033[0m"
echo -e " 8 $ADV_HOST:\t\033[36m$host\033[0m" content_line "6) $ADV_PANEL_PASS\t\t\033[36m$secret\033[0m"
echo -e " 9 $ADV_TABLE:\t\033[36m$table,$((table+1))\033[0m" content_line "8) $ADV_HOST\t\033[36m$host\033[0m"
echo -e " 0 $COMMON_BACK" content_line "9) $ADV_TABLE\t\t\033[36m$table,$((table + 1))\033[0m"
read -p "$COMMON_INPUT > " num content_line "0) $COMMON_BACK"
separator_line "="
read -r -p "$COMMON_INPUT> " num
case "$num" in case "$num" in
"" | 0) "" | 0)
@@ -354,88 +509,123 @@ set_adv_config() {
1) 1)
xport=mix_port xport=mix_port
inputport inputport
[ $? -eq 1 ] && break || continue if [ $? -eq 1 ]; then
break
else
continue
fi
;; ;;
2) 2)
echo "-----------------------------------------------" line_break
echo -e "$ADV_AUTH_FORMAT_DESC" separator_line "="
echo -e "$ADV_AUTH_WARN" content_line "$ADV_AUTH_FORMAT_DESC"
echo -e "$ADV_AUTH_REMOVE_HINT" content_line "$ADV_AUTH_WARN"
echo "-----------------------------------------------" content_line "$ADV_AUTH_REMOVE_HINT"
read -p "$ADV_AUTH_INPUT > " input separator_line "="
read -r -p "$ADV_AUTH_INPUT> " input
line_break
separator_line "="
if [ "$input" = "0" ]; then if [ "$input" = "0" ]; then
authentication="" authentication=""
setconfig authentication setconfig authentication
echo -e "\033[32m$ADV_AUTH_REMOVED\033[0m" content_line "\033[32m$ADV_AUTH_REMOVED\033[0m"
else else
if [ "$local_proxy" = "ON" ] && [ "$local_type" = "$LOCAL_TYPE_ENV" ]; then if [ "$local_proxy" = "ON" ] && [ "$local_type" = "$LOCAL_TYPE_ENV" ]; then
echo "-----------------------------------------------" content_line "\033[33m$ADV_AUTH_ENV_CONFLICT\033[0m"
echo -e "\033[33m$ADV_AUTH_ENV_CONFLICT\033[0m"
sleep 1
else else
authentication=$(echo "$input" | grep :) authentication=$(echo "$input" | grep :)
if [ -n "$authentication" ]; then if [ -n "$authentication" ]; then
setconfig authentication "'$authentication'" setconfig authentication "'$authentication'"
echo -e "\033[32m$COMMON_SUCCESS\033[0m" content_line "\033[32m$COMMON_SUCCESS\033[0m"
else else
echo -e "\033[31m$ADV_AUTH_INVALID\033[0m" content_line "\033[31m$ADV_AUTH_INVALID\033[0m"
fi fi
fi fi
fi fi
separator_line "="
sleep 1
;; ;;
3) 3)
xport=redir_port xport=redir_port
inputport inputport
[ $? -eq 1 ] && break || continue if [ $? -eq 1 ]; then
break
else
continue
fi
;; ;;
4) 4)
xport=dns_port xport=dns_port
inputport inputport
[ $? -eq 1 ] && break || continue if [ $? -eq 1 ]; then
break
else
continue
fi
;; ;;
5) 5)
xport=db_port xport=db_port
inputport inputport
[ $? -eq 1 ] && break || continue if [ $? -eq 1 ]; then
break
else
continue
fi
;; ;;
6) 6)
read -p "$ADV_PANEL_PASS_INPUT > " secret line_break
read -r -p "$ADV_PANEL_PASS_INPUT> " secret
if [ -n "$secret" ]; then if [ -n "$secret" ]; then
[ "$secret" = "0" ] && secret="" [ "$secret" = "0" ] && secret=""
setconfig secret "$secret" setconfig secret "$secret"
echo -e "\033[32m$COMMON_SUCCESS\033[0m" line_break
separator_line "="
content_line "\033[32m$COMMON_SUCCESS\033[0m"
separator_line "="
fi fi
;; ;;
8) 8)
echo "-----------------------------------------------" line_break
echo -e "\033[33m$ADV_HOST_WARN_LAN\033[0m" separator_line "="
echo -e "\033[31m$ADV_HOST_WARN_CHANGE\033[0m" content_line "\033[33m$ADV_HOST_WARN_LAN\033[0m"
echo "-----------------------------------------------" content_line "\033[31m$ADV_HOST_WARN_CHANGE\033[0m"
read -p "$ADV_HOST_INPUT > " host separator_line "="
read -r -p "$ADV_HOST_INPUT> " host
line_break
separator_line "="
if [ "$host" = "0" ]; then if [ "$host" = "0" ]; then
host="" host=""
setconfig host "$host" setconfig host "$host"
echo -e "\033[32m$ADV_HOST_REMOVED\033[0m" content_line "\033[32m$ADV_HOST_REMOVED\033[0m"
separator_line "="
sleep 1
exit 0 exit 0
elif echo "$host" | grep -Eq '\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[01][0-9]|22[0-3])\>(\.\<([0-9]|[0-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>){2}\.\<([1-9]|[0-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-4])\>'; then elif echo "$host" | grep -Eq '\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[01][0-9]|22[0-3])\>(\.\<([0-9]|[0-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>){2}\.\<([1-9]|[0-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-4])\>'; then
setconfig host "$host" setconfig host "$host"
echo -e "\033[32m$COMMON_SUCCESS\033[0m" content_line "\033[32m$COMMON_SUCCESS\033[0m"
else else
host="" host=""
echo -e "\033[31m$ADV_HOST_INVALID\033[0m" content_line "\033[31m$ADV_HOST_INVALID\033[0m"
fi fi
separator_line "="
sleep 1 sleep 1
;; ;;
9) 9)
echo "-----------------------------------------------" line_break
echo -e "\033[33m$ADV_TABLE_WARN\033[0m" separator_line "="
read -p "$ADV_TABLE_INPUT > " table content_line "\033[33m$ADV_TABLE_WARN\033[0m"
separator_line "="
read -r -p "$ADV_TABLE_INPUT> " table
if [ -n "$table" ]; then if [ -n "$table" ]; then
[ "$table" = "0" ] && table="100" [ "$table" = "0" ] && table="100"
setconfig table "$table" setconfig table "$table"
echo -e "\033[32m$COMMON_SUCCESS\033[0m"
line_break
separator_line "="
content_line "\033[32m$COMMON_SUCCESS\033[0m"
separator_line "="
fi fi
;; ;;
*) *)
@@ -447,21 +637,29 @@ set_adv_config() {
} }
set_firewall_area() { set_firewall_area() {
while true; do
[ -z "$vm_redir" ] && vm_redir='OFF' [ -z "$vm_redir" ] && vm_redir='OFF'
echo "-----------------------------------------------" line_break
echo -e "\033[33m$FW_AREA_NOTE\033[0m" separator_line "="
echo "-----------------------------------------------" content_line "\033[33m$FW_AREA_NOTE_1\033[0m"
echo -e " 1 \033[32m$FW_AREA_LAN\033[0m" content_line "\033[33m$FW_AREA_NOTE_2\033[0m"
echo -e " 2 \033[36m$FW_AREA_LOCAL\033[0m" content_line ""
echo -e " 3 \033[32m$FW_AREA_BOTH\033[0m" content_line "当前路由劫持范围:$firewall_area_dsc"
echo -e " 4 $FW_AREA_NONE" separator_line "-"
echo -e " 0 $COMMON_BACK" content_line "1) \033[32m$FW_AREA_LAN\033[0m"
echo "-----------------------------------------------" content_line "2) \033[36m$FW_AREA_LOCAL\033[0m"
read -p "$COMMON_INPUT > " num content_line "3) \033[32m$FW_AREA_BOTH\033[0m"
content_line "4) $FW_AREA_NONE"
content_line "0) $COMMON_BACK"
separator_line "="
read -r -p "$COMMON_INPUT> " num
case "$num" in case "$num" in
"" | 0)
break
;;
[1-4]) [1-4])
if [ $firewall_area -ge 4 ];then if [ "$firewall_area" -ge 4 ]; then
redir_mod='' redir_mod=''
else else
redir_mod=Redir redir_mod=Redir
@@ -469,57 +667,94 @@ set_firewall_area() {
firewall_area="$num" firewall_area="$num"
setconfig firewall_area "$firewall_area" setconfig firewall_area "$firewall_area"
setconfig redir_mod "$redir_mod" setconfig redir_mod "$redir_mod"
case "$firewall_area" in
1) firewall_area_dsc="$FW_AREA_LAN" ;;
2) firewall_area_dsc="$FW_AREA_LOCAL" ;;
3) firewall_area_dsc="$FW_AREA_BOTH" ;;
4) firewall_area_dsc="$FW_AREA_NONE" ;;
esac
line_break
separator_line "="
content_line "\033[32m操作成功\033[0m"
separator_line "="
sleep 1
;; ;;
5) 5)
echo "-----------------------------------------------" line_break
echo -e "\033[31m注意\033[0m此功能存在多种风险如无网络基础请勿尝试" separator_line "="
echo -e "\033[33m说明\033[0m此功能不启动内核仅配置防火墙转发且子设备无需额外设置网关DNS" content_line "\033[31m注意\033[0m"
echo -e "\033[33m说明\033[0m支持防火墙分流及设备过滤支持部分定时任务但不支持ipv6" content_line "此功能存在多种风险如无网络基础请勿尝试"
echo -e "\033[31m注意\033[0m如需代理UDP请确保旁路由运行了支持UDP代理的模式" content_line "如需代理UDP请确保旁路由运行了支持UDP代理的模式"
echo -e "\033[31m注意\033[0m如使用systemd方式启动内核依然会空载运行建议使用保守模式" content_line "如使用systemd方式启动内核依然会空载运行建议使用保守模式"
echo "-----------------------------------------------" content_line "\033[33m说明\033[0m"
read -p "请输入旁路由IPV4地址 > " bypass_host content_line "此功能不启动内核仅配置防火墙转发且子设备无需额外设置网关DNS"
content_line "支持防火墙分流及设备过滤支持部分定时任务但不支持ipv6"
separator_line "="
read -r -p "请直接输入旁路由IPV4地址> " bypass_host
[ -n "$bypass_host" ] && { [ -n "$bypass_host" ] && {
firewall_area=$num firewall_area=$num
setconfig firewall_area $firewall_area setconfig firewall_area "$firewall_area"
setconfig bypass_host $bypass_host setconfig bypass_host "$bypass_host"
redir_mod=TCP旁路转发 redir_mod=TCP旁路转发
setconfig redir_mod $redir_mod setconfig redir_mod $redir_mod
} }
;; ;;
*) errornum ;; *)
esac errornum
sleep 1 sleep 1
;;
esac
done
} }
set_firewall_vm() { set_firewall_vm() {
[ -z "$vm_ipv4" ] && vm_ipv4=$(ip a 2>&1 | grep -w 'inet' | grep 'global' | grep 'brd' | grep -E 'docker|podman|virbr|vnet|ovs|vmbr|veth|vmnic|vboxnet|lxcbr|xenbr|vEthernet' | sed 's/.*inet.//g' | sed 's/ br.*$//g' | sed 's/metric.*$//g' | tr '\n' ' ') [ -z "$vm_ipv4" ] && vm_ipv4=$(ip a 2>&1 | grep -w 'inet' | grep 'global' | grep 'brd' | grep -E 'docker|podman|virbr|vnet|ovs|vmbr|veth|vmnic|vboxnet|lxcbr|xenbr|vEthernet' | sed 's/.*inet.//g' | sed 's/ br.*$//g' | sed 's/metric.*$//g' | tr '\n' ' ')
echo "-----------------------------------------------" line_break
echo -e "$VM_DETECT_DESC\033[32m$vm_ipv4\033[0m" separator_line "="
echo "-----------------------------------------------" content_line "$VM_DETECT_DESC\033[32m$vm_ipv4\033[0m"
echo -e " 1 \033[32m$VM_ENABLE_AUTO\033[0m" separator_line "-"
echo -e " 2 \033[36m$VM_ENABLE_MANUAL\033[0m" content_line "1) \033[32m$VM_ENABLE_AUTO\033[0m"
echo -e " 3 \033[31m$VM_DISABLE\033[0m" content_line "2) \033[36m$VM_ENABLE_MANUAL\033[0m"
echo -e " 0 $COMMON_BACK" content_line "3) \033[31m$VM_DISABLE\033[0m"
echo "-----------------------------------------------" content_line "0) $COMMON_BACK"
read -p "$COMMON_INPUT > " num separator_line "="
read -r -p "$COMMON_INPUT> " num
case "$num" in case "$num" in
1) 1)
line_break
separator_line "="
if [ -n "$vm_ipv4" ]; then if [ -n "$vm_ipv4" ]; then
vm_redir=ON vm_redir=ON
content_line "\033[32m操作成功\033[0m"
else else
echo -e "\033[33m$VM_NO_NET_DETECTED\033[0m" content_line "\033[33m$VM_NO_NET_DETECTED\033[0m"
fi fi
separator_line "="
sleep 1
;; ;;
2) 2)
echo -e "$VM_INPUT_DESC" line_break
echo -e "\033[32m10.88.0.0/16 172.17.0.0/16\033[0m" separator_line "="
read -p "$VM_INPUT_NET > " text content_line "$VM_INPUT_DESC_1"
content_line "$VM_INPUT_DESC_2 \033[32m10.88.0.0/16 172.17.0.0/16\033[0m"
content_line ""
content_line "Tips直接回车确认可返回上级菜单"
separator_line "="
read -r -p "$VM_INPUT_NET> " text
[ -n "$text" ] && vm_ipv4="$text" && vm_redir=ON [ -n "$text" ] && vm_ipv4="$text" && vm_redir=ON
;; ;;
3) 3)
vm_redir=OFF vm_redir=OFF
vm_ipv4='' vm_ipv4=''
line_break
separator_line "="
content_line "\033[32m操作成功\033[0m"
separator_line "="
sleep 1
;; ;;
*) ;; *) ;;
esac esac
@@ -537,12 +772,13 @@ set_ipv6() {
[ -z "$ipv6_redir" ] && ipv6_redir=OFF [ -z "$ipv6_redir" ] && ipv6_redir=OFF
[ -z "$ipv6_dns" ] && ipv6_dns=ON [ -z "$ipv6_dns" ] && ipv6_dns=ON
echo "-----------------------------------------------" line_break
echo -e " 1 $IPV6_REDIR:\t\033[36m$ipv6_redir\033[0m" separator_line "="
[ "$disoverride" != "1" ] && echo -e " 2 $IPV6_DNS:\t\033[36m$ipv6_dns\033[0m" content_line "1) $IPV6_REDIR\t\033[36m$ipv6_redir\033[0m"
echo -e " 0 $COMMON_BACK" [ "$disoverride" != "1" ] && content_line "2) $IPV6_DNS\t\033[36m$ipv6_dns\033[0m"
echo "-----------------------------------------------" content_line "0) $COMMON_BACK"
read -p "$COMMON_INPUT > " num separator_line "="
read -r -p "$COMMON_INPUT> " num
case "$num" in case "$num" in
"" | 0) "" | 0)
@@ -552,21 +788,31 @@ set_ipv6() {
if [ "$ipv6_redir" = "OFF" ]; then if [ "$ipv6_redir" = "OFF" ]; then
ipv6_support=ON ipv6_support=ON
ipv6_redir=ON ipv6_redir=ON
sleep 2
else else
ipv6_redir=OFF ipv6_redir=OFF
fi fi
setconfig ipv6_redir $ipv6_redir setconfig ipv6_redir $ipv6_redir
setconfig ipv6_support $ipv6_support setconfig ipv6_support "$ipv6_support"
line_break
separator_line "="
content_line "\033[32m操作成功\033[0m"
separator_line "="
sleep 1
;; ;;
2) 2)
[ "$ipv6_dns" = OFF ] && ipv6_dns=ON || ipv6_dns=OFF [ "$ipv6_dns" = OFF ] && ipv6_dns=ON || ipv6_dns=OFF
setconfig ipv6_dns "$ipv6_dns" setconfig ipv6_dns "$ipv6_dns"
line_break
separator_line "="
content_line "\033[32m操作成功\033[0m"
separator_line "="
sleep 1
;; ;;
*) *)
errornum errornum
sleep 1 sleep 1
break
;; ;;
esac esac
done done