8 Commits
v1.0 ... v1.08

Author SHA1 Message Date
233boy
1eace3153c fix ipv6 err 2025-05-22 10:26:10 +08:00
233boy
9cf5655ac5 remove block 2025-04-24 12:52:13 +08:00
233boy
3909d2edaf tuic add password args 2025-04-16 11:21:19 +08:00
233boy
798d43ac47 del config dont get ip 2024-12-05 20:29:02 +08:00
233boy
09fd2df4ff fix tcp http bug err 2024-09-09 14:37:34 +08:00
233boy
596efd5659 add doc tips 2024-06-10 15:38:31 +08:00
233boy
3d942cf5c2 fix caddy run 2024-06-02 17:09:40 +08:00
233boy
45b099168f fix url typo and remove err log menu 2024-05-30 14:50:01 +08:00
5 changed files with 50 additions and 35 deletions

View File

@@ -125,7 +125,7 @@ show_help() {
echo -e "Usage: $0 [-f xxx | -l | -p xxx | -v xxx | -h]" echo -e "Usage: $0 [-f xxx | -l | -p xxx | -v xxx | -h]"
echo -e " -f, --core-file <path> 自定义 $is_core_name 文件路径, e.g., -f /root/$is_core-linux-amd64.tar.gz" echo -e " -f, --core-file <path> 自定义 $is_core_name 文件路径, e.g., -f /root/$is_core-linux-amd64.tar.gz"
echo -e " -l, --local-install 本地获取安装脚本, 使用当前目录" echo -e " -l, --local-install 本地获取安装脚本, 使用当前目录"
echo -e " -p, --proxy <addr> 使用代理下载, e.g., -p http://127.0.0.1:2333 or -p socks5://127.0.0.1:2333" echo -e " -p, --proxy <addr> 使用代理下载, e.g., -p http://127.0.0.1:2333"
echo -e " -v, --core-version <ver> 自定义 $is_core_name 版本, e.g., -v v1.8.13" echo -e " -v, --core-version <ver> 自定义 $is_core_name 版本, e.g., -v v1.8.13"
echo -e " -h, --help 显示此帮助界面\n" echo -e " -h, --help 显示此帮助界面\n"
@@ -198,6 +198,7 @@ check_status() {
# dependent pkg install fail # dependent pkg install fail
[[ ! -f $is_pkg_ok ]] && { [[ ! -f $is_pkg_ok ]] && {
msg err "安装依赖包失败" msg err "安装依赖包失败"
msg err "请尝试手动安装依赖包: $cmd update -y; $cmd install -y $pkg"
is_fail=1 is_fail=1
} }

View File

@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
args=$@ args=$@
is_sh_ver=v1.0 is_sh_ver=v1.08
. /etc/sing-box/sh/src/init.sh . /etc/sing-box/sh/src/init.sh

View File

@@ -65,7 +65,7 @@ info_list=(
"指纹 (Fingerprint)" "指纹 (Fingerprint)"
"公钥 (Public key)" "公钥 (Public key)"
"用户名 (Username)" "用户名 (Username)"
"跳过证书验证 (allowlnsecure)" "跳过证书验证 (allowInsecure)"
"拥塞控制算法 (congestion_control)" "拥塞控制算法 (congestion_control)"
) )
change_list=( change_list=(
@@ -116,7 +116,7 @@ get_uuid() {
} }
get_ip() { get_ip() {
[[ $ip || $is_no_auto_tls || $is_gen ]] && return [[ $ip || $is_no_auto_tls || $is_gen || $is_dont_get_ip ]] && return
export "$(_wget -4 -qO- https://one.one.one.one/cdn-cgi/trace | grep ip=)" &>/dev/null export "$(_wget -4 -qO- https://one.one.one.one/cdn-cgi/trace | grep ip=)" &>/dev/null
[[ ! $ip ]] && export "$(_wget -6 -qO- https://one.one.one.one/cdn-cgi/trace | grep ip=)" &>/dev/null [[ ! $ip ]] && export "$(_wget -6 -qO- https://one.one.one.one/cdn-cgi/trace | grep ip=)" &>/dev/null
[[ ! $ip ]] && { [[ ! $ip ]] && {
@@ -369,7 +369,7 @@ create() {
else else
[[ ! $is_ntp_on ]] && is_ntp= [[ ! $is_ntp_on ]] && is_ntp=
fi fi
is_outbounds='outbounds:[{tag:"direct",type:"direct"},{tag:"block",type:"block"}]' is_outbounds='outbounds:[{tag:"direct",type:"direct"}]'
is_server_config_json=$(jq "{$is_log,$is_dns,$is_ntp$is_outbounds}" <<<{}) is_server_config_json=$(jq "{$is_log,$is_dns,$is_ntp$is_outbounds}" <<<{})
cat <<<$is_server_config_json >$is_config_json cat <<<$is_server_config_json >$is_config_json
manage restart & manage restart &
@@ -443,6 +443,7 @@ change() {
[[ $is_auto_get_config ]] && msg "\n自动选择: $is_config_file" [[ $is_auto_get_config ]] && msg "\n自动选择: $is_config_file"
} }
is_old_net=$net is_old_net=$net
[[ $is_tcp_http ]] && net=http
[[ $host ]] && net=$is_protocol-$net-tls [[ $host ]] && net=$is_protocol-$net-tls
[[ $is_reality && $net_type =~ 'http' ]] && net=rh2 [[ $is_reality && $net_type =~ 'http' ]] && net=rh2
@@ -634,6 +635,8 @@ change() {
# delete config. # delete config.
del() { del() {
# dont get ip
is_dont_get_ip=1
[[ $is_conf_dir_empty ]] && return # not found any json file. [[ $is_conf_dir_empty ]] && return # not found any json file.
# get a config file # get a config file
[[ ! $is_config_file ]] && get info $1 [[ ! $is_config_file ]] && get info $1
@@ -662,6 +665,7 @@ del() {
warn "当前配置目录为空! 因为你刚刚删除了最后一个配置文件." warn "当前配置目录为空! 因为你刚刚删除了最后一个配置文件."
is_conf_dir_empty=1 is_conf_dir_empty=1
fi fi
unset is_dont_get_ip
[[ $is_dont_auto_exit ]] && unset is_config_file [[ $is_dont_auto_exit ]] && unset is_config_file
} }
@@ -923,7 +927,7 @@ add() {
fi fi
if [[ $is_use_tls ]]; then if [[ $is_use_tls ]]; then
if [[ ! $is_no_auto_tls && ! $is_caddy && ! $is_gen ]]; then if [[ ! $is_no_auto_tls && ! $is_caddy && ! $is_gen && ! $is_dont_test_host ]]; then
# test auto tls # test auto tls
[[ $(is_test port_used 80) || $(is_test port_used 443) ]] && { [[ $(is_test port_used 80) || $(is_test port_used 443) ]] && {
get_port get_port
@@ -1018,6 +1022,7 @@ get() {
[[ ! $is_addr ]] && { [[ ! $is_addr ]] && {
get_ip get_ip
is_addr=$ip is_addr=$ip
[[ $(grep ":" <<<$ip) ]] && is_addr="[$ip]"
} }
;; ;;
new) new)
@@ -1066,9 +1071,9 @@ get() {
is_config_name=$is_config_file is_config_name=$is_config_file
if [[ $is_caddy && $host && -f $is_caddy_conf/$host.conf ]]; then if [[ $is_caddy && $host && -f $is_caddy_conf/$host.conf ]]; then
tmp_tlsport=$(egrep -o "$host:[1-9][0-9]?+" $is_caddy_conf/$host.conf | sed s/.*://) is_tmp_https_port=$(egrep -o "$host:[1-9][0-9]?+" $is_caddy_conf/$host.conf | sed s/.*://)
fi fi
[[ $tmp_tlsport ]] && is_https_port=$tmp_tlsport [[ $is_tmp_https_port ]] && is_https_port=$is_tmp_https_port
[[ $is_client && $host ]] && port=$is_https_port [[ $is_client && $host ]] && port=$is_https_port
get protocol $is_protocol-$net_type get protocol $is_protocol-$net_type
fi fi
@@ -1090,6 +1095,8 @@ get() {
tuic*) tuic*)
net=tuic net=tuic
is_protocol=$net is_protocol=$net
[[ ! $password ]] && password=$uuid
is_users="users:[{uuid:\"$uuid\",password:\"$password\"}]"
json_str="$is_users,congestion_control:\"bbr\",$is_tls_json" json_str="$is_users,congestion_control:\"bbr\",$is_tls_json"
;; ;;
trojan*) trojan*)
@@ -1290,6 +1297,7 @@ info() {
[[ $net == "http" ]] && { [[ $net == "http" ]] && {
net=tcp net=tcp
is_type=http is_type=http
is_tcp_http=1
is_info_show+=(5) is_info_show+=(5)
is_info_str=(${is_info_str[@]/http/tcp http}) is_info_str=(${is_info_str[@]/http/tcp http})
} }
@@ -1297,7 +1305,7 @@ info() {
is_insecure=1 is_insecure=1
is_info_show+=(8 9 20) is_info_show+=(8 9 20)
is_info_str+=(tls h3 true) is_info_str+=(tls h3 true)
is_quic_add=",tls:\"tls\",alpn:\"h3\"" # cant add allowlnsecure is_quic_add=",tls:\"tls\",alpn:\"h3\"" # cant add allowInsecure
} }
is_vmess_url=$(jq -c "{v:2,ps:\"233boy-${net}-$is_addr\",add:\"$is_addr\",port:\"$port\",id:\"$uuid\",aid:\"0\",net:\"$net\",type:\"$is_type\"$is_quic_add}" <<<{}) is_vmess_url=$(jq -c "{v:2,ps:\"233boy-${net}-$is_addr\",add:\"$is_addr\",port:\"$port\",id:\"$uuid\",aid:\"0\",net:\"$net\",type:\"$is_type\"$is_quic_add}" <<<{})
is_url=vmess://$(echo -n $is_vmess_url | base64 -w 0) is_url=vmess://$(echo -n $is_vmess_url | base64 -w 0)
@@ -1313,7 +1321,7 @@ info() {
is_insecure=1 is_insecure=1
is_can_change=(0 1 4) is_can_change=(0 1 4)
is_info_show=(0 1 2 10 4 8 20) is_info_show=(0 1 2 10 4 8 20)
is_url="$is_protocol://$password@$is_addr:$port?type=tcp&security=tls&allowlnsecure=1#233boy-$net-$is_addr" is_url="$is_protocol://$password@$is_addr:$port?type=tcp&security=tls&allowInsecure=1#233boy-$net-$is_addr"
is_info_str=($is_protocol $is_addr $port $password tcp tls true) is_info_str=($is_protocol $is_addr $port $password tcp tls true)
;; ;;
hy*) hy*)
@@ -1324,10 +1332,10 @@ info() {
;; ;;
tuic) tuic)
is_insecure=1 is_insecure=1
is_can_change=(0 1 5) is_can_change=(0 1 4 5)
is_info_show=(0 1 2 3 8 9 20 21) is_info_show=(0 1 2 3 10 8 9 20 21)
is_url="$is_protocol://$uuid:@$is_addr:$port?alpn=h3&allow_insecure=1&congestion_control=bbr#233boy-$net-$is_addr" is_url="$is_protocol://$uuid:$password@$is_addr:$port?alpn=h3&allow_insecure=1&congestion_control=bbr#233boy-$net-$is_addr"
is_info_str=($is_protocol $is_addr $port $uuid tls h3 true bbr) is_info_str=($is_protocol $is_addr $port $uuid $password tls h3 true bbr)
;; ;;
reality) reality)
is_color=41 is_color=41
@@ -1341,7 +1349,7 @@ info() {
is_info_show=(${is_info_show[@]/15/}) is_info_show=(${is_info_show[@]/15/})
} }
is_info_str=($is_protocol $is_addr $port $uuid $is_flow $is_net_type reality $is_servername chrome $is_public_key) is_info_str=($is_protocol $is_addr $port $uuid $is_flow $is_net_type reality $is_servername chrome $is_public_key)
is_url="$is_protocol://$uuid@$ip:$port?encryption=none&security=reality&flow=$is_flow&type=$is_net_type&sni=$is_servername&pbk=$is_public_key&fp=chrome#233boy-$net-$is_addr" is_url="$is_protocol://$uuid@$is_addr:$port?encryption=none&security=reality&flow=$is_flow&type=$is_net_type&sni=$is_servername&pbk=$is_public_key&fp=chrome#233boy-$net-$is_addr"
;; ;;
direct) direct)
is_can_change=(0 1 7 8) is_can_change=(0 1 7 8)
@@ -1366,11 +1374,14 @@ info() {
fi fi
msg "$a $tt= \e[${is_color}m${is_info_str[$i]}\e[0m" msg "$a $tt= \e[${is_color}m${is_info_str[$i]}\e[0m"
done done
if [[ $is_new_install ]]; then
warn "首次安装请查看脚本帮助文档: $(msg_ul https://233boy.com/$is_core/$is_core-script/)"
fi
if [[ $is_url ]]; then if [[ $is_url ]]; then
msg "------------- ${info_list[12]} -------------" msg "------------- ${info_list[12]} -------------"
msg "\e[4;${is_color}m${is_url}\e[0m" msg "\e[4;${is_color}m${is_url}\e[0m"
[[ $is_insecure ]] && { [[ $is_insecure ]] && {
warn "某些客户端如(V2rayN 等)导入URL需手动将: 跳过证书验证(allowlnsecure) 设置为 true, 或打开: 允许不安全的连接" warn "某些客户端如(V2rayN 等)导入URL需手动将: 跳过证书验证(allowInsecure) 设置为 true, 或打开: 允许不安全的连接"
} }
fi fi
if [[ $is_no_auto_tls ]]; then if [[ $is_no_auto_tls ]]; then
@@ -1516,7 +1527,7 @@ is_main_menu() {
show_help show_help
;; ;;
9) 9)
ask list is_do_other "启用BBR 查看日志 查看错误日志 测试运行 重装脚本 设置DNS" ask list is_do_other "启用BBR 查看日志 测试运行 重装脚本 设置DNS"
case $REPLY in case $REPLY in
1) 1)
load bbr.sh load bbr.sh
@@ -1526,15 +1537,12 @@ is_main_menu() {
get log get log
;; ;;
3) 3)
get logerr
;;
4)
get test-run get test-run
;; ;;
5) 4)
get reinstall get reinstall
;; ;;
6) 5)
load dns.sh load dns.sh
dns_set dns_set
;; ;;

