From f75e3f11871ccac2f6e28c9552c862a07d3b80aa Mon Sep 17 00:00:00 2001 From: 233boy <31657650+233boy@users.noreply.github.com> Date: Mon, 10 Jun 2024 16:11:33 +0800 Subject: [PATCH] fix bug and add update dat file --- README.md | 7 ++++--- install.sh | 2 +- src/caddy.sh | 8 +++++--- src/core.sh | 52 ++++++++++++++++++++++++++++++++++++------------- src/dns.sh | 10 ++++------ src/download.sh | 13 ++++++++++++- src/help.sh | 5 +++-- src/init.sh | 7 ++++++- v2ray.sh | 2 +- 9 files changed, 74 insertions(+), 32 deletions(-) diff --git a/README.md b/README.md index d451dc2ca..d1f8ef310 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@ 使用: `v2ray help` ``` -V2Ray script v4.0 by 233boy +V2Ray script v4.21 by 233boy Usage: v2ray [options]... [args]... 基本: @@ -95,7 +95,7 @@ Usage: v2ray [options]... [args]... 管理: un, uninstall 卸载 - u, update [core | sh | caddy] [ver] 更新 + u, update [core | sh | dat | caddy] [ver] 更新 U, update.sh 更新脚本 s, status 运行状态 start, stop, restart [caddy] 启动, 停止, 重启 @@ -103,9 +103,10 @@ Usage: v2ray [options]... [args]... reinstall 重装脚本 测试: - client, genc [name] 显示用于客户端 JSON, 仅供参考 + client [name] 显示用于客户端 JSON, 仅供参考 debug [name] 显示一些 debug 信息, 仅供参考 gen [...] 同等于 add, 但只显示 JSON 内容, 不创建文件, 测试使用 + genc [name] 显示用于客户端部分 JSON, 仅供参考 no-auto-tls [...] 同等于 add, 但禁止自动配置 TLS, 可用于 *TLS 相关协议 xapi [...] 同等于 v2ray api, 但 API 后端使用当前运行的 V2Ray 服务 diff --git a/install.sh b/install.sh index aecf2bccb..b5672be4d 100644 --- a/install.sh +++ b/install.sh @@ -174,7 +174,7 @@ download() { is_ok=$is_sh_ok ;; jq) - link=https://github.com/jqlang/jq/releases/download/jq-1.7rc1/jq-linux-$is_jq_arch + link=https://github.com/jqlang/jq/releases/download/jq-1.7.1/jq-linux-$is_jq_arch name="jq" tmpfile=$tmpjq is_ok=$is_jq_ok diff --git a/src/caddy.sh b/src/caddy.sh index 3ad01e72e..fba75485d 100644 --- a/src/caddy.sh +++ b/src/caddy.sh @@ -11,6 +11,8 @@ caddy_config() { # https://caddyserver.com/docs/caddyfile/options { admin off + http_port $is_http_port + https_port $is_https_port } import $is_caddy_conf/*.conf import $is_caddy_dir/sites/*.conf @@ -18,21 +20,21 @@ EOF ;; *ws*) cat >${is_caddy_site_file} <<<" -${host}:${tlsport} { +${host}:${is_https_port} { reverse_proxy ${path} 127.0.0.1:${port} import ${is_caddy_site_file}.add }" ;; *h2*) cat >${is_caddy_site_file} <<<" -${host}:${tlsport} { +${host}:${is_https_port} { reverse_proxy ${path} h2c://127.0.0.1:${port} import ${is_caddy_site_file}.add }" ;; *grpc*) cat >${is_caddy_site_file} <<<" -${host}:${tlsport} { +${host}:${is_https_port} { reverse_proxy /${path}/* h2c://127.0.0.1:${port} import ${is_caddy_site_file}.add }" diff --git a/src/core.sh b/src/core.sh index 902fa8074..66c29fe50 100644 --- a/src/core.sh +++ b/src/core.sh @@ -384,6 +384,13 @@ create() { get info $2 [[ ! $is_client_id_json ]] && err "($is_config_name) 不支持生成客户端配置." is_new_json=$(jq '{outbounds:[{tag:'\"$is_config_name\"',protocol:'\"$is_protocol\"','"$is_client_id_json"','"$is_stream"'}]}' <<<{}) + if [[ $is_full_client ]]; then + is_dns='dns:{servers:[{address:"223.5.5.5",domain:["geosite:cn","geosite:geolocation-cn"],expectIPs:["geoip:cn"]},"1.1.1.1","8.8.8.8"]}' + is_route='routing:{rules:[{type:"field",outboundTag:"direct",ip:["geoip:cn","geoip:private"]},{type:"field",outboundTag:"direct",domain:["geosite:cn","geosite:geolocation-cn"]}]}' + is_inbounds='inbounds:[{port:2333,listen:"127.0.0.1",protocol:"socks",settings:{udp:true},sniffing:{enabled:true,destOverride:["http","tls"]}}]' + is_outbounds='outbounds:[{tag:'\"$is_config_name\"',protocol:'\"$is_protocol\"','"$is_client_id_json"','"$is_stream"'},{tag:"direct",protocol:"freedom"}]' + is_new_json=$(jq '{'$is_dns,$is_route,$is_inbounds,$is_outbounds'}' <<<{}) + fi msg jq <<<$is_new_json msg @@ -527,7 +534,7 @@ change() { [[ ! $is_new_port ]] && ask string is_new_port "请输入新端口:" if [[ $is_caddy && $host ]]; then net=$is_old_net - tlsport=$is_new_port + is_https_port=$is_new_port load caddy.sh caddy_config $net manage restart caddy & @@ -978,7 +985,7 @@ add() { ;; kcp | quic) kcp_seed= - [[ $(grep tcp <<<$is_new_protocol) ]] && header_type= + [[ $(grep -i tcp <<<$is_new_protocol) ]] && header_type= ;; h2 | ws | grpc) old_host=$host @@ -989,6 +996,7 @@ add() { path=/$path } fi + [[ ! $(grep -i trojan <<<$is_new_protocol) ]] && is_trojan= ;; reality) [[ ! $(grep -i reality <<<$is_new_protocol) ]] && is_reality= @@ -1001,7 +1009,7 @@ add() { is_dynamic_port= } - [[ $is_trojan && ! $(is_test uuid $trojan_password) ]] && uuid= + [[ ! $(is_test uuid $uuid) ]] && uuid= fi # no-auto-tls only use h2,ws,grpc @@ -1079,9 +1087,15 @@ add() { if [[ ! $is_no_auto_tls && ! $is_caddy && ! $is_gen ]]; then # test auto tls [[ $(is_test port_used 80) || $(is_test port_used 443) ]] && { - warn "端口 (80 或 443) 已经被占用, 无法完成自动配置 TLS. 请考虑使用 no-auto-tls" - msg "\e[41m帮助(help)\e[0m: $(msg_ul https://233boy.com/$is_core/no-auto-tls/)\n" - exit 1 + get_port + is_http_port=$tmp_port + get_port + is_https_port=$tmp_port + warn "端口 (80 或 443) 已经被占用, 你也可以考虑使用 no-auto-tls" + msg "\e[41m no-auto-tls 帮助(help)\e[0m: $(msg_ul https://233boy.com/$is_core/no-auto-tls/)\n" + msg "\n Caddy 将使用非标准端口实现自动配置 TLS, HTTP:$is_http_port HTTPS:$is_https_port\n" + msg "请确定是否继续???" + pause } is_install_caddy=1 fi @@ -1226,10 +1240,10 @@ get() { [[ $? != 0 ]] && err "无法读取动态端口文件: $is_dynamic_port" fi 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 - [[ $tmp_tlsport ]] && tlsport=$tmp_tlsport - [[ $is_client && $host ]] && port=$tlsport + [[ $is_tmp_https_port ]] && is_https_port=$is_tmp_https_port + [[ $is_client && $host ]] && port=$is_https_port get protocol $is_protocol-$net fi ;; @@ -1501,19 +1515,18 @@ info() { is_url_path=serviceName } [[ $is_protocol == 'vmess' ]] && { - is_vmess_url=$(jq -c '{v:2,ps:'\"233boy-$net-$host\"',add:'\"$is_addr\"',port:'\"$tlsport\"',id:'\"$uuid\"',aid:"0",net:'\"$net\"',host:'\"$host\"',path:'\"$path\"',tls:'\"tls\"'}' <<<{}) + is_vmess_url=$(jq -c '{v:2,ps:'\"233boy-$net-$host\"',add:'\"$is_addr\"',port:'\"$is_https_port\"',id:'\"$uuid\"',aid:"0",net:'\"$net\"',host:'\"$host\"',path:'\"$path\"',tls:'\"tls\"'}' <<<{}) is_url=vmess://$(echo -n $is_vmess_url | base64 -w 0) } || { [[ $is_trojan ]] && { uuid=$trojan_password - is_info_str=($is_protocol $is_addr $tlsport $trojan_password $net $host $path 'tls') is_can_change=(0 1 2 3 4) is_info_show=(0 1 2 10 4 6 7 8) } - is_url="$is_protocol://$uuid@$host:$tlsport?encryption=none&security=tls&type=$net&host=$host&${is_url_path}=$(sed 's#/#%2F#g' <<<$path)#233boy-$net-$host" + is_url="$is_protocol://$uuid@$host:$is_https_port?encryption=none&security=tls&type=$net&host=$host&${is_url_path}=$(sed 's#/#%2F#g' <<<$path)#233boy-$net-$host" } [[ $is_caddy ]] && is_can_change+=(13) - is_info_str=($is_protocol $is_addr $tlsport $uuid $net $host $path 'tls') + is_info_str=($is_protocol $is_addr $is_https_port $uuid $net $host $path 'tls') ;; reality) is_color=41 @@ -1550,6 +1563,9 @@ info() { fi msg "$a $tt= \e[${is_color}m${is_info_str[$i]}\e[0m" done + if [[ $is_new_install ]]; then + warn "首次安装请查看脚本帮助文档: $(msg_ul https://233boy.com/$is_core/$is_core-script/)" + fi if [[ $is_url ]]; then msg "------------- ${info_list[12]} -------------" msg "\e[4;${is_color}m${is_url}\e[0m" @@ -1760,6 +1776,7 @@ main() { change ${@:2} ;; client | genc) + [[ $1 == 'client' ]] && is_full_client=1 create client $2 ;; d | del | rm) @@ -1845,7 +1862,14 @@ main() { is_update_name=sh is_update_ver= } - update $is_update_name $is_update_ver + if [[ $2 == 'dat' ]]; then + load download.sh + download dat + msg "$(_green 更新 geoip.dat geosite.dat 成功.)\n" + manage restart & + else + update $is_update_name $is_update_ver + fi ;; ssss | ss2022) get $@ diff --git a/src/dns.sh b/src/dns.sh index 420ab3fe8..f8489939f 100644 --- a/src/dns.sh +++ b/src/dns.sh @@ -41,18 +41,16 @@ dns_set() { esac else is_tmp_list=(${is_dns_list[@]}) - ask list dns_pick - is_dns_use=${is_dns_list[$REPLY - 1]} + ask list is_dns_use null "\n请选择 DNS:\n" if [[ $is_dns_use == "set" ]]; then ask string is_dns_use "请输入 DNS: " fi fi - is_new_dns=$(sed s/https/https+local/ <<<$is_dns_use) - if [[ $is_new_dns == "none" ]]; then + if [[ $is_dns_use == "none" ]]; then cat <<<$(jq '.dns={}' $is_config_json) >$is_config_json else - cat <<<$(jq '.dns.servers=["'$is_new_dns'"]' $is_config_json) >$is_config_json + cat <<<$(jq '.dns.servers=["'${is_dns_use/https/https+local}'"]' $is_config_json) >$is_config_json fi manage restart & - msg "\n已更新 DNS 为: $(_green $is_new_dns)\n" + msg "\n已更新 DNS 为: $(_green $is_dns_use)\n" } \ No newline at end of file diff --git a/src/download.sh b/src/download.sh index cb43abca7..de72495bc 100644 --- a/src/download.sh +++ b/src/download.sh @@ -21,7 +21,7 @@ get_latest_version() { } download() { latest_ver=$2 - [[ ! $latest_ver ]] && get_latest_version $1 + [[ ! $latest_ver && $1 != 'dat' ]] && get_latest_version $1 # tmp dir tmpdir=$(mktemp -u) [[ ! $tmpdir ]] && { @@ -45,6 +45,17 @@ download() { unzip -qo $tmpfile -d $is_sh_dir chmod +x $is_sh_bin ;; + dat) + name="geoip.dat" + tmpfile=$tmpdir/geoip.dat + link="https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat" + download_file + name="geosite.dat" + tmpfile=$tmpdir/geosite.dat + link="https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat" + download_file + cp -f $tmpdir/*.dat $is_core_dir/bin/ + ;; caddy) name="Caddy" tmpfile=$tmpdir/caddy.tar.gz diff --git a/src/help.sh b/src/help.sh index 4a83dc48d..6adb1b0c1 100644 --- a/src/help.sh +++ b/src/help.sh @@ -48,16 +48,17 @@ show_help() { " fix-config.json 修复 config.json\n" "管理:" " un, uninstall 卸载" - " u, update [core | sh | caddy] [ver] 更新" + " u, update [core | sh | dat | caddy] [ver] 更新" " U, update.sh 更新脚本" " s, status 运行状态" " start, stop, restart [caddy] 启动, 停止, 重启" " t, test 测试运行" " reinstall 重装脚本\n" "测试:" - " client, genc [name] 显示用于客户端 JSON, 仅供参考" + " client [name] 显示用于客户端 JSON, 仅供参考" " debug [name] 显示一些 debug 信息, 仅供参考" " gen [...] 同等于 add, 但只显示 JSON 内容, 不创建文件, 测试使用" + " genc [name] 显示用于客户端部分 JSON, 仅供参考" " no-auto-tls [...] 同等于 add, 但禁止自动配置 TLS, 可用于 *TLS 相关协议" " xapi [...] 同等于 $is_core api, 但 API 后端使用当前运行的 $is_core_name 服务\n" "其他:" diff --git a/src/init.sh b/src/init.sh index 0d1191075..c9f77e431 100644 --- a/src/init.sh +++ b/src/init.sh @@ -94,7 +94,8 @@ is_caddy_repo=caddyserver/caddy is_caddyfile=$is_caddy_dir/Caddyfile is_caddy_conf=$is_caddy_dir/$author is_caddy_service=$(systemctl list-units --full -all | grep caddy.service) -tlsport=443 +is_http_port=80 +is_https_port=443 # core ver is_core_ver=$($is_core_bin version | head -n1 | cut -d " " -f1-2) @@ -129,6 +130,10 @@ if [[ -f $is_caddy_bin && -d $is_caddy_dir && $is_caddy_service ]]; then systemctl restart caddy & } 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_https_port=$(egrep '^ {2,}https_port|^https_port' $is_caddyfile | egrep -o [0-9]+) + [[ $is_tmp_http_port ]] && is_http_port=$is_tmp_http_port + [[ $is_tmp_https_port ]] && is_https_port=$is_tmp_https_port if [[ $(pgrep -f $is_caddy_bin) ]]; then is_caddy_status=$(_green running) else diff --git a/v2ray.sh b/v2ray.sh index d52da97d7..20e22010f 100644 --- a/v2ray.sh +++ b/v2ray.sh @@ -1,6 +1,6 @@ #!/bin/bash args=$@ -is_sh_ver=v4.20 +is_sh_ver=v4.21 . /etc/v2ray/sh/src/init.sh