Merge branch 'dev' into gateway
# Conflicts: # scripts/start.sh
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
#!/bin/sh
|
||||
# Copyright (C) Juewuy
|
||||
|
||||
version=1.9.3beta5fix
|
||||
version=1.9.3beta7
|
||||
|
||||
setdir() {
|
||||
dir_avail() {
|
||||
@@ -248,20 +248,20 @@ grep -q 'firewall_mod' "$CRASHDIR/configs/ShellClash.cfg" 2>/dev/null || {
|
||||
[ -w /jffs/configs/profile.add ] && profile=/jffs/configs/profile.add
|
||||
[ -w ~/.bashrc ] && profile=~/.bashrc
|
||||
[ -w /etc/profile ] && profile=/etc/profile
|
||||
set_profile(){
|
||||
[ -z "$my_alias" ] && my_alias=crash
|
||||
sed -i "/alias crash=*/"d "$1"
|
||||
sed -i "/alias ${my_alias}=*/"d "$1"
|
||||
echo "alias ${my_alias}=\"$shtype $CRASHDIR/menu.sh\"" >>"$1" #设置快捷命令环境变量
|
||||
sed -i '/export CRASHDIR=*/'d "$1"
|
||||
echo "export CRASHDIR=\"$CRASHDIR\"" >>"$1" #设置路径环境变量
|
||||
. "$1" >/dev/null 2>&1
|
||||
}
|
||||
if [ -n "$profile" ]; then
|
||||
sed -i '/alias crash=*/'d $profile
|
||||
echo "alias crash=\"$shtype $CRASHDIR/menu.sh\"" >>$profile #设置快捷命令环境变量
|
||||
sed -i '/export CRASHDIR=*/'d $profile
|
||||
echo "export CRASHDIR=\"$CRASHDIR\"" >>$profile #设置路径环境变量
|
||||
. $profile >/dev/null 2>&1 || echo 运行错误!请使用bash而不是dash运行安装命令!!!
|
||||
set_profile "$profile"
|
||||
#适配zsh环境变量
|
||||
zsh --version >/dev/null 2>&1 && [ -z "$(cat ~/.zshrc 2>/dev/null | grep CRASHDIR)" ] && {
|
||||
sed -i '/alias crash=*/'d ~/.zshrc 2>/dev/null
|
||||
echo "alias crash=\"$shtype $CRASHDIR/menu.sh\"" >>~/.zshrc
|
||||
sed -i '/export CRASHDIR=*/'d ~/.zshrc 2>/dev/null
|
||||
echo "export CRASHDIR=\"$CRASHDIR\"" >>~/.zshrc
|
||||
. ~/.zshrc >/dev/null 2>&1
|
||||
}
|
||||
zsh --version >/dev/null 2>&1 && [ -z "$(cat ~/.zshrc 2>/dev/null | grep CRASHDIR)" ] && set_profile '~/.zshrc' 2>/dev/null
|
||||
setconfig my_alias "$my_alias"
|
||||
else
|
||||
echo -e "\033[33m无法写入环境变量!请检查安装权限!\033[0m"
|
||||
exit 1
|
||||
|
||||
@@ -699,6 +699,7 @@ setdns() { #DNS详细设置
|
||||
[ -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 "$hosts_opt" ] && hosts_opt=已启用
|
||||
[ -z "$dns_protect" ] && dns_protect=ON
|
||||
[ -z "$dns_redir" ] && dns_redir=未开启
|
||||
[ -z "$dns_no" ] && dns_no=未禁用
|
||||
echo -----------------------------------------------
|
||||
@@ -712,10 +713,11 @@ setdns() { #DNS详细设置
|
||||
echo -e " 1 修改\033[32m基础DNS\033[0m"
|
||||
echo -e " 2 修改\033[36mPROXY-DNS\033[0m(该DNS查询会经过节点)"
|
||||
echo -e " 3 修改\033[33m解析DNS\033[0m(必须是IP,用于解析其他DNS)"
|
||||
echo -e " 4 一键配置\033[32m加密DNS\033[0m"
|
||||
echo -e " 5 hosts优化: \033[36m$hosts_opt\033[0m ————调用本机hosts并劫持NTP服务"
|
||||
echo -e " 6 Dnsmasq转发: \033[36m$dns_redir\033[0m ————不推荐使用"
|
||||
echo -e " 7 禁用DNS劫持: \033[36m$dns_no\033[0m ————搭配第三方DNS使用"
|
||||
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 Dnsmasq转发:\033[36m$dns_redir\033[0m ———不推荐使用"
|
||||
echo -e " 7 禁用DNS劫持:\033[36m$dns_no\033[0m ———搭配第三方DNS使用"
|
||||
echo -e " 8 一键配置\033[32m加密DNS\033[0m"
|
||||
echo -e " 9 \033[33m重置\033[0m默认DNS配置"
|
||||
echo -e " 0 返回上级菜单"
|
||||
echo -----------------------------------------------
|
||||
@@ -756,21 +758,9 @@ setdns() { #DNS详细设置
|
||||
setdns
|
||||
;;
|
||||
4)
|
||||
echo -----------------------------------------------
|
||||
openssldir="$(openssl version -d 2>&1 | awk -F '"' '{print $2}')"
|
||||
if [ -s "$openssldir/certs/ca-certificates.crt" -o -s "/etc/ssl/certs/ca-certificates.crt" ]; then
|
||||
dns_nameserver='https://doh.360.cn/dns-query, 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'
|
||||
dns_resolver='https://223.5.5.5/dns-query, 2400:3200::1'
|
||||
setconfig dns_nameserver "'$dns_nameserver'"
|
||||
setconfig dns_fallback "'$dns_fallback'"
|
||||
setconfig dns_resolver "'$dns_resolver'"
|
||||
echo -e "\033[32m已设置加密DNS,如出现DNS解析问题,请尝试重置DNS配置!\033[0m"
|
||||
else
|
||||
echo -e "\033[31m找不到根证书文件,无法启用加密DNS,Linux系统请自行搜索安装OpenSSL的方式!\033[0m"
|
||||
fi
|
||||
sleep 1
|
||||
setdns
|
||||
[ "$dns_protect" = "ON" ] && dns_protect=OFF || dns_protect=ON
|
||||
setconfig dns_protect $dns_protect
|
||||
setdns
|
||||
;;
|
||||
5)
|
||||
echo -----------------------------------------------
|
||||
@@ -818,6 +808,24 @@ setdns() { #DNS详细设置
|
||||
sleep 1
|
||||
setdns
|
||||
;;
|
||||
8)
|
||||
echo -----------------------------------------------
|
||||
openssldir="$(openssl version -d 2>&1 | awk -F '"' '{print $2}')"
|
||||
if [ -s "$openssldir/certs/ca-certificates.crt" ] || [ -s "/etc/ssl/certs/ca-certificates.crt" ] || \
|
||||
echo "$crashcore" |grep -qE 'meta|singbox'; then
|
||||
dns_nameserver='https://doh.360.cn/dns-query, 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'
|
||||
dns_resolver='https://223.5.5.5/dns-query, 2400:3200::1'
|
||||
setconfig dns_nameserver "'$dns_nameserver'"
|
||||
setconfig dns_fallback "'$dns_fallback'"
|
||||
setconfig dns_resolver "'$dns_resolver'"
|
||||
echo -e "\033[32m已设置加密DNS,如出现DNS解析问题,请尝试重置DNS配置!\033[0m"
|
||||
else
|
||||
echo -e "\033[31m找不到根证书文件,无法启用加密DNS,Linux系统请自行搜索安装OpenSSL的方式!\033[0m"
|
||||
fi
|
||||
sleep 1
|
||||
setdns
|
||||
;;
|
||||
9)
|
||||
dns_nameserver=
|
||||
dns_fallback=
|
||||
@@ -1996,10 +2004,14 @@ uninstall() {
|
||||
#移除其他内容
|
||||
[ -w ~/.bashrc ] && profile=~/.bashrc
|
||||
[ -w /etc/profile ] && profile=/etc/profile
|
||||
sed -i '/alias clash=*/'d $profile
|
||||
sed -i "/alias $my_alias=*/"d $profile
|
||||
sed -i '/alias crash=*/'d $profile
|
||||
sed -i '/export CRASHDIR=*/'d $profile
|
||||
sed -i '/export crashdir=*/'d $profile
|
||||
[ -w ~/.zshrc ] && {
|
||||
sed -i "/alias $my_alias=*/"d ~/.zshrc
|
||||
sed -i '/export CRASHDIR=*/'d ~/.zshrc
|
||||
}
|
||||
sed -i '/all_proxy/'d $profile
|
||||
sed -i '/ALL_PROXY/'d $profile
|
||||
sed -i "/启用外网访问SSH服务/d" /etc/firewall.user 2>/dev/null
|
||||
|
||||
@@ -43,8 +43,9 @@ auto_clean(){
|
||||
#自动清理升级备份文件夹
|
||||
rm -rf /data/etc_bak
|
||||
#自动清理被写入闪存的系统日志并禁止服务
|
||||
/etc/init.d/stat_points stop
|
||||
/etc/init.d/stat_points disable
|
||||
/etc/init.d/stat_points stop 2>/dev/null
|
||||
/etc/init.d/stat_points disable 2>/dev/null
|
||||
sed -i '\#/logrotate#{ /^[[:space:]]*#/!s/^/#ShellCrash自动注释 / }' /etc/crontabs/root
|
||||
rm -rf /data/usr/log
|
||||
}
|
||||
init(){
|
||||
|
||||
@@ -303,6 +303,12 @@ check_singbox_config() { #检查singbox配置文件
|
||||
sed -i 's/{[^{}]*"dns-out"[^{}]*}//g' "$core_config_new"
|
||||
}
|
||||
#检测并去除无效策略组
|
||||
grep -q '"sni"' "$core_config_new" && {
|
||||
logger "获取到了不支持的旧版(<1.12)配置文件【$core_config_new】!" 31
|
||||
echo "请尝试使用支持1.12以上版本内核的方式生成配置文件!"
|
||||
exit 1
|
||||
}
|
||||
#检测并去除无效策略组
|
||||
[ -n "$url_type" ] && {
|
||||
#获得无效策略组名称
|
||||
grep -oE '\{"type":"urltest","tag":"[^"]*","outbounds":\["DIRECT"\]' "$core_config_new" | sed -n 's/.*"tag":"\([^"]*\)".*/\1/p' >"$TMPDIR"/singbox_tags
|
||||
@@ -432,11 +438,12 @@ EOF
|
||||
[ "$dns_mod" = "mix" ] && echo ' - "rule-set:cn"' >>"$TMPDIR"/dns.yaml
|
||||
#mix模式和route模式插入分流设置
|
||||
if [ "$dns_mod" = "mix" ] || [ "$dns_mod" = "route" ];then
|
||||
[ "$dns_protect" = "OFF" ] && dns_final="$dns_fallback" || dns_final="$dns_nameserver"
|
||||
cat >>"$TMPDIR"/dns.yaml <<EOF
|
||||
respect-rules: true
|
||||
nameserver-policy: {'rule-set:cn': [ $dns_nameserver ]}
|
||||
proxy-server-nameserver : [ $dns_resolver ]
|
||||
nameserver: [ $dns_fallback ]
|
||||
nameserver: [ $dns_final ]
|
||||
EOF
|
||||
else
|
||||
cat >>"$TMPDIR"/dns.yaml <<EOF
|
||||
@@ -687,11 +694,11 @@ EOF
|
||||
#获取detour出口
|
||||
auto_detour=$(grep -E '"type": "urltest"' -A 1 "$TMPDIR"/jsons/outbounds.json | grep '"tag":' | head -n 1 | sed 's/^[[:space:]]*"tag": //;s/,$//' )
|
||||
[ -z "$auto_detour" ] && auto_detour=$(grep -E '"type": "selector"' -A 1 "$TMPDIR"/jsons/outbounds.json | grep '"tag":' | head -n 1 | sed 's/^[[:space:]]*"tag": //;s/,$//' )
|
||||
[ -z "$auto_detour" ] && auto_detour=DIRECT
|
||||
[ -z "$auto_detour" ] && auto_detour='"DIRECT"'
|
||||
#根据dns模式生成
|
||||
[ "$dns_mod" = "redir_host" ] && {
|
||||
global_dns=dns_proxy
|
||||
direct_dns="{ \"inbound\": [ \"dns-in\" ], \"server\": \"dns_direct\" }"
|
||||
direct_dns='{ "inbound": [ "dns-in" ], "server": "dns_direct" }'
|
||||
}
|
||||
[ "$dns_mod" = "fake-ip" ] || [ "$dns_mod" = "mix" ] && {
|
||||
global_dns=dns_fakeip
|
||||
@@ -703,13 +710,15 @@ EOF
|
||||
[ -n "$fake_ip_filter_regex" ] && fake_ip_filter_regex="{ \"domain_regex\": [$fake_ip_filter_regex], \"server\": \"dns_direct\" },"
|
||||
proxy_dns='{ "query_type": ["A", "AAAA"], "server": "dns_fakeip", "strategy": "'"$strategy"'", "rewrite_ttl": 1 }'
|
||||
#mix模式插入fakeip过滤规则
|
||||
[ "$dns_mod" = "mix" ] && direct_dns="{ \"rule_set\": [\"cn\"], \"server\": \"dns_direct\" },"
|
||||
[ "$dns_mod" = "mix" ] && direct_dns='{ "rule_set": ["cn"], "server": "dns_direct" }'
|
||||
}
|
||||
[ "$dns_mod" = "route" ] && {
|
||||
global_dns=dns_proxy
|
||||
direct_dns="{ \"rule_set\": [\"cn\"], \"server\": \"dns_direct\" }"
|
||||
direct_dns='{ "rule_set": ["cn"], "server": "dns_direct" }'
|
||||
}
|
||||
#生成add_rule_set.json
|
||||
[ "$dns_protect" = "OFF" ] && sed -i 's/"server": "dns_proxy"/"server": "dns_direct"/g' "$TMPDIR"/jsons/route.json
|
||||
#生成add_rule_set.json
|
||||
[ "$dns_mod" = "mix" ] || [ "$dns_mod" = "route" ] && \
|
||||
[ -z "$(cat "$CRASHDIR"/jsons/*.json | grep -Ei '"tag" *: *"cn"')" ] && \
|
||||
cat >"$TMPDIR"/jsons/add_rule_set.json <<EOF
|
||||
@@ -718,9 +727,8 @@ EOF
|
||||
"rule_set": [
|
||||
{
|
||||
"tag": "cn",
|
||||
"type": "remote",
|
||||
"path": "./ruleset/cn.srs",
|
||||
"url": "https://testingcf.jsdelivr.net/gh/juewuy/ShellCrash@update/bin/geodata/srs_geosite_cn.srs"
|
||||
"type": "local",
|
||||
"path": "./ruleset/cn.srs"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -785,29 +793,17 @@ EOF
|
||||
"default_domain_resolver": "dns_resolver",
|
||||
"default_mark": $routing_mark,
|
||||
"rules": [
|
||||
{ "inbound": [ "dns-in" ], "action": "hijack-dns" },
|
||||
{ "inbound": [ "dns-in" ], "action": "sniff", "timeout": "500ms" },
|
||||
$tailscale_set
|
||||
$sniffer_set
|
||||
{ "protocol": "dns", "action": "hijack-dns" },
|
||||
{ "inbound": [ "dns-in" ], "action": "reject" },
|
||||
{ "clash_mode": "Direct" , "outbound": "DIRECT" },
|
||||
{ "clash_mode": "Global" , "outbound": "GLOBAL" }
|
||||
]
|
||||
}
|
||||
}
|
||||
EOF
|
||||
#生成ntp.json
|
||||
# cat > "$TMPDIR"/jsons/ntp.json <<EOF
|
||||
# {
|
||||
# "ntp": {
|
||||
# "enabled": true,
|
||||
# "server": "203.107.6.88",
|
||||
# "server_port": 123,
|
||||
# "interval": "30m0s",
|
||||
# "detour": "DIRECT"
|
||||
# }
|
||||
# }
|
||||
# EOF
|
||||
#生成certificate.json
|
||||
cat >"$TMPDIR"/jsons/certificate.json <<EOF
|
||||
{
|
||||
"certificate": {
|
||||
@@ -877,7 +873,7 @@ EOF
|
||||
grep -qE '"tag": "REJECT"' "$TMPDIR"/jsons/outbounds.json || add_reject='{ "tag": "REJECT", "type": "block" }'
|
||||
grep -qE '"tag": "GLOBAL"' "$TMPDIR"/jsons/outbounds.json || {
|
||||
auto_proxies=$(grep -E '"type": "(selector|urltest)"' -A 1 "$TMPDIR"/jsons/outbounds.json | grep '"tag":' | sed 's/^[[:space:]]*"tag": //;$ s/,$//')
|
||||
add_global='{ "tag": "GLOBAL", "type": "selector", "outbounds": ['"$auto_proxies"']}'
|
||||
[ -n "$auto_proxies" ] && add_global='{ "tag": "GLOBAL", "type": "selector", "outbounds": ['"$auto_proxies"', "DIRECT"]}'
|
||||
}
|
||||
[ -n "$add_direct" -a -n "$add_reject" ] && add_direct="${add_direct},"
|
||||
[ -n "$add_reject" -a -n "$add_global" ] && add_reject="${add_reject},"
|
||||
@@ -1676,10 +1672,10 @@ web_save() { #最小化保存面板节点选择
|
||||
#使用get_save获取面板节点设置
|
||||
get_save http://127.0.0.1:${db_port}/proxies | sed 's/:{/!/g' | awk -F '!' '{for(i=1;i<=NF;i++) print $i}' | grep -aE '"Selector"' | grep -aoE '"name":.*"now":".*",' >"$TMPDIR"/web_proxies
|
||||
[ -s "$TMPDIR"/web_proxies ] && while read line; do
|
||||
def=$(echo $line | grep -oE '"all".*",' | awk -F "[:\"]" '{print $5}')
|
||||
now=$(echo $line | grep -oE '"now".*",' | awk -F "[:\"]" '{print $5}')
|
||||
def=$(echo $line | grep -oE '"all".*",' | awk -F "[\"]" '{print $4}')
|
||||
now=$(echo $line | grep -oE '"now".*",' | awk -F "[\"]" '{print $4}')
|
||||
[ "$def" != "$now" ] && {
|
||||
name=$(echo $line | grep -oE '"name".*",' | awk -F "[:\"]" '{print $5}')
|
||||
name=$(echo $line | grep -oE '"name".*",' | awk -F "[\"]" '{print $4}')
|
||||
echo "${name},${now}" >>"$TMPDIR"/web_save
|
||||
}
|
||||
done <"$TMPDIR"/web_proxies
|
||||
@@ -1698,12 +1694,11 @@ web_restore() { #还原面板选择
|
||||
#设置循环检测面板端口以判定服务启动是否成功
|
||||
test=""
|
||||
i=1
|
||||
while [ -z "$test" -a "$i" -lt 20 ]; do
|
||||
sleep 2
|
||||
test=$(get_save http://127.0.0.1:${db_port}/configs | grep -o port)
|
||||
while [ -z "$test" -a "$i" -lt 30 ]; do
|
||||
test=$(get_save http://127.0.0.1:${db_port}/proxies | grep -o proxies)
|
||||
i=$((i + 1))
|
||||
sleep 2
|
||||
done
|
||||
sleep 1
|
||||
[ -n "$test" ] && {
|
||||
#发送节点选择数据
|
||||
[ -s "$CRASHDIR"/configs/web_save ] && {
|
||||
|
||||
@@ -1438,8 +1438,10 @@ setcustcore(){ #自定义内核
|
||||
echo -e "1 \033[36mMetaCubeX/mihomo\033[32m@release\033[0m版本官方内核"
|
||||
echo -e "2 \033[36mMetaCubeX/mihomo\033[32m@alpha\033[0m版本官方内核"
|
||||
echo -e "3 \033[36mvernesong/mihomo\033[32m@alpha\033[0m版本内核(支持Smart策略)"
|
||||
echo -e "4 \033[36mreF1nd/sing-box\033[32m@dev\033[0m版本内核(完整编译)"
|
||||
echo -e "5 Premium-2023.08.17内核(已停止维护)"
|
||||
echo -e "4 \033[36mSagerNet/sing-box\033[32m@release\033[0m版本官方内核"
|
||||
echo -e "5 \033[36mreF1nd/sing-box\033[32m@release\033[0m版本内核(完整编译)"
|
||||
echo -e "6 \033[36mreF1nd/sing-box\033[32m@dev\033[0m版本内核(完整编译)"
|
||||
echo -e "7 Premium-2023.08.17内核(已停止维护)"
|
||||
echo -e "a \033[33m自定义内核链接 \033[0m"
|
||||
echo -----------------------------------------------
|
||||
read -p "请输入对应数字 > " num
|
||||
@@ -1463,12 +1465,24 @@ setcustcore(){ #自定义内核
|
||||
checkcustcore
|
||||
;;
|
||||
4)
|
||||
project=SagerNet/sing-box
|
||||
api_tag=latest
|
||||
crashcore=singbox
|
||||
checkcustcore
|
||||
;;
|
||||
5)
|
||||
project=juewuy/ShellCrash
|
||||
api_tag=singbox_core_reF1nd
|
||||
crashcore=singboxr
|
||||
checkcustcore
|
||||
;;
|
||||
5)
|
||||
6)
|
||||
project=juewuy/ShellCrash
|
||||
api_tag=singbox_core_dev_reF1nd
|
||||
crashcore=singboxr
|
||||
checkcustcore
|
||||
;;
|
||||
7)
|
||||
project=juewuy/ShellCrash
|
||||
api_tag=clash.premium.latest
|
||||
crashcore=clashpre
|
||||
@@ -2182,7 +2196,6 @@ update(){
|
||||
|
||||
elif [ "$num" = 2 ]; then
|
||||
setcore
|
||||
update
|
||||
|
||||
elif [ "$num" = 3 ]; then
|
||||
setgeo
|
||||
@@ -2262,7 +2275,7 @@ userguide(){
|
||||
redir_mod="Redir模式"
|
||||
fi
|
||||
}
|
||||
setconfig crashcore "mihomo"
|
||||
setconfig crashcore "meta"
|
||||
setconfig redir_mod "$redir_mod"
|
||||
setconfig dns_mod mix
|
||||
setconfig firewall_area '1'
|
||||
|
||||
Reference in New Issue
Block a user