View File

@@ -47,6 +47,17 @@ warn() {
echo -e "\n$is_warn $@\n" echo -e "\n$is_warn $@\n"
} }
# load bash script.
load() {
. $is_sh_dir/src/$1
}
# wget add --no-check-certificate
_wget() {
# [[ $proxy ]] && export https_proxy=$proxy
wget --no-check-certificate "$@"
}
# yum or apt-get # yum or apt-get
cmd=$(type -P apt-get || type -P yum) cmd=$(type -P apt-get || type -P yum)
@@ -106,6 +117,12 @@ else
fi fi
if [[ -f $is_caddy_bin && -d $is_caddy_dir && $is_caddy_service ]]; then if [[ -f $is_caddy_bin && -d $is_caddy_dir && $is_caddy_service ]]; then
is_caddy=1 is_caddy=1
# fix caddy run; ver >= 2.8.2
[[ ! $(grep '\-\-adapter caddyfile' /lib/systemd/system/caddy.service) ]] && {
load systemd.sh
install_service caddy
systemctl restart caddy &
}
is_caddy_ver=$($is_caddy_bin version | head -n1 | cut -d " " -f1) is_caddy_ver=$($is_caddy_bin version | head -n1 | cut -d " " -f1)
is_tmp_http_port=$(egrep '^ {2,}http_port|^http_port' $is_caddyfile | egrep -o [0-9]+) is_tmp_http_port=$(egrep '^ {2,}http_port|^http_port' $is_caddyfile | egrep -o [0-9]+)
is_tmp_https_port=$(egrep '^ {2,}https_port|^https_port' $is_caddyfile | egrep -o [0-9]+) is_tmp_https_port=$(egrep '^ {2,}https_port|^https_port' $is_caddyfile | egrep -o [0-9]+)
@@ -119,17 +136,6 @@ if [[ -f $is_caddy_bin && -d $is_caddy_dir && $is_caddy_service ]]; then
fi fi
fi fi
# load bash script.
load() {
. $is_sh_dir/src/$1
}
# wget add --no-check-certificate
_wget() {
# [[ $proxy ]] && export https_proxy=$proxy
wget --no-check-certificate "$@"
}
load core.sh load core.sh
[[ ! $args ]] && args=main [[ ! $args ]] && args=main
main $args main $args

View File

@@ -38,8 +38,8 @@ Requires=network-online.target
Type=notify Type=notify
User=root User=root
Group=root Group=root
ExecStart=$is_caddy_bin run --environ --config $is_caddyfile ExecStart=$is_caddy_bin run --environ --config $is_caddyfile --adapter caddyfile
ExecReload=$is_caddy_bin reload --config $is_caddyfile ExecReload=$is_caddy_bin reload --config $is_caddyfile --adapter caddyfile
TimeoutStopSec=5s TimeoutStopSec=5s
LimitNPROC=10000 LimitNPROC=10000
LimitNOFILE=1048576 LimitNOFILE=1048576