diff --git a/.github/workflows/bin_update.yml b/.github/workflows/bin_update.yml index 835fcc2a..a833361c 100644 --- a/.github/workflows/bin_update.yml +++ b/.github/workflows/bin_update.yml @@ -17,6 +17,10 @@ jobs: fetch-depth: 1 persist-credentials: false # 禁用默认凭据(我们用 token push) + - name: Fetch master and dev refs + run: | + git fetch origin master dev + - name: Apt Update & Update CA env: DEBIAN_FRONTEND: noninteractive @@ -136,6 +140,12 @@ jobs: sed -i "s/GeoIP_v=.*/GeoIP_v=$(date '+%Y%m%d')/" version echo 数据库及根证书文件更新完成! + - name: Sync master/dev files into update branch + run: | + # 只同步文件内容,不带任何 git 状态 + git archive --format=tar origin/master ShellCrash.tar.gz version | tar -x -C . + git archive --format=tar origin/dev install.sh install_en.sh public rules | tar -x -C . + - name: Rebuild update branch with no history run: | # 彻底删除历史记录 diff --git a/ShellCrash.tar.gz b/ShellCrash.tar.gz index 1887628b..fc0f2684 100644 Binary files a/ShellCrash.tar.gz and b/ShellCrash.tar.gz differ diff --git a/bin/version b/bin/version index f67c9ad4..0da48858 100644 --- a/bin/version +++ b/bin/version @@ -1,4 +1,4 @@ meta_v=v1.19.17 singboxr_v=1.13.0-alpha.27 -versionsh=1.9.5alpha13 +versionsh=1.9.5alpha14 GeoIP_v=20251205 diff --git a/public/servers.list b/public/servers.list new file mode 100644 index 00000000..a88c41b3 --- /dev/null +++ b/public/servers.list @@ -0,0 +1,32 @@ +# ID&类型 说明 地址 其他说明 (类型:100-三版全通源;200-单一源;300-基础sub;400-meta_sub;500-规则地址) + +101 Jsdelivr_CDN源 https://cdn.jsdelivr.net/gh/juewuy/ShellCrash +102 Github直连源(请注意网络环境) https://raw.githubusercontent.com/juewuy/ShellCrash +103 ShellClash自建源(请勿滥用!) https://gh.jwsc.eu.org +104 Cloudflare_CDN源(推荐) https://testingcf.jsdelivr.net/gh/juewuy/ShellCrash + +202 http私人内测源(危险!非必要请勿使用) http://t.jwsc.eu.org 开发版 + +401 作者提供,支持vless|hy2 https://sub.jwsc.eu.org ua +402 肥羊提供(有广告),支持vless|hy2 https://api.v1.mk diyua +403 肥羊提供(有广告),支持vless|hy2 https://url.v1.mk diyua + +501 Acl4SSR全能优化版 https://github.com/juewuy/ShellCrash/raw/dev/rules/ShellClash.ini (推荐) +502 Acl4SSR精简优化版 https://github.com/juewuy/ShellCrash/raw/dev/rules/ShellClash_Mini.ini (推荐) +503 Acl4SSR全能优化+去广告增强 https://github.com/juewuy/ShellCrash/raw/dev/rules/ShellClash_Block.ini +504 Acl4SSR极简版 https://github.com/juewuy/ShellCrash/raw/dev/rules/ShellClash_Nano.ini (适合自建节点) +505 Acl4SSR分流&游戏增强 https://github.com/juewuy/ShellCrash/raw/dev/rules/ShellClash_Full.ini +506 Acl4SSR分流&游戏&去广告增强 https://github.com/juewuy/ShellCrash/raw/dev/rules/ShellClash_Full_Block.ini (低性能设备慎用) +507 洞主规则精简版 https://github.com/juewuy/ShellCrash/raw/dev/rules/lhie1_clash.ini +508 洞主规则重度完整版 https://github.com/juewuy/ShellCrash/raw/dev/rules/lhie1_dler.ini +509 Acl4SSR多国精简 https://github.com/juewuy/ShellCrash/raw/dev/rules/ACL4SSR_Online_Mini_MultiCountry.ini +510 Acl4SSR回国专用 https://github.com/juewuy/ShellCrash/raw/dev/rules/ACL4SSR_BackCN.ini +511 Acl4SSR增强国外GFW https://github.com/juewuy/ShellCrash/raw/dev/rules/ACL4SSR_WithGFW.ini (适合黑名单模式使用) +512 DustinWin全分组规则 https://raw.githubusercontent.com/DustinWin/ruleset_geodata/master/rule_templates/DustinWin_Full.ini +513 DustinWin无广告全分组规则 https://raw.githubusercontent.com/DustinWin/ruleset_geodata/master/rule_templates/DustinWin_Full_NoAds.ini +514 DustinWin精简规则 https://raw.githubusercontent.com/DustinWin/ruleset_geodata/master/rule_templates/DustinWin_Lite.ini (推荐) +515 DustinWin无广告精简规则 https://raw.githubusercontent.com/DustinWin/ruleset_geodata/master/rule_templates/DustinWin_Lite_NoAds.ini +516 DustinWin黑名单模式规则 https://raw.githubusercontent.com/DustinWin/ruleset_geodata/master/rule_templates/DustinWin_Blacklist.ini +517 DustinWin无广告黑名单模式规则 https://raw.githubusercontent.com/DustinWin/ruleset_geodata/master/rule_templates/DustinWin_Blacklist_NoAds.ini +518 DustinWin轻量规则 https://raw.githubusercontent.com/DustinWin/ruleset_geodata/master/rule_templates/DustinWin_Light.ini +519 DustinWin极简规则 https://raw.githubusercontent.com/DustinWin/ruleset_geodata/master/rule_templates/DustinWin_Nano.ini \ No newline at end of file diff --git a/scripts/init.sh b/scripts/init.sh index 3b76777f..45c0603a 100644 --- a/scripts/init.sh +++ b/scripts/init.sh @@ -22,8 +22,10 @@ grep -qE '/(docker|lxc|kubepods|crio|containerd)/' /proc/1/cgroup 2>/dev/null || [ "$systype" = 'container' ] && CRASHDIR='/etc/ShellCrash' [ -z "$CRASHDIR" ] && [ -n "$clashdir" ] && CRASHDIR="$clashdir" [ -z "$CRASHDIR" ] && [ -d /tmp/SC_tmp ] && . /tmp/SC_tmp/menus/set_crashdir.sh && set_crashdir +TASKCFGDIR="$CRASHDIR"/configs/task #移动文件 mkdir -p "$CRASHDIR" +mkdir -p "$TASKCFGDIR" rm -rf /tmp/SC_tmp/menus/set_crashdir.sh mv -f /tmp/SC_tmp/* "$CRASHDIR" 2>/dev/null ############################## @@ -190,6 +192,15 @@ done for file in fake_ip_filter mac web_save servers_chs.list servers_en.list fake_ip_filter.list singbox_providers.list clash_providers.list; do mv -f "$CRASHDIR"/"$file" "$CRASHDIR"/configs/"$file" 2>/dev/null done +#迁移任务状态文件到新目录 +for file in cron bfstart afstart running affirewall task.user; do + mv -f "$CRASHDIR"/"$file" "$TASKCFGDIR"/"$file" 2>/dev/null + mv -f "$CRASHDIR"/task/"$file" "$TASKCFGDIR"/"$file" 2>/dev/null +done +#修正旧版防火墙注入路径 +for file in /etc/init.d/firewall /etc/init.d/firewall.bak; do + [ -f "$file" ] && sed -i "s#$CRASHDIR/task/affirewall#$TASKCFGDIR/affirewall#g" "$file" 2>/dev/null +done #配置文件改名 mv -f "$CRASHDIR"/configs/ShellClash.cfg "$CFG_PATH" 2>/dev/null #数据库改名 diff --git a/scripts/lang/chs/9_upgrade.lang b/scripts/lang/chs/9_upgrade.lang index fab58d86..953ab36f 100644 --- a/scripts/lang/chs/9_upgrade.lang +++ b/scripts/lang/chs/9_upgrade.lang @@ -89,6 +89,7 @@ UPG_CUSTOM_CORE_MENU_MULTI="多版本内核" UPG_CUSTOM_CORE_LINK_HINT="请输入自定义内核的链接地址" UPG_CUSTOM_CORE_LINK_HINT2="(必须是以.tar.gz、.upx或.gz结尾的压缩文件)" UPG_CUSTOM_CORE_LINK_HINT3="或者输入 0 返回上级菜单" +UPG_CUSTOM_CORE_LINK_MENU="使用自定义内核链接" UPG_ZIPTYPE_TITLE="请选择内核分支及压缩方式:" UPG_ZIPTYPE_1="1) \033[36m最简编译release版本,upx压缩\033[0m" UPG_ZIPTYPE_1_HINT="不支持Gvisor、Tailscale、Wireguard、NaiveProxy" diff --git a/scripts/lang/chs/dns.lang b/scripts/lang/chs/dns.lang index e2930422..08d92c0b 100644 --- a/scripts/lang/chs/dns.lang +++ b/scripts/lang/chs/dns.lang @@ -42,7 +42,8 @@ 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_RESOLVER="修改DEFAULT-DNS(必须是IP,用于解析其他DNS)" +DNS_ADV_EDIT_PROXY_SERVER="修改PROXY-SERVER-DNS(必须是IP,用于解析节点域名)" DNS_ADV_AUTO_ENCRYPT="一键配置加密DNS" DNS_ADV_RESET="重置默认DNS配置" @@ -61,12 +62,6 @@ DNS_CONFIRM_ADD="请确认需要添加的地址:" DNS_CONFIRM_OK="确认无误" DNS_ADD_OK="添加成功" DNS_ADD_FAIL="添加失败" -DNS_DIRECT_NOW="当前DIRECT-DNS:" -DNS_PROXY_NOW="当前PROXY-DNS:" -DNS_DEFAULT_NOW="当前DEFAULT-DNS:" -DNS_INPUT_DIRECT_NEW="请直接输入新的DIRECT-DNS地址" -DNS_INPUT_DIRECT_RESET="或输入 r 重置DIRECT-DNS地址" -DNS_INPUT_PROXY_NEW="请直接输入新的PROXY-DNS地址" -DNS_INPUT_PROXY_RESET="或输入 r 重置PROXY-DNS地址" -DNS_INPUT_DEFAULT_NEW="请直接输入新的DEFAULT-DNS地址" -DNS_INPUT_DEFAULT_RESET="或输入 r 重置DEFAULT-DNS地址" +DNS_NOW="当前DNS:" +DNS_INPUT_NEW="请直接输入新的DNS地址" +DNS_INPUT_RESET="或输入 r 重置DNS地址" diff --git a/scripts/lang/en/9_upgrade.lang b/scripts/lang/en/9_upgrade.lang index e497aff3..ccd5e2b8 100644 --- a/scripts/lang/en/9_upgrade.lang +++ b/scripts/lang/en/9_upgrade.lang @@ -13,7 +13,7 @@ UPG_MENU_DB="Install/Update local " UPG_MENU_DB_NAME="Dashboard" UPG_MENU_CRT="Install/Update local " UPG_MENU_CRT_NAME="certificates" -UPG_MENU_PAC=" proxy view" +UPG_MENU_PAC="Auto proxy view" UPG_MENU_SOURCE="Switch " UPG_MENU_SOURCE_NAME="source and branch" UPG_MENU_UNINSTALL="Uninstall ShellCrash" @@ -89,6 +89,7 @@ UPG_CUSTOM_CORE_MENU_MULTI=" multi-version core" UPG_CUSTOM_CORE_LINK_HINT="Please enter the custom core URL" UPG_CUSTOM_CORE_LINK_HINT2="(must end with .tar.gz, .upx, or .gz)" UPG_CUSTOM_CORE_LINK_HINT3="Or enter 0 to return to the previous menu" +UPG_CUSTOM_CORE_LINK_MENU="Use custom core URL" UPG_ZIPTYPE_TITLE="Please choose the core branch and compression method:" UPG_ZIPTYPE_1="1) \033[36mMinimal release build, upx compressed\033[0m" UPG_ZIPTYPE_1_HINT="Gvisor, Tailscale, Wireguard, and NaiveProxy are not supported" @@ -174,8 +175,8 @@ UPG_CRT_WARN="This device may not have openssl installed, so certificate files c UPG_SOURCE_CUR="Current version: " UPG_SOURCE_CUR2="Current source: " UPG_SOURCE_TITLE="Switch ShellCrash version and update source" -UPG_SOURCE_SWITCH_STABLE="a) Switch to \033[32mstable-stable\033[0m" -UPG_SOURCE_SWITCH_MASTER="b) Switch to \033[36mmaster\033[0m" +UPG_SOURCE_SWITCH_STABLE="a) Switch to \033[32mstable\033[0m" +UPG_SOURCE_SWITCH_MASTER="b) Switch to \033[36mpublic beta-master\033[0m" UPG_SOURCE_SWITCH_DEV="c) Switch to \033[33mdev\033[0m" UPG_SOURCE_CUSTOM="d) Custom source URL (for local or self-hosted sources)" UPG_SOURCE_ROLLBACK="e) \033[31mVersion rollback\033[0m" diff --git a/scripts/lang/en/dns.lang b/scripts/lang/en/dns.lang index 25293cd4..3f56f9d8 100644 --- a/scripts/lang/en/dns.lang +++ b/scripts/lang/en/dns.lang @@ -43,7 +43,8 @@ DNS_ADV_SINGBOX_LIMIT="Note: SingBox core only loads the first DNS entry" DNS_ADV_EDIT_DIRECT="Edit DIRECT-DNS" DNS_ADV_EDIT_PROXY="Edit PROXY-DNS (queries go through the proxy)" -DNS_ADV_EDIT_DEFAULT="Edit DEFAULT-DNS (must be an IP, used to resolve other DNS servers)" +DNS_ADV_EDIT_RESOLVER="Edit DEFAULT-DNS (must be an IP, used to resolve other DNS servers)" +DNS_ADV_EDIT_PROXY_SERVER="Edit PROXY-SERVER-DNS (must be an IP, used to resolve proxy hostnames)" DNS_ADV_AUTO_ENCRYPT="Auto-configure Encrypted DNS" DNS_ADV_RESET="Reset to default DNS configuration" @@ -63,12 +64,6 @@ DNS_CONFIRM_ADD="Please confirm the address to add: " DNS_CONFIRM_OK="Confirm" DNS_ADD_OK="Added successfully" DNS_ADD_FAIL="Add failed" -DNS_DIRECT_NOW="Current DIRECT-DNS: " -DNS_PROXY_NOW="Current PROXY-DNS: " -DNS_DEFAULT_NOW="Current DEFAULT-DNS: " -DNS_INPUT_DIRECT_NEW="Please input new DIRECT-DNS" -DNS_INPUT_DIRECT_RESET="or input r to reset DIRECT-DNS" -DNS_INPUT_PROXY_NEW="Please input new PROXY-DNS" -DNS_INPUT_PROXY_RESET="or input r to reset PROXY-DNS" -DNS_INPUT_DEFAULT_NEW="Please input new DEFAULT-DNS" -DNS_INPUT_DEFAULT_RESET="or input r to reset DEFAULT-DNS" +DNS_NOW="Current DNS: " +DNS_INPUT_NEW="Please input a new DNS address" +DNS_INPUT_RESET="or input r to reset the DNS address" diff --git a/scripts/libs/get_config.sh b/scripts/libs/get_config.sh index 7102d3ae..af3305d4 100644 --- a/scripts/libs/get_config.sh +++ b/scripts/libs/get_config.sh @@ -1,5 +1,6 @@ # 检查配置文件 +[ -z "$TASKCFGDIR" ] && TASKCFGDIR="$CRASHDIR"/configs/task [ -f "$CRASHDIR"/configs/ShellCrash.cfg ] || . "$CRASHDIR"/init.sh >/dev/null 2>&1 . "$CRASHDIR"/configs/command.env >/dev/null 2>&1 . "$CRASHDIR"/configs/ShellCrash.cfg @@ -20,3 +21,4 @@ routing_mark=$((fwmark + 2)) } [ -z "$dns_fallback" ] && dns_fallback="1.1.1.1, 8.8.8.8" [ -z "$dns_resolver" ] && dns_resolver="223.5.5.5, 2400:3200::1" +[ -z "$dns_proxy_server" ] && dns_proxy_server="$dns_resolver" diff --git a/scripts/libs/set_cron.sh b/scripts/libs/set_cron.sh index 29bd8c7e..872166a1 100644 --- a/scripts/libs/set_cron.sh +++ b/scripts/libs/set_cron.sh @@ -4,6 +4,7 @@ crondir="$(crond -h 2>&1 | grep -oE 'Default:.*' | awk -F ":" '{print $2}'| tr - [ ! -w "$crondir" ] && crondir="/var/spool/cron/crontabs" [ ! -w "$crondir" ] && crondir="/var/spool/cron" [ -z "$USER" ] && USER=$(whoami 2>/dev/null) +[ -z "$TASKCFGDIR" ] && TASKCFGDIR="$CRASHDIR"/configs/task tmpcron=/tmp/cron_tmp touch "$tmpcron" @@ -32,7 +33,8 @@ cronset() { #定时任务设置 cronadd "$tmpcron" #华硕/Padavan固件存档在本地,其他则删除 if [ -d /jffs ] || [ -d /etc/storage/ShellCrash ];then - mv -f "$tmpcron" "$CRASHDIR"/task/cron + mkdir -p "$TASKCFGDIR" + mv -f "$tmpcron" "$TASKCFGDIR"/cron else rm -f "$tmpcron" fi diff --git a/scripts/libs/web_get_bin.sh b/scripts/libs/web_get_bin.sh index 1ba78e69..d434b670 100644 --- a/scripts/libs/web_get_bin.sh +++ b/scripts/libs/web_get_bin.sh @@ -7,9 +7,9 @@ get_bin() { #专用于项目内部文件的下载 echo "$2" | grep -q '^bin/' && rt=update #/bin文件改为在update分支下载 echo "$2" | grep -qE '^public/|^rules/' && rt=dev #/public和/rules文件改为在dev分支下载 if [ "$url_id" = 101 -o "$url_id" = 104 ]; then - bin_url="$(grep "$url_id" "$CRASHDIR"/configs/servers.list | awk '{print $3}')@$rt/$2" #jsdelivr特殊处理 + bin_url="$(grep "$url_id" "$CRASHDIR"/configs/servers_chs.list | awk '{print $3}')@$rt/$2" #jsdelivr特殊处理 else - bin_url="$(grep "$url_id" "$CRASHDIR"/configs/servers.list | awk '{print $3}')/$rt/$2" + bin_url="$(grep "$url_id" "$CRASHDIR"/configs/servers_chs.list | awk '{print $3}')/$rt/$2" fi else bin_url="$update_url/$2" diff --git a/scripts/menus/2_settings.sh b/scripts/menus/2_settings.sh index a67c9d56..e2b775bd 100644 --- a/scripts/menus/2_settings.sh +++ b/scripts/menus/2_settings.sh @@ -203,8 +203,8 @@ settings() { exit 0 ;; b) - comp_box "1) $SET_LANG_ZH" \ - "2) $SET_LANG_EN" \ + comp_box "1) 简体中文" \ + "2) English" \ "" \ "0) $COMMON_BACK" read -r -p "$COMMON_INPUT> " num diff --git a/scripts/menus/5_task.sh b/scripts/menus/5_task.sh index a1bda8af..5fb7f363 100644 --- a/scripts/menus/5_task.sh +++ b/scripts/menus/5_task.sh @@ -7,6 +7,7 @@ __IS_MODULE_5_TASK_LOADED=1 # 通用工具 . "$CRASHDIR"/libs/set_config.sh . "$CRASHDIR"/libs/set_cron.sh +[ -z "$TASKCFGDIR" ] && TASKCFGDIR="$CRASHDIR"/configs/task load_lang 5_task @@ -32,7 +33,8 @@ set_cron() { set_service() { # 参数1代表要任务类型,参数2代表任务ID,参数3代表任务描述,参数4代表running任务cron时间 - task_file="$CRASHDIR"/task/$1 + mkdir -p "$TASKCFGDIR" + task_file="$TASKCFGDIR"/$1 [ -s "$task_file" ] && sed -i "/$3/d" "$task_file" # 运行时每分钟执行的任务特殊处理 if [ "$1" = "running" ]; then @@ -53,7 +55,7 @@ task_user_add() { while true; do comp_box "\033[33m$TASK5_USER_ADD_HINT1\033[0m" \ "\033[36m$TASK5_USER_ADD_HINT2\033[0m" \ - "$TASK5_USER_ADD_HINT3\033[32m${CRASHDIR}/task/task.user\033[0m$TASK5_USER_ADD_HINT4" + "$TASK5_USER_ADD_HINT3\033[32m${TASKCFGDIR}/task.user\033[0m$TASK5_USER_ADD_HINT4" btm_box "\033[36m$TASK5_INPUT_CMD\033[0m" \ "$TASK5_OR_BACK" read -r -p "$TASK5_INPUT> " script @@ -63,12 +65,12 @@ task_user_add() { task_command=$script comp_box "$TASK5_CHECK_INPUT\033[32m$task_command\033[0m" # 获取本任务ID - task_max_id=$(awk -F '#' '{print $1}' "$CRASHDIR"/task/task.user 2>/dev/null | sort -n | tail -n 1) + task_max_id=$(awk -F '#' '{print $1}' "$TASKCFGDIR"/task.user 2>/dev/null | sort -n | tail -n 1) [ -z "$task_max_id" ] && task_max_id=200 task_id=$((task_max_id + 1)) read -r -p "$TASK5_INPUT_REMARK> " txt [ -n "$txt" ] && task_name=$txt || task_name="$TASK5_CUSTOM_TASK$task_id" - echo "$task_id#$task_command#$task_name" >>"$CRASHDIR"/task/task.user + echo "$task_id#$task_command#$task_name" >>"$TASKCFGDIR"/task.user msg_alert "\033[32m$TASK5_CUSTOM_ADDED\033[0m" break else @@ -80,10 +82,10 @@ task_user_add() { # 自定义命令删除 task_user_del() { while true; do - if grep -Evq '^#' "$CRASHDIR/task/task.user" 2>/dev/null; then + if grep -Evq '^#' "$TASKCFGDIR/task.user" 2>/dev/null; then comp_box "$TASK5_USER_DEL_HINT1" \ - "$TASK5_USER_DEL_HINT2\033[32m${CRASHDIR}/task/task.user\033[0m" - grep -Ev '^#' "$CRASHDIR/task/task.user" 2>/dev/null | + "$TASK5_USER_DEL_HINT2\033[32m${TASKCFGDIR}/task.user\033[0m" + grep -Ev '^#' "$TASKCFGDIR/task.user" 2>/dev/null | awk -F '#' '{print $1") "$3}' | while IFS= read -r line; do content_line "$line" @@ -94,7 +96,7 @@ task_user_del() { if [ "$num" = 0 ]; then break elif [ -n "$num" ]; then - sed -i "/^$num#/d" "$CRASHDIR"/task/task.user 2>/dev/null + sed -i "/^$num#/d" "$TASKCFGDIR"/task.user 2>/dev/null common_success else msg_alert "\033[31m$TASK5_INPUT_ERROR\033[0m" @@ -111,7 +113,7 @@ task_add() { while true; do comp_box "\033[36m$TASK5_SELECT_ADD\033[0m" # 输出任务列表 - list=$(cat "$CRASHDIR"/task/task_${i18n}.list "$CRASHDIR"/task/task.user 2>/dev/null | grep -Ev '^(#|$)' | awk -F '#' '{print $3}') + list=$(cat "$CRASHDIR"/task/task_${i18n}.list "$TASKCFGDIR"/task.user 2>/dev/null | grep -Ev '^(#|$)' | awk -F '#' '{print $3}') list_box "$list" btm_box "" \ "0) $COMMON_BACK" @@ -122,8 +124,8 @@ task_add() { ;; [1-9] | [1-9][0-9]) if [ "$num" -le "$(echo "$list" | wc -l)" ]; then - task_id=$(cat "$CRASHDIR"/task/task_${i18n}.list "$CRASHDIR"/task/task.user 2>/dev/null | grep -Ev '^(#|$)' | sed -n "$num p" | awk -F '#' '{print $1}') - task_name=$(cat "$CRASHDIR"/task/task_${i18n}.list "$CRASHDIR"/task/task.user 2>/dev/null | grep -Ev '^(#|$)' | sed -n "$num p" | awk -F '#' '{print $3}') + task_id=$(cat "$CRASHDIR"/task/task_${i18n}.list "$TASKCFGDIR"/task.user 2>/dev/null | grep -Ev '^(#|$)' | sed -n "$num p" | awk -F '#' '{print $1}') + task_name=$(cat "$CRASHDIR"/task/task_${i18n}.list "$TASKCFGDIR"/task.user 2>/dev/null | grep -Ev '^(#|$)' | sed -n "$num p" | awk -F '#' '{print $3}') task_type break else @@ -142,11 +144,11 @@ task_del() { # 删除定时任务 cronset "$1" # 删除条件任务 - sed -i "/$1/d" "$CRASHDIR"/task/cron 2>/dev/null - sed -i "/$1/d" "$CRASHDIR"/task/bfstart 2>/dev/null - sed -i "/$1/d" "$CRASHDIR"/task/afstart 2>/dev/null - sed -i "/$1/d" "$CRASHDIR"/task/running 2>/dev/null - sed -i "/$1/d" "$CRASHDIR"/task/affirewall 2>/dev/null + sed -i "/$1/d" "$TASKCFGDIR"/cron 2>/dev/null + sed -i "/$1/d" "$TASKCFGDIR"/bfstart 2>/dev/null + sed -i "/$1/d" "$TASKCFGDIR"/afstart 2>/dev/null + sed -i "/$1/d" "$TASKCFGDIR"/running 2>/dev/null + sed -i "/$1/d" "$TASKCFGDIR"/affirewall 2>/dev/null } # 任务条件选择菜单 @@ -244,8 +246,8 @@ task_manager() { while true; do # 抽取并生成临时列表 cronload >"$TMPDIR"/task_cronlist - cat "$TMPDIR"/task_cronlist "$CRASHDIR"/task/running 2>/dev/null | sort -u | grep -oE "task/task.sh .*" | cut -d ' ' -f 2- >"$TMPDIR"/task_list - cat "$CRASHDIR"/task/bfstart "$CRASHDIR"/task/afstart "$CRASHDIR"/task/affirewall 2>/dev/null | cut -d ' ' -f 2- >>"$TMPDIR"/task_list + cat "$TMPDIR"/task_cronlist "$TASKCFGDIR"/running 2>/dev/null | sort -u | grep -oE "task/task.sh .*" | cut -d ' ' -f 2- >"$TMPDIR"/task_list + cat "$TASKCFGDIR"/bfstart "$TASKCFGDIR"/afstart "$TASKCFGDIR"/affirewall 2>/dev/null | cut -d ' ' -f 2- >>"$TMPDIR"/task_list cat "$TMPDIR"/task_cronlist 2>/dev/null | sort -u | grep -oE " #.*" | grep -v "$TASK5_GUARD_WORD" | awk -F '#' '{print "0 '$TASK5_OLD_PREFIX'"$2}' >>"$TMPDIR"/task_list sed -i '/^ *$/d' "$TMPDIR"/task_list rm -rf "$TMPDIR"/task_cronlist @@ -286,13 +288,13 @@ task_manager() { if [ "$res" = 1 ]; then cronname=$(echo "$task_txt" | awk -F '-' '{print $2}') cronset "$cronname" - sed -i "/$cronname/d" "$CRASHDIR"/task/cron 2>/dev/null + sed -i "/$cronname/d" "$TASKCFGDIR"/cron 2>/dev/null break fi else task_des=$(echo "$task_txt" | awk '{print $2}') - task_name=$(cat "$CRASHDIR"/task/task_${i18n}.list "$CRASHDIR"/task/task.user 2>/dev/null | grep "$task_id" | awk -F '#' '{print $3}') + task_name=$(cat "$CRASHDIR"/task/task_${i18n}.list "$TASKCFGDIR"/task.user 2>/dev/null | grep "$task_id" | awk -F '#' '{print $3}') comp_box "$TASK5_CURRENT_TASK\033[36m$task_des\033[0m" btm_box "1) $TASK5_EDIT_TASK" \ "2) $TASK5_DEL_TASK" \ @@ -313,7 +315,7 @@ task_manager() { common_success ;; 3) - task_command=$(cat "$CRASHDIR"/task/task_${i18n}.list "$CRASHDIR"/task/task.user 2>/dev/null | grep "$task_id" | awk -F '#' '{print $2}') + task_command=$(cat "$CRASHDIR"/task/task_${i18n}.list "$TASKCFGDIR"/task.user 2>/dev/null | grep "$task_id" | awk -F '#' '{print $2}') eval "$task_command" && task_res="$TASK5_RUN_OK" || task_res="$TASK5_RUN_FAIL" msg_alert "\033[33m$TASK5_TASK_PREFIX$task_des】$task_res\033[0m" ;; @@ -367,7 +369,8 @@ task_recom() { task_menu() { while true; do # 检测并创建自定义任务文件 - [ -f "$CRASHDIR"/task/task.user ] || echo "$TASK5_USER_FILE_HEADER" >"$CRASHDIR"/task/task.user + mkdir -p "$TASKCFGDIR" + [ -f "$TASKCFGDIR"/task.user ] || echo "$TASK5_USER_FILE_HEADER" >"$TASKCFGDIR"/task.user comp_box "\033[30;47m$TASK5_MENU_TITLE\033[0m" btm_box "1) $TASK5_MENU_1" \ "2) $TASK5_MENU_2" \ diff --git a/scripts/menus/9_upgrade.sh b/scripts/menus/9_upgrade.sh index 99114fee..7040c16c 100644 --- a/scripts/menus/9_upgrade.sh +++ b/scripts/menus/9_upgrade.sh @@ -409,7 +409,7 @@ setcustcore() { "3) \033[36mSagerNet/sing-box\033[32m@release\033[0m$UPG_CUSTOM_CORE_MENU_OFFICIAL" \ "4) \033[36mDustinWin/mihomo\033[0m$UPG_CUSTOM_CORE_MENU_MULTI" \ "5) \033[36mDustinWin/sing-boxr\033[0m$UPG_CUSTOM_CORE_MENU_MULTI" \ - "$UPG_CORE_MENU_9" \ + "9) $UPG_CUSTOM_CORE_LINK_MENU" \ "" \ "0) $COMMON_BACK" read -r -p "$COMMON_INPUT> " num diff --git a/scripts/menus/dns.sh b/scripts/menus/dns.sh index a920c4f5..c939c01e 100644 --- a/scripts/menus/dns.sh +++ b/scripts/menus/dns.sh @@ -185,13 +185,17 @@ set_dns_adv() { "PROXY-DNS:" \ "\033[36m$dns_fallback\033[0m" \ "" \ - "DEFAULT-DNS:" \ + "RESOLVER-DNS:" \ "\033[33m$dns_resolver\033[0m" \ + "" \ + "PROXY-SERVER-DNS:" \ + "\033[33m$dns_proxy_server\033[0m" \ "" btm_box "1) $DNS_ADV_EDIT_DIRECT" \ "2) $DNS_ADV_EDIT_PROXY" \ - "3) $DNS_ADV_EDIT_DEFAULT" \ - "4) \033[32m$DNS_ADV_AUTO_ENCRYPT\033[0m" \ + "3) $DNS_ADV_EDIT_RESOLVER" \ + "4) $DNS_ADV_EDIT_PROXY_SERVER" \ + "5) \033[32m$DNS_ADV_AUTO_ENCRYPT\033[0m" \ "9) \033[33m$DNS_ADV_RESET\033[0m" \ "" \ "0) $COMMON_BACK" @@ -201,9 +205,9 @@ set_dns_adv() { break ;; 1) - comp_box "$DNS_DIRECT_NOW\033[32m$dns_nameserver\033[0m" - btm_box "\033[36m$DNS_INPUT_DIRECT_NEW\033[0m" \ - "$DNS_INPUT_DIRECT_RESET" \ + comp_box "$DNS_NOW\033[32m$dns_nameserver\033[0m" + btm_box "\033[36m$DNS_INPUT_NEW\033[0m" \ + "$DNS_INPUT_RESET" \ "$DNS_INPUT_REDIR_BACK" read -r -p "$DNS_INPUT> " res case "$res" in @@ -227,9 +231,9 @@ set_dns_adv() { esac ;; 2) - comp_box "$DNS_PROXY_NOW\033[32m$dns_fallback\033[0m" - btm_box "\033[36m$DNS_INPUT_PROXY_NEW\033[0m" \ - "$DNS_INPUT_PROXY_RESET" \ + comp_box "$DNS_NOW\033[32m$dns_fallback\033[0m" + btm_box "\033[36m$DNS_INPUT_NEW\033[0m" \ + "$DNS_INPUT_RESET" \ "$DNS_INPUT_REDIR_BACK" read -r -p "$DNS_INPUT> " res case "$res" in @@ -253,9 +257,9 @@ set_dns_adv() { esac ;; 3) - comp_box "$DNS_DEFAULT_NOW\033[32m$dns_resolver\033[0m" - btm_box "\033[36m$DNS_INPUT_DEFAULT_NEW\033[0m" \ - "$DNS_INPUT_DEFAULT_RESET" \ + comp_box "$DNS_NOW\033[32m$dns_resolver\033[0m" + btm_box "\033[36m$DNS_INPUT_NEW\033[0m" \ + "$DNS_INPUT_RESET" \ "$DNS_INPUT_REDIR_BACK" separator_line "=" read -r -p "$DNS_INPUT> " res @@ -266,7 +270,7 @@ set_dns_adv() { "r") dns_resolver="223.5.5.5, 2400:3200::1" setconfig dns_resolver "'$dns_resolver'" - common_failed + common_success ;; *) if echo "$res" | grep -qE '://.*::'; then @@ -280,6 +284,33 @@ set_dns_adv() { esac ;; 4) + comp_box "$DNS_NOW\033[32m$dns_proxy_server\033[0m" + btm_box "\033[36m$DNS_INPUT_NEW\033[0m" \ + "$DNS_INPUT_RESET" \ + "$DNS_INPUT_REDIR_BACK" + separator_line "=" + read -r -p "$DNS_INPUT> " res + case "$res" in + 0) + continue + ;; + "r") + dns_proxy_server="$dns_resolver" + setconfig dns_proxy_server "'$dns_proxy_server'" + common_success + ;; + *) + if echo "$res" | grep -qE '://.*::'; then + msg_alert "\033[31m$DNS_IPV6_NOT_SUPPORT\033[0m" + else + dns_proxy_server=$(echo "$res" | sed 's#|#,\ #g') + setconfig dns_proxy_server "'$dns_proxy_server'" + msg_alert "\033[32m$COMMON_SUCCESS\033[0m" + fi + ;; + esac + ;; + 5) line_break separator_line "=" if echo "$crashcore" | grep -qE 'meta|singbox'; then diff --git a/scripts/menus/providers_singbox.sh b/scripts/menus/providers_singbox.sh index 4a5fc186..26aa5b94 100644 --- a/scripts/menus/providers_singbox.sh +++ b/scripts/menus/providers_singbox.sh @@ -117,7 +117,6 @@ EOF fi # 通用部分生成 [ "$skip_cert" != "OFF" ] && override_tls='true' || override_tls='false' - [ -n "$(echo "$2" | grep 'oics.net')" ] && domain_resolver='dns_oix' || domain_resolver='dns_resolver' cat >>"$TMPDIR"/providers/providers.json < " num - totalnum=$(grep -acE '^5' "$CRASHDIR"/configs/servers.list) + totalnum=$(grep -acE '^5' "$CRASHDIR"/configs/servers_"$i18n".list) if [ -z "$num" ] || [ "$num" -gt "$totalnum" ]; then errornum elif [ "$num" = 0 ]; then @@ -153,7 +153,7 @@ gen_link_server() { content_line "" common_back read -r -p "$COMMON_INPUT> " num - totalnum=$(grep -acE '^3|^4' "$CRASHDIR"/configs/servers.list) + totalnum=$(grep -acE '^3|^4' "$CRASHDIR"/configs/servers_"$i18n".list) if [ -z "$num" ] || [ "$num" -gt "$totalnum" ]; then errornum elif [ "$num" = 0 ]; then diff --git a/scripts/menus/task_cmd.sh b/scripts/menus/task_cmd.sh index 719b2173..026eae86 100644 --- a/scripts/menus/task_cmd.sh +++ b/scripts/menus/task_cmd.sh @@ -10,6 +10,7 @@ . "$CRASHDIR"/libs/web_get_bin.sh . "$CRASHDIR"/libs/logger.sh . "$CRASHDIR"/libs/i18n.sh +[ -z "$TASKCFGDIR" ] && TASKCFGDIR="$CRASHDIR"/configs/task load_lang task_cmd @@ -140,8 +141,8 @@ hotupdate() { #热更新订阅 case "$1" in [1-9][0-9][0-9]) - task_command=$(cat "$CRASHDIR"/task/task_${i18n}.list "$CRASHDIR"/task/task.user 2>/dev/null | grep "$1" | awk -F '#' '{print $2}') - task_name=$(cat "$CRASHDIR"/task/task_${i18n}.list "$CRASHDIR"/task/task.user 2>/dev/null | grep "$1" | awk -F '#' '{print $3}') + task_command=$(cat "$CRASHDIR"/task/task_${i18n}.list "$TASKCFGDIR"/task.user 2>/dev/null | grep "$1" | awk -F '#' '{print $2}') + task_name=$(cat "$CRASHDIR"/task/task_${i18n}.list "$TASKCFGDIR"/task.user 2>/dev/null | grep "$1" | awk -F '#' '{print $3}') #task_logger "任务$task_name 开始执行" eval $task_command && task_res="$TASK_CMD_RES_OK" || task_res="$TASK_CMD_RES_FAIL" task_logger "$TASK_CMD_EXEC_PREFIX$2$TASK_CMD_EXEC_MID$task_res" diff --git a/scripts/menus/userguide.sh b/scripts/menus/userguide.sh index fae079a4..d5abb9bf 100644 --- a/scripts/menus/userguide.sh +++ b/scripts/menus/userguide.sh @@ -4,7 +4,26 @@ [ -n "$__IS_MODULE_USERGUIDE_LOADED" ] && return __IS_MODULE_USERGUIDE_LOADED=1 -load_lang userguide +. "$CRASHDIR"/libs/check_dir_avail.sh + +select_lang() { + line_break + comp_box "1) 简体中文" \ + "2) English" + read -r -p "请选择语言 Please choose your language > " num + case "$num" in + 1) + echo chs >"$CRASHDIR"/configs/i18n.cfg + ;; + 2) + echo en >"$CRASHDIR"/configs/i18n.cfg + ;; + esac + line_break + load_lang menu + load_lang common + load_lang userguide +} forwhat() { while true; do @@ -89,7 +108,9 @@ forwhat() { # 新手引导 userguide() { - . "$CRASHDIR"/libs/check_dir_avail.sh + + select_lang + forwhat # 检测小内存模式 diff --git a/scripts/starts/afstart.sh b/scripts/starts/afstart.sh index 93455759..d798a517 100644 --- a/scripts/starts/afstart.sh +++ b/scripts/starts/afstart.sh @@ -38,21 +38,21 @@ if [ -n "$test" -o -n "$(pidof CrashCore)" ]; then ckcmd mtd_storage.sh && mtd_storage.sh save >/dev/null 2>&1 #Padavan保存/etc/storage #加载定时任务 cronload | grep -v '^$' >"$TMPDIR"/cron_tmp - [ -s "$CRASHDIR"/task/cron ] && cat "$CRASHDIR"/task/cron >>"$TMPDIR"/cron_tmp - [ -s "$CRASHDIR"/task/running ] && cat "$CRASHDIR"/task/running >>"$TMPDIR"/cron_tmp + [ -s "$TASKCFGDIR"/cron ] && cat "$TASKCFGDIR"/cron >>"$TMPDIR"/cron_tmp + [ -s "$TASKCFGDIR"/running ] && cat "$TASKCFGDIR"/running >>"$TMPDIR"/cron_tmp [ "$bot_tg_service" = ON ] && echo "* * * * * /bin/sh $CRASHDIR/starts/start_legacy_wd.sh bot_tg #ShellCrash-TG_BOT守护进程" >>"$TMPDIR"/cron_tmp [ "$start_old" = ON ] && echo "* * * * * /bin/sh $CRASHDIR/starts/start_legacy_wd.sh shellcrash #ShellCrash保守模式守护进程" >>"$TMPDIR"/cron_tmp awk '!x[$0]++' "$TMPDIR"/cron_tmp >"$TMPDIR"/cron_tmp2 #删除重复行 cronadd "$TMPDIR"/cron_tmp2 rm -f "$TMPDIR"/cron_tmp "$TMPDIR"/cron_tmp2 #加载条件任务 - [ -s "$CRASHDIR"/task/afstart ] && { . "$CRASHDIR"/task/afstart; } & - [ -s "$CRASHDIR"/task/affirewall -a -s /etc/init.d/firewall -a ! -f /etc/init.d/firewall.bak ] && { + [ -s "$TASKCFGDIR"/afstart ] && { . "$TASKCFGDIR"/afstart; } & + [ -s "$TASKCFGDIR"/affirewall -a -s /etc/init.d/firewall -a ! -f /etc/init.d/firewall.bak ] && { #注入防火墙 line=$(grep -En "fw.* restart" /etc/init.d/firewall | cut -d ":" -f 1) - sed -i.bak "${line}a\\. $CRASHDIR/task/affirewall" /etc/init.d/firewall + sed -i.bak "${line}a\\. $TASKCFGDIR/affirewall" /etc/init.d/firewall line=$(grep -En "fw.* start" /etc/init.d/firewall | cut -d ":" -f 1) - sed -i "${line}a\\. $CRASHDIR/task/affirewall" /etc/init.d/firewall + sed -i "${line}a\\. $TASKCFGDIR/affirewall" /etc/init.d/firewall } & exit 0 else diff --git a/scripts/starts/bfstart.sh b/scripts/starts/bfstart.sh index 7facdd59..ce8450f8 100644 --- a/scripts/starts/bfstart.sh +++ b/scripts/starts/bfstart.sh @@ -79,7 +79,7 @@ EOF [ ! -d "$BINDIR"/ui ] && mkdir -p "$BINDIR"/ui [ -z "$crashcore" ] && crashcore=meta #执行条件任务 -[ -s "$CRASHDIR"/task/bfstart ] && . "$CRASHDIR"/task/bfstart +[ -s "$TASKCFGDIR"/bfstart ] && . "$TASKCFGDIR"/bfstart #检查内核配置文件 if [ ! -f "$core_config" ]; then if [ -n "$Url" -o -n "$Https" ]; then @@ -144,4 +144,3 @@ fi rm -rf /tmp/ShellCrash/debug.log rm -rf "$CRASHDIR"/debug.log exit 0 - diff --git a/scripts/starts/clash_modify.sh b/scripts/starts/clash_modify.sh index 94ade412..8e539fa7 100644 --- a/scripts/starts/clash_modify.sh +++ b/scripts/starts/clash_modify.sh @@ -54,9 +54,7 @@ EOF cat >>"$TMPDIR"/dns.yaml </dev/null && { space=$(sed -n "1p" "$TMPDIR"/rule-providers.yaml | grep -oE '^ *') #获取空格数 [ -z "$space" ] && space=' ' - echo "${space}cn: {type: http, behavior: domain, format: mrs, path: ./ruleset/cn.mrs, url: https://testingcf.jsdelivr.net/gh/juewuy/ShellCrash@update/bin/geodata/mrs_geosite_cn.mrs}" >>"$TMPDIR"/rule-providers.yaml + echo "${space}cn: {type: http, behavior: domain, format: mrs, path: ./ruleset/cn.mrs, interval: 86400, url: https://testingcf.jsdelivr.net/gh/juewuy/ShellCrash@update/bin/geodata/mrs_geosite_cn.mrs}" >>"$TMPDIR"/rule-providers.yaml } #对齐rules中的空格 sed -i 's/^ *-/ -/g' "$TMPDIR"/rules.yaml @@ -235,7 +233,7 @@ generate_rule_providers_and_merge_yaml() { cut -c 1- "$TMPDIR"/set.yaml $yaml_dns $yaml_hosts $yaml_user $yaml_others $yaml_add >"$TMPDIR"/config.yaml } -validate_and_rebuild_yaml_if_needed() { +test_yaml() { #测试自定义配置文件 "$TMPDIR"/CrashCore -t -d "$BINDIR" -f "$TMPDIR"/config.yaml >/dev/null if [ "$?" != 0 ]; then @@ -266,7 +264,7 @@ modify_yaml() { generate_set_and_hosts_yaml split_and_customize_yaml_parts add_custom_inbounds_and_rules - generate_rule_providers_and_merge_yaml - validate_and_rebuild_yaml_if_needed + merger_yaml + test_yaml finalize_clash_yaml } diff --git a/scripts/starts/core_config.sh b/scripts/starts/core_config.sh index 634fad78..256b3a68 100644 --- a/scripts/starts/core_config.sh +++ b/scripts/starts/core_config.sh @@ -7,10 +7,13 @@ . "$CRASHDIR"/libs/compare.sh . "$CRASHDIR"/libs/set_config.sh . "$CRASHDIR"/libs/logger.sh +. "$CRASHDIR"/libs/i18n.sh -update_servers() { #更新servers.list - get_bin "$TMPDIR"/servers.list public/servers.list - [ "$?" = 0 ] && mv -f "$TMPDIR"/servers.list "$CRASHDIR"/configs/servers.list +load_lang + +update_servers() { #更新servers_${i18n}.list + get_bin "$TMPDIR"/servers_${i18n}.list public/servers_${i18n}.list + [ "$?" = 0 ] && mv -f "$TMPDIR"/servers_${i18n}.list "$CRASHDIR"/configs/servers_${i18n}.list } gen_ua(){ #自动生成ua [ -z "$user_agent" -o "$user_agent" = "auto" ] && { @@ -26,10 +29,10 @@ gen_ua(){ #自动生成ua } get_core_config() { #下载内核配置文件 [ -z "$rule_link" ] && rule_link=1 - [ -z "$server_link" ] || [ $server_link -gt $(grep -aE '^4' "$CRASHDIR"/configs/servers.list | wc -l) ] && server_link=1 - Server=$(grep -aE '^3|^4' "$CRASHDIR"/configs/servers.list | sed -n ""$server_link"p" | awk '{print $3}') - Server_ua=$(grep -aE '^4' "$CRASHDIR"/configs/servers.list | sed -n ""$server_link"p" | awk '{print $4}') - Config=$(grep -aE '^5' "$CRASHDIR"/configs/servers.list | sed -n ""$rule_link"p" | awk '{print $3}') + [ -z "$server_link" ] || [ $server_link -gt $(grep -aE '^4' "$CRASHDIR"/configs/servers_${i18n}.list | wc -l) ] && server_link=1 + Server=$(grep -aE '^3|^4' "$CRASHDIR"/configs/servers_${i18n}.list | sed -n ""$server_link"p" | awk '{print $3}') + Server_ua=$(grep -aE '^4' "$CRASHDIR"/configs/servers_${i18n}.list | sed -n ""$server_link"p" | awk '{print $4}') + Config=$(grep -aE '^5' "$CRASHDIR"/configs/servers_${i18n}.list | sed -n ""$rule_link"p" | awk '{print $3}') gen_ua #如果传来的是Url链接则合成Https链接,否则直接使用Https链接 if [ -z "$Https" ]; then diff --git a/scripts/starts/fw_getlanip.sh b/scripts/starts/fw_getlanip.sh index 2e3cb0be..b278a8e4 100644 --- a/scripts/starts/fw_getlanip.sh +++ b/scripts/starts/fw_getlanip.sh @@ -2,16 +2,16 @@ getlanip() { #获取局域网host地址 i=1 while [ "$i" -le "20" ]; do #ipv4局域网网段 - host_ipv4=$(ip route show scope link | grep -Ev 'wan|utun|iot|peer|docker|podman|virbr|vnet|ovs|vmbr|veth|vmnic|vboxnet|lxcbr|xenbr|vEthernet' | awk '{print $1}') + host_ipv4=$(ip route show scope link | grep -Ev 'wan|utun|iot|peer|docker|podman|virbr|vnet|ovs|vmbr|veth|vmnic|vboxnet|lxcbr|xenbr|vEthernet|wgs|multicast|anycast' | awk '{print $1}') #ipv6局域网网段 - 从IPv4已识别的LAN接口获取全局IPv6前缀 [ "$ipv6_redir" = "ON" ] && { - lan_ifaces=$(ip route show scope link | grep -Ev 'ppp|wan|utun|iot|peer|docker|podman|virbr|vnet|ovs|vmbr|veth|vmnic|vboxnet|lxcbr|xenbr|vEthernet' | awk '{for(i=1;i<=NF;i++) if($i=="dev") {print $(i+1); break}}' | grep -v '^lo$' | sort -u) + lan_ifaces=$(ip route show scope link | grep -Ev 'ppp|wan|utun|iot|peer|docker|podman|virbr|vnet|ovs|vmbr|veth|vmnic|vboxnet|lxcbr|xenbr|vEthernet|wgs|multicast|anycast' | awk '{for(i=1;i<=NF;i++) if($i=="dev") {print $(i+1); break}}' | grep -v '^lo$' | sort -u) host_ipv6=$( for iface in $lan_ifaces; do ip -6 addr show dev $iface 2>/dev/null done | grep 'scope global' | awk '{print $2}' | tr '\n' ' ' | sed 's/ $//' ) - [ -z "$host_ipv6" ] && host_ipv6=$(ip -6 route show | grep -Ev 'default|unreachable|fe80::/|wan|ppp|utun|iot|peer|docker|podman|virbr|vnet|ovs|vmbr|veth|vmnic|vboxnet|lxcbr|xenbr|vEthernet' | awk '{print $1}' | tr '\n' ' ' | sed 's/ $//') + [ -z "$host_ipv6" ] && host_ipv6=$(ip -6 route show | grep -Ev 'default|unreachable|fe80::/|wan|ppp|utun|iot|peer|docker|podman|virbr|vnet|ovs|vmbr|veth|vmnic|vboxnet|lxcbr|xenbr|vEthernet|wgs|multicast|anycast' | awk '{print $1}' | tr '\n' ' ' | sed 's/ $//') } [ -f "$TMPDIR"/ShellCrash.log ] && break [ -n "$host_ipv4" -a "$ipv6_redir" != "ON" ] && break diff --git a/scripts/starts/general_init.sh b/scripts/starts/general_init.sh index 38228304..d19efd6d 100644 --- a/scripts/starts/general_init.sh +++ b/scripts/starts/general_init.sh @@ -3,6 +3,7 @@ #初始化目录 [ -z "$CRASHDIR" ] && CRASHDIR=$( cd $(dirname $0);cd ..;pwd) +TASKCFGDIR="$CRASHDIR"/configs/task profile=/etc/profile . "$CRASHDIR"/libs/set_profile.sh . "$CRASHDIR"/libs/set_cron.sh diff --git a/scripts/starts/singbox_modify.sh b/scripts/starts/singbox_modify.sh index 84c294a9..64a6f34f 100644 --- a/scripts/starts/singbox_modify.sh +++ b/scripts/starts/singbox_modify.sh @@ -190,8 +190,8 @@ EOF "routing_mark": $routing_mark }, { - "tag": "dns_oix", - "type": "udp", "server": "124.221.68.73", "server_port": 1053, + "tag": "dns_proxy_server", + $(parse_singbox_dns "$dns_proxy_server") "routing_mark": $routing_mark } ], diff --git a/version b/version index 8392d24f..0a6e87a2 100644 --- a/version +++ b/version @@ -1 +1 @@ -1.9.5alpha13 +1.9.5alpha14