v1.8.8c
~重写本机代理部分逻辑,修复相关死循环bug ~安装时现在默认会自动清理多余的旧目录 ~现在在linux设备上默认使用保守模式而不是systemd ~singbox默认启用sniff以匹配规则,但不会覆写域名 ~修复使用systemd启动时,无法正确配置防火墙的bug ~修复在线生成时导入包含@符号的链接时,无法正确转换的bug ~修复singbox对ipv6-tun模式的支持
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -5,4 +5,4 @@ meta_v=v1.18.0
|
|||||||
|
|
||||||
singbox_v=1.7.8
|
singbox_v=1.7.8
|
||||||
GeoIP_v=20240120
|
GeoIP_v=20240120
|
||||||
versionsh=1.8.8c
|
versionsh=1.8.8d
|
||||||
|
|||||||
@@ -661,12 +661,12 @@ set_core_config(){ #配置文件功能
|
|||||||
echo -----------------------------------------------
|
echo -----------------------------------------------
|
||||||
echo -e "\033[30;47m ShellCrash配置文件管理\033[0m"
|
echo -e "\033[30;47m ShellCrash配置文件管理\033[0m"
|
||||||
echo -----------------------------------------------
|
echo -----------------------------------------------
|
||||||
echo -e " 1 在线\033[32m生成内核配置文件\033[0m"
|
echo -e " 1 在线\033[32m生成$crashcore配置文件\033[0m"
|
||||||
echo -e " 2 导入\033[33m外部配置文件链接\033[0m"
|
echo -e " 2 导入\033[33m外部配置文件链接\033[0m"
|
||||||
echo -e " 3 \033[36m管理\033[0m配置文件"
|
echo -e " 3 \033[36m管理\033[0m配置文件"
|
||||||
echo -e " 4 \033[33m更新\033[0m配置文件"
|
echo -e " 4 \033[33m更新\033[0m配置文件"
|
||||||
echo -e " 5 设置\033[36m自动更新\033[0m"
|
echo -e " 5 设置\033[36m自动更新\033[0m"
|
||||||
echo -e " 6 配置文件\033[32m覆写\033[0m"
|
echo -e " 6 \033[32m自定义\033[0m配置文件"
|
||||||
echo -----------------------------------------------
|
echo -----------------------------------------------
|
||||||
[ "$inuserguide" = 1 ] || echo -e " 0 返回上级菜单"
|
[ "$inuserguide" = 1 ] || echo -e " 0 返回上级菜单"
|
||||||
read -p "请输入对应数字 > " num
|
read -p "请输入对应数字 > " num
|
||||||
@@ -871,15 +871,15 @@ switch_core(){
|
|||||||
setconfig geosite_cn_v
|
setconfig geosite_cn_v
|
||||||
}
|
}
|
||||||
read -p "是否保留$core_old相关配置文件?(1/0) > " res
|
read -p "是否保留$core_old相关配置文件?(1/0) > " res
|
||||||
[ "$res" = '0' ] && [ "$core_old" = "clash" ] && rm -rf ${CRASHDIR}/yamls
|
[ "$res" = '0' ] && [ "$core_old" = "clash" ] && rm -rf ${CRASHDIR}/yamls/*
|
||||||
[ "$res" = '0' ] && [ "$core_old" = "singbox" ] && rm -rf ${CRASHDIR}/jsons
|
[ "$res" = '0' ] && [ "$core_old" = "singbox" ] && rm -rf ${CRASHDIR}/jsons/*
|
||||||
}
|
}
|
||||||
if [ "$crashcore" = singbox ];then
|
if [ "$crashcore" = singbox ];then
|
||||||
COMMAND='"$BINDIR/CrashCore run -D $BINDIR -c $TMPDIR/config.json"'
|
COMMAND='"$BINDIR/CrashCore run -D $BINDIR -c $TMPDIR/config.json"'
|
||||||
else
|
else
|
||||||
COMMAND='"$BINDIR/CrashCore -d $BINDIR -f $TMPDIR/config.yaml"'
|
COMMAND='"$BINDIR/CrashCore -d $BINDIR -f $TMPDIR/config.yaml"'
|
||||||
fi
|
fi
|
||||||
setconfig COMMAND "$COMMAND" ${CRASHDIR}/configs/command.env
|
setconfig COMMAND "$COMMAND" ${CRASHDIR}/configs/command.env && source ${CRASHDIR}/configs/command.env
|
||||||
}
|
}
|
||||||
getcore(){
|
getcore(){
|
||||||
[ -z "$crashcore" ] && crashcore=clashpre
|
[ -z "$crashcore" ] && crashcore=clashpre
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# Copyright (C) Juewuy
|
# Copyright (C) Juewuy
|
||||||
|
|
||||||
version=1.8.8c
|
version=1.8.8d
|
||||||
|
|
||||||
setdir(){
|
setdir(){
|
||||||
dir_avail(){
|
dir_avail(){
|
||||||
@@ -159,15 +159,24 @@ else
|
|||||||
[ -w /usr/lib/systemd/system ] && sysdir=/usr/lib/systemd/system
|
[ -w /usr/lib/systemd/system ] && sysdir=/usr/lib/systemd/system
|
||||||
[ -w /etc/systemd/system ] && sysdir=/etc/systemd/system
|
[ -w /etc/systemd/system ] && sysdir=/etc/systemd/system
|
||||||
if [ -n "$sysdir" -a "$USER" = "root" -a "$(cat /proc/1/comm)" = "systemd" ];then
|
if [ -n "$sysdir" -a "$USER" = "root" -a "$(cat /proc/1/comm)" = "systemd" ];then
|
||||||
#设为systemd方式启动
|
#创建shellcrash用户并赋予root权限
|
||||||
|
if type userdel useradd groupmod; then
|
||||||
|
userdel shellcrash 2>/dev/null
|
||||||
|
useradd shellcrash -u 7890 2>/dev/null
|
||||||
|
groupmod shellcrash -g 7890
|
||||||
|
sed -Ei s/7890:7890/0:7890/g /etc/passwd
|
||||||
|
else
|
||||||
|
sed -i '/0:7890/d' /etc/passwd
|
||||||
|
echo "shellcrash:x:0:7890::/home/shellcrash:/bin/sh" >> /etc/passwd
|
||||||
|
fi
|
||||||
|
#配置systemd
|
||||||
mv -f ${CRASHDIR}/shellcrash.service $sysdir/shellcrash.service 2>/dev/null
|
mv -f ${CRASHDIR}/shellcrash.service $sysdir/shellcrash.service 2>/dev/null
|
||||||
sed -i "s%/etc/ShellCrash%$CRASHDIR%g" $sysdir/shellcrash.service
|
sed -i "s%/etc/ShellCrash%$CRASHDIR%g" $sysdir/shellcrash.service
|
||||||
rm -rf $sysdir/clash.service #旧版文件清理
|
rm -rf $sysdir/clash.service #旧版文件清理
|
||||||
systemctl daemon-reload
|
systemctl daemon-reload
|
||||||
else
|
|
||||||
#设为保守模式启动
|
|
||||||
setconfig start_old 已开启
|
|
||||||
fi
|
fi
|
||||||
|
#设为保守模式启动
|
||||||
|
setconfig start_old 已开启
|
||||||
fi
|
fi
|
||||||
#修饰文件及版本号
|
#修饰文件及版本号
|
||||||
command -v bash &>/dev/null && shtype=bash || shtype=sh
|
command -v bash &>/dev/null && shtype=bash || shtype=sh
|
||||||
@@ -272,11 +281,8 @@ done
|
|||||||
chmod 755 ${CRASHDIR}/task/task.sh
|
chmod 755 ${CRASHDIR}/task/task.sh
|
||||||
#旧版文件清理
|
#旧版文件清理
|
||||||
rm -rf /etc/init.d/clash
|
rm -rf /etc/init.d/clash
|
||||||
rm -rf $CRASHDIR/clashservice
|
[ "$systype" = "mi_snapshot" -a "$CRASHDIR" != '/data/clash' ] && rm -rf /data/clash
|
||||||
rm -rf $CRASHDIR/core.new
|
for file in clash.sh shellcrash.rc core.new clashservice log shellcrash.service mark? mark.bak;do
|
||||||
rm -rf $CRASHDIR/shellcrash.rc
|
|
||||||
rm -rf $CRASHDIR/clash.sh
|
|
||||||
for file in log shellcrash.service mark? mark.bak;do
|
|
||||||
rm -rf ${CRASHDIR}/$file
|
rm -rf ${CRASHDIR}/$file
|
||||||
done
|
done
|
||||||
#旧版变量改名
|
#旧版变量改名
|
||||||
|
|||||||
@@ -1371,7 +1371,7 @@ normal_set(){ #基础设置
|
|||||||
local_proxy=未开启
|
local_proxy=未开启
|
||||||
setconfig local_proxy $local_proxy
|
setconfig local_proxy $local_proxy
|
||||||
setconfig local_type
|
setconfig local_type
|
||||||
sed -i '/user shellcrash/d' /etc/init.d/clash 2>/dev/null
|
[ -w /etc/init.d/shellcrash ] && sed -i 's/procd_set_param user shellcrash/procd_set_param user root/' /etc/init.d/shellcrash
|
||||||
echo -e "\033[33m已经停用本机代理规则,请尽快重启服务!!\033[0m"
|
echo -e "\033[33m已经停用本机代理规则,请尽快重启服务!!\033[0m"
|
||||||
fi
|
fi
|
||||||
sleep 1
|
sleep 1
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ start_service() {
|
|||||||
if [ "$?" = "0" ];then
|
if [ "$?" = "0" ];then
|
||||||
#使用procd创建clash后台进程
|
#使用procd创建clash后台进程
|
||||||
procd_open_instance
|
procd_open_instance
|
||||||
|
procd_set_param user root
|
||||||
procd_set_param respawn
|
procd_set_param respawn
|
||||||
procd_set_param command $COMMAND
|
procd_set_param command $COMMAND
|
||||||
procd_set_param stderr 0
|
procd_set_param stderr 0
|
||||||
|
|||||||
@@ -4,15 +4,13 @@ After=network.target
|
|||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
Type=simple
|
Type=simple
|
||||||
User=root
|
User=shellcrash
|
||||||
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_SYS_PTRACE CAP_DAC_READ_SEARCH
|
|
||||||
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_SYS_PTRACE CAP_DAC_READ_SEARCH
|
|
||||||
ExecStartPre=/etc/ShellCrash/start.sh bfstart
|
ExecStartPre=/etc/ShellCrash/start.sh bfstart
|
||||||
ExecStart=/etc/ShellCrash/CrashCore run -D /etc/ShellCrash -c /tmp/ShellCrash/config.json
|
ExecStart=/etc/ShellCrash/CrashCore run -D /etc/ShellCrash -c /tmp/ShellCrash/config.json
|
||||||
ExecStartPost=/etc/ShellCrash/start.sh afstart
|
ExecStartPost=/etc/ShellCrash/start.sh afstart >/dev/null &
|
||||||
ExecStopPost=/etc/ShellCrash/start.sh stop_firewall ; /etc/ShellCrash/start.sh unset_proxy
|
ExecStopPost=/etc/ShellCrash/start.sh stop_firewall ; /etc/ShellCrash/start.sh unset_proxy
|
||||||
Restart=on-failure
|
Restart=on-abnormal
|
||||||
RestartSec=5s
|
RestartSec=10s
|
||||||
LimitNOFILE=infinity
|
LimitNOFILE=infinity
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -246,7 +246,7 @@ get_core_config(){ #下载内核配置文件
|
|||||||
#如果传来的是Url链接则合成Https链接,否则直接使用Https链接
|
#如果传来的是Url链接则合成Https链接,否则直接使用Https链接
|
||||||
if [ -z "$Https" ];then
|
if [ -z "$Https" ];then
|
||||||
#Urlencord转码处理保留字符
|
#Urlencord转码处理保留字符
|
||||||
Url=$(echo $Url | sed 's/;/\%3B/g; s|/|\%2F|g; s/?/\%3F/g; s/:/\%3A/g; s/@/\%4O/g; s/=/\%3D/g; s/&/\%26/g')
|
Url=$(echo $Url | sed 's/;/\%3B/g; s|/|\%2F|g; s/?/\%3F/g; s/:/\%3A/g; s/@/\%40/g; s/=/\%3D/g; s/&/\%26/g')
|
||||||
Https="${Server}/sub?target=${target}&insert=true&new_name=true&scv=true&udp=true&exclude=${exclude}&include=${include}&url=${Url}&config=${Config}"
|
Https="${Server}/sub?target=${target}&insert=true&new_name=true&scv=true&udp=true&exclude=${exclude}&include=${include}&url=${Url}&config=${Config}"
|
||||||
url_type=true
|
url_type=true
|
||||||
fi
|
fi
|
||||||
@@ -628,14 +628,14 @@ EOF
|
|||||||
"tag": "redirect-in",
|
"tag": "redirect-in",
|
||||||
"listen": "::",
|
"listen": "::",
|
||||||
"listen_port": $redir_port,
|
"listen_port": $redir_port,
|
||||||
"sniff": $sniffer,
|
"sniff": true,
|
||||||
"sniff_override_destination": $sniffer
|
"sniff_override_destination": $sniffer
|
||||||
}, {
|
}, {
|
||||||
"type": "tproxy",
|
"type": "tproxy",
|
||||||
"tag": "tproxy-in",
|
"tag": "tproxy-in",
|
||||||
"listen": "::",
|
"listen": "::",
|
||||||
"listen_port": $tproxy_port,
|
"listen_port": $tproxy_port,
|
||||||
"sniff": $sniffer,
|
"sniff": true,
|
||||||
"sniff_override_destination": $sniffer
|
"sniff_override_destination": $sniffer
|
||||||
EOF
|
EOF
|
||||||
if [ "$redir_mod" = "混合模式" -o "$redir_mod" = "Tun模式" ];then
|
if [ "$redir_mod" = "混合模式" -o "$redir_mod" = "Tun模式" ];then
|
||||||
@@ -647,7 +647,7 @@ EOF
|
|||||||
"inet4_address": "198.18.0.0/16",
|
"inet4_address": "198.18.0.0/16",
|
||||||
"auto_route": false,
|
"auto_route": false,
|
||||||
"stack": "system",
|
"stack": "system",
|
||||||
"sniff": $sniffer,
|
"sniff": true,
|
||||||
"sniff_override_destination": $sniffer
|
"sniff_override_destination": $sniffer
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@@ -1028,7 +1028,7 @@ start_tun(){ #iptables-tun
|
|||||||
[ "$1" = "all" ] && iptables -t mangle -A PREROUTING -p tcp $ports -j shellcrash
|
[ "$1" = "all" ] && iptables -t mangle -A PREROUTING -p tcp $ports -j shellcrash
|
||||||
|
|
||||||
#设置ipv6转发
|
#设置ipv6转发
|
||||||
[ "$ipv6_redir" = "已开启" -a "$crashcore" = "meta" ] && {
|
[ "$ipv6_redir" = "已开启" ] && [ "$crashcore" = "singbox" -o "$crashcore" = "meta" ] && {
|
||||||
ip -6 route add default dev utun table 101
|
ip -6 route add default dev utun table 101
|
||||||
ip -6 rule add fwmark $fwmark table 101
|
ip -6 rule add fwmark $fwmark table 101
|
||||||
ip6tables -t mangle -N shellcrashv6
|
ip6tables -t mangle -N shellcrashv6
|
||||||
@@ -1538,21 +1538,18 @@ bfstart(){ #启动前
|
|||||||
if [ "$local_proxy" = "已开启" -a -n "$(echo $local_type | grep '增强模式')" ];then
|
if [ "$local_proxy" = "已开启" -a -n "$(echo $local_type | grep '增强模式')" ];then
|
||||||
#添加shellcrash用户
|
#添加shellcrash用户
|
||||||
if [ -z "$(id shellcrash 2>/dev/null | grep 'root')" ];then
|
if [ -z "$(id shellcrash 2>/dev/null | grep 'root')" ];then
|
||||||
sed -i '/0:7890/d' /etc/passwd
|
if ckcmd userdel useradd groupmod; then
|
||||||
grep -qw shellcrash /etc/passwd || echo "shellcrash:x:0:7890:::" >> /etc/passwd
|
userdel shellcrash 2>/dev/null
|
||||||
fi
|
useradd shellcrash -u 7890
|
||||||
#修改启动文件
|
groupmod shellcrash -g 7890
|
||||||
if [ "$start_old" != "已开启" ];then
|
sed -Ei s/7890:7890/0:7890/g /etc/passwd
|
||||||
[ -w /etc/systemd/system/shellcrash.service ] && servdir=/etc/systemd/system/shellcrash.service
|
else
|
||||||
[ -w /usr/lib/systemd/system/shellcrash.service ] && servdir=/usr/lib/systemd/system/shellcrash.service
|
sed -i '/0:7890/d' /etc/passwd
|
||||||
if [ -w /etc/init.d/shellcrash ]; then
|
echo "shellcrash:x:0:7890:::" >> /etc/passwd
|
||||||
[ -z "$(grep 'procd_set_param user shellcrash' /etc/init.d/shellcrash)" ] && \
|
|
||||||
sed -i '/procd_close_instance/i\\t\tprocd_set_param user shellcrash' /etc/init.d/shellcrash
|
|
||||||
elif [ -w "$servdir" ]; then
|
|
||||||
setconfig User shellcrash $servdir
|
|
||||||
systemctl daemon-reload >/dev/null
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
#修改procd启动文件
|
||||||
|
[ "$start_old" != "已开启" -a -w /etc/init.d/shellcrash ] && sed -i 's/procd_set_param user root/procd_set_param user shellcrash/' /etc/init.d/shellcrash
|
||||||
fi
|
fi
|
||||||
#清理debug日志
|
#清理debug日志
|
||||||
rm -rf ${TMPDIR}/debug.log
|
rm -rf ${TMPDIR}/debug.log
|
||||||
@@ -1603,8 +1600,8 @@ afstart(){ #启动后
|
|||||||
#设置本机代理
|
#设置本机代理
|
||||||
[ "$local_proxy" = "已开启" ] && {
|
[ "$local_proxy" = "已开启" ] && {
|
||||||
[ "$local_type" = "环境变量" ] && $0 set_proxy $mix_port $db_port
|
[ "$local_type" = "环境变量" ] && $0 set_proxy $mix_port $db_port
|
||||||
[ "$local_type" = "iptables增强模式" ] && start_output
|
[ "$local_type" = "iptables增强模式" ] && [ -n "$(grep '0:7890' /etc/passwd)" ] && start_output
|
||||||
[ "$local_type" = "nftables增强模式" ] && [ "$redir_mod" = "纯净模式" ] && start_nft
|
[ "$local_type" = "nftables增强模式" ] && [ -n "$(grep '0:7890' /etc/passwd)" ] && [ "$redir_mod" = "纯净模式" ] && start_nft
|
||||||
}
|
}
|
||||||
ckcmd iptables && start_wan #本地防火墙
|
ckcmd iptables && start_wan #本地防火墙
|
||||||
mark_time #标记启动时间
|
mark_time #标记启动时间
|
||||||
|
|||||||
Reference in New Issue
Block a user