Merge branch 'dev_trojan'
commit
4995a108ed
539
install.sh
539
install.sh
|
@ -138,6 +138,9 @@ initVar() {
|
||||||
# 当前的个性化安装方式 01234
|
# 当前的个性化安装方式 01234
|
||||||
currentInstallProtocolType=
|
currentInstallProtocolType=
|
||||||
|
|
||||||
|
# 前置类型
|
||||||
|
frontingType=
|
||||||
|
|
||||||
# 选择的个性化安装方式
|
# 选择的个性化安装方式
|
||||||
selectCustomInstallType=
|
selectCustomInstallType=
|
||||||
|
|
||||||
|
@ -202,7 +205,7 @@ readInstallType() {
|
||||||
|
|
||||||
if [[ -d "/etc/v2ray-agent/xray" && -f "/etc/v2ray-agent/xray/xray" ]]; then
|
if [[ -d "/etc/v2ray-agent/xray" && -f "/etc/v2ray-agent/xray/xray" ]]; then
|
||||||
# 这里检测xray-core
|
# 这里检测xray-core
|
||||||
if [[ -d "/etc/v2ray-agent/xray/conf" && -f "/etc/v2ray-agent/xray/conf/02_VLESS_TCP_inbounds.json" ]]; then
|
if [[ -d "/etc/v2ray-agent/xray/conf" ]] && [[ -f "/etc/v2ray-agent/xray/conf/02_VLESS_TCP_inbounds.json" || -f "/etc/v2ray-agent/xray/conf/02_trojan_TCP_inbounds.json" ]]; then
|
||||||
# xray-core
|
# xray-core
|
||||||
configPath=/etc/v2ray-agent/xray/conf/
|
configPath=/etc/v2ray-agent/xray/conf/
|
||||||
# coreInstallPath=/etc/v2ray-agent/xray/xray
|
# coreInstallPath=/etc/v2ray-agent/xray/xray
|
||||||
|
@ -218,19 +221,24 @@ readInstallProtocolType() {
|
||||||
currentInstallProtocolType=
|
currentInstallProtocolType=
|
||||||
|
|
||||||
while read -r row; do
|
while read -r row; do
|
||||||
|
if echo ${row} | grep -q 02_trojan_TCP_inbounds; then
|
||||||
|
currentInstallProtocolType=${currentInstallProtocolType}'trojan'
|
||||||
|
frontingType=02_trojan_TCP_inbounds
|
||||||
|
fi
|
||||||
if echo ${row} | grep -q VLESS_TCP_inbounds; then
|
if echo ${row} | grep -q VLESS_TCP_inbounds; then
|
||||||
currentInstallProtocolType=${currentInstallProtocolType}'0'
|
currentInstallProtocolType=${currentInstallProtocolType}'0'
|
||||||
|
frontingType=02_VLESS_TCP_inbounds
|
||||||
fi
|
fi
|
||||||
if echo ${row} | grep -q VLESS_WS_inbounds; then
|
if echo ${row} | grep -q VLESS_WS_inbounds; then
|
||||||
currentInstallProtocolType=${currentInstallProtocolType}'1'
|
currentInstallProtocolType=${currentInstallProtocolType}'1'
|
||||||
fi
|
fi
|
||||||
if echo ${row} | grep -q VMess_TCP_inbounds; then
|
if echo ${row} | grep -q trojan_gRPC_inbounds; then
|
||||||
currentInstallProtocolType=${currentInstallProtocolType}'2'
|
currentInstallProtocolType=${currentInstallProtocolType}'2'
|
||||||
fi
|
fi
|
||||||
if echo ${row} | grep -q VMess_WS_inbounds; then
|
if echo ${row} | grep -q VMess_WS_inbounds; then
|
||||||
currentInstallProtocolType=${currentInstallProtocolType}'3'
|
currentInstallProtocolType=${currentInstallProtocolType}'3'
|
||||||
fi
|
fi
|
||||||
if echo ${row} | grep -q trojan_TCP_inbounds; then
|
if echo ${row} | grep -q 04_trojan_TCP_inbounds; then
|
||||||
currentInstallProtocolType=${currentInstallProtocolType}'4'
|
currentInstallProtocolType=${currentInstallProtocolType}'4'
|
||||||
fi
|
fi
|
||||||
if echo ${row} | grep -q VLESS_gRPC_inbounds; then
|
if echo ${row} | grep -q VLESS_gRPC_inbounds; then
|
||||||
|
@ -253,7 +261,7 @@ readConfigHostPathUUID() {
|
||||||
currentAdd=
|
currentAdd=
|
||||||
# 读取path
|
# 读取path
|
||||||
if [[ -n "${configPath}" ]]; then
|
if [[ -n "${configPath}" ]]; then
|
||||||
local fallback=$(jq -r -c '.inbounds[0].settings.fallbacks[]|select(.path)' ${configPath}02_VLESS_TCP_inbounds.json|head -1)
|
local fallback=$(jq -r -c '.inbounds[0].settings.fallbacks[]|select(.path)' ${configPath}${frontingType}.json|head -1)
|
||||||
|
|
||||||
local path=$(echo "${fallback}"|jq -r .path|awk -F "[/]" '{print $2}')
|
local path=$(echo "${fallback}"|jq -r .path|awk -F "[/]" '{print $2}')
|
||||||
|
|
||||||
|
@ -267,27 +275,27 @@ readConfigHostPathUUID() {
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "${coreInstallType}" == "1" ]]; then
|
if [[ "${coreInstallType}" == "1" ]]; then
|
||||||
currentHost=$(jq -r .inbounds[0].streamSettings.xtlsSettings.certificates[0].certificateFile ${configPath}02_VLESS_TCP_inbounds.json | awk -F '[t][l][s][/]' '{print $2}' | awk -F '[.][c][r][t]' '{print $1}')
|
currentHost=$(jq -r .inbounds[0].streamSettings.xtlsSettings.certificates[0].certificateFile ${configPath}${frontingType}.json | awk -F '[t][l][s][/]' '{print $2}' | awk -F '[.][c][r][t]' '{print $1}')
|
||||||
currentUUID=$(jq -r .inbounds[0].settings.clients[0].id ${configPath}02_VLESS_TCP_inbounds.json)
|
currentUUID=$(jq -r .inbounds[0].settings.clients[0].id ${configPath}${frontingType}.json)
|
||||||
currentAdd=$(jq -r .inbounds[0].settings.clients[0].add ${configPath}02_VLESS_TCP_inbounds.json)
|
currentAdd=$(jq -r .inbounds[0].settings.clients[0].add ${configPath}${frontingType}.json)
|
||||||
if [[ "${currentAdd}" == "null" ]];then
|
if [[ "${currentAdd}" == "null" ]];then
|
||||||
currentAdd=${currentHost}
|
currentAdd=${currentHost}
|
||||||
fi
|
fi
|
||||||
currentPort=$(jq .inbounds[0].port ${configPath}02_VLESS_TCP_inbounds.json)
|
currentPort=$(jq .inbounds[0].port ${configPath}${frontingType}.json)
|
||||||
|
|
||||||
elif [[ "${coreInstallType}" == "2" || "${coreInstallType}" == "3" ]]; then
|
elif [[ "${coreInstallType}" == "2" || "${coreInstallType}" == "3" ]]; then
|
||||||
if [[ "${coreInstallType}" == "3" ]]; then
|
if [[ "${coreInstallType}" == "3" ]]; then
|
||||||
currentHost=$(jq -r .inbounds[0].streamSettings.xtlsSettings.certificates[0].certificateFile ${configPath}02_VLESS_TCP_inbounds.json | awk -F '[t][l][s][/]' '{print $2}' | awk -F '[.][c][r][t]' '{print $1}')
|
currentHost=$(jq -r .inbounds[0].streamSettings.xtlsSettings.certificates[0].certificateFile ${configPath}${frontingType}.json | awk -F '[t][l][s][/]' '{print $2}' | awk -F '[.][c][r][t]' '{print $1}')
|
||||||
else
|
else
|
||||||
currentHost=$(jq -r .inbounds[0].streamSettings.tlsSettings.certificates[0].certificateFile ${configPath}02_VLESS_TCP_inbounds.json | awk -F '[t][l][s][/]' '{print $2}' | awk -F '[.][c][r][t]' '{print $1}')
|
currentHost=$(jq -r .inbounds[0].streamSettings.tlsSettings.certificates[0].certificateFile ${configPath}${frontingType}.json | awk -F '[t][l][s][/]' '{print $2}' | awk -F '[.][c][r][t]' '{print $1}')
|
||||||
fi
|
fi
|
||||||
currentAdd=$(jq -r .inbounds[0].settings.clients[0].add ${configPath}02_VLESS_TCP_inbounds.json)
|
currentAdd=$(jq -r .inbounds[0].settings.clients[0].add ${configPath}${frontingType}.json)
|
||||||
|
|
||||||
if [[ "${currentAdd}" == "null" ]];then
|
if [[ "${currentAdd}" == "null" ]];then
|
||||||
currentAdd=${currentHost}
|
currentAdd=${currentHost}
|
||||||
fi
|
fi
|
||||||
currentUUID=$(jq -r .inbounds[0].settings.clients[0].id ${configPath}02_VLESS_TCP_inbounds.json)
|
currentUUID=$(jq -r .inbounds[0].settings.clients[0].id ${configPath}${frontingType}.json)
|
||||||
currentPort=$(jq .inbounds[0].port ${configPath}02_VLESS_TCP_inbounds.json)
|
currentPort=$(jq .inbounds[0].port ${configPath}${frontingType}.json)
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -322,12 +330,18 @@ showInstallStatus() {
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if echo ${currentInstallProtocolType} | grep -q trojan; then
|
||||||
|
if [[ "${coreInstallType}" == 1 ]]; then
|
||||||
|
echoContent yellow "Trojan+TCP[TLS/XTLS] \c"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
if echo ${currentInstallProtocolType} | grep -q 1; then
|
if echo ${currentInstallProtocolType} | grep -q 1; then
|
||||||
echoContent yellow "VLESS+WS[TLS] \c"
|
echoContent yellow "VLESS+WS[TLS] \c"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if echo ${currentInstallProtocolType} | grep -q 2; then
|
if echo ${currentInstallProtocolType} | grep -q 2; then
|
||||||
echoContent yellow "VMess+TCP[TLS] \c"
|
echoContent yellow "Trojan+gRPC[TLS] \c"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if echo ${currentInstallProtocolType} | grep -q 3; then
|
if echo ${currentInstallProtocolType} | grep -q 3; then
|
||||||
|
@ -675,7 +689,44 @@ server {
|
||||||
return 403;
|
return 403;
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
if echo "${selectCustomInstallType}" |grep -q 5 || [[ -z "${selectCustomInstallType}" ]]; then
|
if [[ -n $(echo "${selectCustomInstallType}" |grep 2) && -n $(echo "${selectCustomInstallType}" |grep 5) ]] || [[ -z "${selectCustomInstallType}" ]];then
|
||||||
|
|
||||||
|
cat <<EOF >>/etc/nginx/conf.d/alone.conf
|
||||||
|
server {
|
||||||
|
listen 127.0.0.1:31302 http2;
|
||||||
|
server_name ${domain};
|
||||||
|
root /usr/share/nginx/html;
|
||||||
|
location /s/ {
|
||||||
|
add_header Content-Type text/plain;
|
||||||
|
alias /etc/v2ray-agent/subscribe/;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /${currentPath}grpc {
|
||||||
|
client_max_body_size 0;
|
||||||
|
# keepalive_time 1071906480m;
|
||||||
|
keepalive_requests 4294967296;
|
||||||
|
client_body_timeout 1071906480m;
|
||||||
|
send_timeout 1071906480m;
|
||||||
|
lingering_close always;
|
||||||
|
grpc_read_timeout 1071906480m;
|
||||||
|
grpc_send_timeout 1071906480m;
|
||||||
|
grpc_pass grpc://127.0.0.1:31301;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /${currentPath}trojangrpc {
|
||||||
|
client_max_body_size 0;
|
||||||
|
# keepalive_time 1071906480m;
|
||||||
|
keepalive_requests 4294967296;
|
||||||
|
client_body_timeout 1071906480m;
|
||||||
|
send_timeout 1071906480m;
|
||||||
|
lingering_close always;
|
||||||
|
grpc_read_timeout 1071906480m;
|
||||||
|
grpc_send_timeout 1071906480m;
|
||||||
|
grpc_pass grpc://127.0.0.1:31304;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
elif echo "${selectCustomInstallType}" |grep -q 5 || [[ -z "${selectCustomInstallType}" ]]; then
|
||||||
cat <<EOF >>/etc/nginx/conf.d/alone.conf
|
cat <<EOF >>/etc/nginx/conf.d/alone.conf
|
||||||
server {
|
server {
|
||||||
listen 127.0.0.1:31302 http2;
|
listen 127.0.0.1:31302 http2;
|
||||||
|
@ -694,12 +745,37 @@ server {
|
||||||
lingering_close always;
|
lingering_close always;
|
||||||
grpc_read_timeout 1071906480m;
|
grpc_read_timeout 1071906480m;
|
||||||
grpc_send_timeout 1071906480m;
|
grpc_send_timeout 1071906480m;
|
||||||
grpc_pass grpc://127.0.0.1:31301;
|
grpc_pass grpc://127.0.0.1:31304;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
elif echo "${selectCustomInstallType}" |grep -q 2 || [[ -z "${selectCustomInstallType}" ]];then
|
||||||
|
|
||||||
|
cat <<EOF >>/etc/nginx/conf.d/alone.conf
|
||||||
|
server {
|
||||||
|
listen 127.0.0.1:31302 http2;
|
||||||
|
server_name ${domain};
|
||||||
|
root /usr/share/nginx/html;
|
||||||
|
location /s/ {
|
||||||
|
add_header Content-Type text/plain;
|
||||||
|
alias /etc/v2ray-agent/subscribe/;
|
||||||
|
}
|
||||||
|
location /${currentPath}trojangrpc {
|
||||||
|
client_max_body_size 0;
|
||||||
|
# keepalive_time 1071906480m;
|
||||||
|
keepalive_requests 4294967296;
|
||||||
|
client_body_timeout 1071906480m;
|
||||||
|
send_timeout 1071906480m;
|
||||||
|
lingering_close always;
|
||||||
|
grpc_read_timeout 1071906480m;
|
||||||
|
grpc_send_timeout 1071906480m;
|
||||||
|
grpc_pass grpc://127.0.0.1:31301;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EOF
|
||||||
else
|
else
|
||||||
|
|
||||||
cat <<EOF >>/etc/nginx/conf.d/alone.conf
|
cat <<EOF >>/etc/nginx/conf.d/alone.conf
|
||||||
server {
|
server {
|
||||||
listen 127.0.0.1:31302 http2;
|
listen 127.0.0.1:31302 http2;
|
||||||
|
@ -1927,6 +2003,65 @@ EOF
|
||||||
# fi
|
# fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# 初始化Xray Trojan XTLS 配置文件
|
||||||
|
initXrayFrontingConfig(){
|
||||||
|
if [[ -z "${configPath}" ]]; then
|
||||||
|
echoContent red " ---> 未安装,请使用脚本安装"
|
||||||
|
menu
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
if [[ "${coreInstallType}" != "1" ]];then
|
||||||
|
echoContent red " ---> 未安装可用类型"
|
||||||
|
fi
|
||||||
|
local xtlsType=
|
||||||
|
if echo ${currentInstallProtocolType} | grep -q trojan; then
|
||||||
|
xtlsType=VLESS
|
||||||
|
else
|
||||||
|
xtlsType=Trojan
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
echoContent skyBlue "\n功能 1/${totalProgress} : 前置切换为${xtlsType}"
|
||||||
|
echoContent red "\n=============================================================="
|
||||||
|
echoContent yellow "# 注意事项\n"
|
||||||
|
echoContent yellow "会将前置替换为${xtlsType}"
|
||||||
|
echoContent yellow "如果前置是Trojan,查看帐号时则会出现两个Trojan协议的节点,有一个不可用xtls"
|
||||||
|
echoContent yellow "再次执行可切换至上一次的前置\n"
|
||||||
|
|
||||||
|
echoContent yellow "1.切换至${xtlsType}"
|
||||||
|
echoContent red "=============================================================="
|
||||||
|
read -r -p "请选择:" selectType
|
||||||
|
if [[ "${selectType}" == "1" ]]; then
|
||||||
|
|
||||||
|
if [[ "${xtlsType}" == "Trojan" ]];then
|
||||||
|
|
||||||
|
local VLESSConfig=$(cat ${configPath}${frontingType}.json)
|
||||||
|
VLESSConfig=${VLESSConfig//"id"/"password"}
|
||||||
|
VLESSConfig=${VLESSConfig//VLESSTCP/TrojanTCPXTLS}
|
||||||
|
VLESSConfig=${VLESSConfig//VLESS/Trojan}
|
||||||
|
VLESSConfig=${VLESSConfig//"vless"/"trojan"}
|
||||||
|
VLESSConfig=${VLESSConfig//"id"/"password"}
|
||||||
|
|
||||||
|
echo "${VLESSConfig}" | jq . >${configPath}02_trojan_TCP_inbounds.json
|
||||||
|
rm ${configPath}${frontingType}.json
|
||||||
|
elif [[ "${xtlsType}" == "VLESS" ]]; then
|
||||||
|
|
||||||
|
local VLESSConfig=$(cat ${configPath}02_trojan_TCP_inbounds.json)
|
||||||
|
VLESSConfig=${VLESSConfig//"password"/"id"}
|
||||||
|
VLESSConfig=${VLESSConfig//TrojanTCPXTLS/VLESSTCP}
|
||||||
|
VLESSConfig=${VLESSConfig//Trojan/VLESS}
|
||||||
|
VLESSConfig=${VLESSConfig//"trojan"/"vless"}
|
||||||
|
VLESSConfig=${VLESSConfig//"password"/"id"}
|
||||||
|
|
||||||
|
echo "${VLESSConfig}" | jq . >${configPath}02_VLESS_TCP_inbounds.json
|
||||||
|
rm ${configPath}02_trojan_TCP_inbounds.json
|
||||||
|
fi
|
||||||
|
reloadCore
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0;
|
||||||
|
}
|
||||||
|
|
||||||
# 初始化Xray 配置文件
|
# 初始化Xray 配置文件
|
||||||
initXrayConfig() {
|
initXrayConfig() {
|
||||||
echoContent skyBlue "\n进度 $2/${totalProgress} : 初始化Xray配置"
|
echoContent skyBlue "\n进度 $2/${totalProgress} : 初始化Xray配置"
|
||||||
|
@ -2144,6 +2279,49 @@ EOF
|
||||||
# fi
|
# fi
|
||||||
|
|
||||||
|
|
||||||
|
# # trojan_gRPC
|
||||||
|
|
||||||
|
# trojan_grpc
|
||||||
|
if echo ${selectCustomInstallType} | grep -q 2 || [[ "$1" == "all" ]]; then
|
||||||
|
echo selectCustomInstallType:${selectCustomInstallType}
|
||||||
|
if ! echo ${selectCustomInstallType} | grep -q 5 && [[ -n ${selectCustomInstallType} ]];then
|
||||||
|
fallbacksList=${fallbacksList//31302/31304}
|
||||||
|
fi
|
||||||
|
|
||||||
|
cat <<EOF >/etc/v2ray-agent/xray/conf/04_trojan_gRPC_inbounds.json
|
||||||
|
{
|
||||||
|
"inbounds": [
|
||||||
|
{
|
||||||
|
"port": 31304,
|
||||||
|
"listen": "127.0.0.1",
|
||||||
|
"protocol": "trojan",
|
||||||
|
"tag": "trojangRPCTCP",
|
||||||
|
"settings": {
|
||||||
|
"clients": [
|
||||||
|
{
|
||||||
|
"password": "${uuid}",
|
||||||
|
"email": "${domain}_trojan_gRPC"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"fallbacks": [
|
||||||
|
{
|
||||||
|
"dest": "31300"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"streamSettings": {
|
||||||
|
"network": "grpc",
|
||||||
|
"grpcSettings": {
|
||||||
|
"serviceName": "${customPath}trojangrpc"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
# VMess_WS
|
# VMess_WS
|
||||||
if echo "${selectCustomInstallType}" | grep -q 3 || [[ "$1" == "all" ]]; then
|
if echo "${selectCustomInstallType}" | grep -q 3 || [[ "$1" == "all" ]]; then
|
||||||
fallbacksList=${fallbacksList}',{"path":"/'${customPath}'vws","dest":31299,"xver":1}'
|
fallbacksList=${fallbacksList}',{"path":"/'${customPath}'vws","dest":31299,"xver":1}'
|
||||||
|
@ -2320,7 +2498,7 @@ customCDNIP() {
|
||||||
# 通用
|
# 通用
|
||||||
defaultBase64Code() {
|
defaultBase64Code() {
|
||||||
local type=$1
|
local type=$1
|
||||||
local ps=$2
|
local email=$2
|
||||||
local id=$3
|
local id=$3
|
||||||
local hostPort=$4
|
local hostPort=$4
|
||||||
local host=
|
local host=
|
||||||
|
@ -2336,52 +2514,74 @@ defaultBase64Code() {
|
||||||
local path=$5
|
local path=$5
|
||||||
local add=$6
|
local add=$6
|
||||||
|
|
||||||
local subAccount=${currentHost}_$(echo "${id//\"/}_currentHost" | md5sum | awk '{print $1}')
|
local subAccount=${currentHost}_$(echo "${id}_currentHost" | md5sum | awk '{print $1}')
|
||||||
if [[ "${type}" == "vlesstcp" ]]; then
|
if [[ "${type}" == "vlesstcp" ]]; then
|
||||||
local VLESSID
|
|
||||||
VLESSID=${id//\"/}
|
|
||||||
local VLESSEmail
|
|
||||||
VLESSEmail=$(echo "${ps}" | awk -F "[\"]" '{print $2}')
|
|
||||||
|
|
||||||
if [[ "${coreInstallType}" == "1" ]]; then
|
if [[ "${coreInstallType}" == "1" ]] && echo ${currentInstallProtocolType} | grep -q 0; then
|
||||||
echoContent yellow " ---> 通用格式(VLESS+TCP+TLS/xtls-rprx-direct)"
|
echoContent yellow " ---> 通用格式(VLESS+TCP+TLS/xtls-rprx-direct)"
|
||||||
echoContent green " vless://${VLESSID}@${host}:${port}?encryption=none&security=xtls&type=tcp&host=${host}&headerType=none&sni=${host}&flow=xtls-rprx-direct#${VLESSEmail}\n"
|
echoContent green " vless://${id}@${host}:${port}?encryption=none&security=xtls&type=tcp&host=${host}&headerType=none&sni=${host}&flow=xtls-rprx-direct#${email}\n"
|
||||||
|
|
||||||
echoContent yellow " ---> 格式化明文(VLESS+TCP+TLS/xtls-rprx-direct)"
|
echoContent yellow " ---> 格式化明文(VLESS+TCP+TLS/xtls-rprx-direct)"
|
||||||
echoContent green "协议类型:VLESS,地址:${host},端口:${port},用户ID:${VLESSID},安全:xtls,传输方式:tcp,flow:xtls-rprx-direct,账户名:${VLESSEmail}\n"
|
echoContent green "协议类型:VLESS,地址:${host},端口:${port},用户ID:${id},安全:xtls,传输方式:tcp,flow:xtls-rprx-direct,账户名:${email}\n"
|
||||||
cat <<EOF >>"/etc/v2ray-agent/subscribe_tmp/${subAccount}"
|
cat <<EOF >>"/etc/v2ray-agent/subscribe_tmp/${subAccount}"
|
||||||
vless://${VLESSID}@${host}:${port}?encryption=none&security=xtls&type=tcp&host=${host}&headerType=none&sni=${host}&flow=xtls-rprx-direct#${VLESSEmail}
|
vless://${id}@${host}:${port}?encryption=none&security=xtls&type=tcp&host=${host}&headerType=none&sni=${host}&flow=xtls-rprx-direct#${email}
|
||||||
EOF
|
EOF
|
||||||
echoContent yellow " ---> 二维码 VLESS(VLESS+TCP+TLS/xtls-rprx-direct)"
|
echoContent yellow " ---> 二维码 VLESS(VLESS+TCP+TLS/xtls-rprx-direct)"
|
||||||
echoContent green " https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=vless%3A%2F%2F${VLESSID}%40${host}%3A${port}%3F${encryption}%3Dnone%26security%3Dxtls%26type%3Dtcp%26${host}%3D${host}%26headerType%3Dnone%26sni%3D${host}%26flow%3Dxtls-rprx-direct%23${VLESSEmail}\n"
|
echoContent green " https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=vless%3A%2F%2F${id}%40${host}%3A${port}%3F${encryption}%3Dnone%26security%3Dxtls%26type%3Dtcp%26${host}%3D${host}%26headerType%3Dnone%26sni%3D${host}%26flow%3Dxtls-rprx-direct%23${email}\n"
|
||||||
|
|
||||||
echoContent skyBlue "----------------------------------------------------------------------------------"
|
echoContent skyBlue "----------------------------------------------------------------------------------"
|
||||||
|
|
||||||
echoContent yellow " ---> 通用格式(VLESS+TCP+TLS/xtls-rprx-splice)"
|
echoContent yellow " ---> 通用格式(VLESS+TCP+TLS/xtls-rprx-splice)"
|
||||||
echoContent green " vless://${VLESSID}@${host}:${port}?encryption=none&security=xtls&type=tcp&host=${host}&headerType=none&sni=${host}&flow=xtls-rprx-splice#${VLESSEmail}\n"
|
echoContent green " vless://${id}@${host}:${port}?encryption=none&security=xtls&type=tcp&host=${host}&headerType=none&sni=${host}&flow=xtls-rprx-splice#${email}\n"
|
||||||
|
|
||||||
echoContent yellow " ---> 格式化明文(VLESS+TCP+TLS/xtls-rprx-splice)"
|
echoContent yellow " ---> 格式化明文(VLESS+TCP+TLS/xtls-rprx-splice)"
|
||||||
echoContent green " 协议类型:VLESS,地址:${host},端口:${port},用户ID:${VLESSID},安全:xtls,传输方式:tcp,flow:xtls-rprx-splice,账户名:${VLESSEmail}\n"
|
echoContent green " 协议类型:VLESS,地址:${host},端口:${port},用户ID:${id},安全:xtls,传输方式:tcp,flow:xtls-rprx-splice,账户名:${email}\n"
|
||||||
cat <<EOF >>"/etc/v2ray-agent/subscribe_tmp/${subAccount}"
|
cat <<EOF >>"/etc/v2ray-agent/subscribe_tmp/${subAccount}"
|
||||||
vless://${VLESSID}@${host}:${port}?encryption=none&security=xtls&type=tcp&host=${host}&headerType=none&sni=${host}&flow=xtls-rprx-splice#${VLESSEmail}
|
vless://${id}@${host}:${port}?encryption=none&security=xtls&type=tcp&host=${host}&headerType=none&sni=${host}&flow=xtls-rprx-splice#${email}
|
||||||
EOF
|
EOF
|
||||||
echoContent yellow " ---> 二维码 VLESS(VLESS+TCP+TLS/xtls-rprx-splice)"
|
echoContent yellow " ---> 二维码 VLESS(VLESS+TCP+TLS/xtls-rprx-splice)"
|
||||||
echoContent green " https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=vless%3A%2F%2F${VLESSID}%40${host}%3A${port}%3F${encryption}%3Dnone%26security%3Dxtls%26type%3Dtcp%26${host}%3D${host}%26headerType%3Dnone%26sni%3D${host}%26flow%3Dxtls-rprx-splice%23${VLESSEmail}\n"
|
echoContent green " https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=vless%3A%2F%2F${id}%40${host}%3A${port}%3F${encryption}%3Dnone%26security%3Dxtls%26type%3Dtcp%26${host}%3D${host}%26headerType%3Dnone%26sni%3D${host}%26flow%3Dxtls-rprx-splice%23${email}\n"
|
||||||
|
|
||||||
elif [[ "${coreInstallType}" == "2" || "${coreInstallType}" == "3" ]]; then
|
elif [[ "${coreInstallType}" == "2" || "${coreInstallType}" == "3" ]]; then
|
||||||
echoContent yellow " ---> 通用格式(VLESS+TCP+TLS)"
|
echoContent yellow " ---> 通用格式(VLESS+TCP+TLS)"
|
||||||
echoContent green " vless://${VLESSID}@${host}:${port}?security=tls&encryption=none&host=${host}&headerType=none&type=tcp#${VLESSEmail}\n"
|
echoContent green " vless://${id}@${host}:${port}?security=tls&encryption=none&host=${host}&headerType=none&type=tcp#${email}\n"
|
||||||
|
|
||||||
echoContent yellow " ---> 格式化明文(VLESS+TCP+TLS/xtls-rprx-splice)"
|
echoContent yellow " ---> 格式化明文(VLESS+TCP+TLS/xtls-rprx-splice)"
|
||||||
echoContent green " 协议类型:VLESS,地址:${host},端口:${port},用户ID:${VLESSID},安全:tls,传输方式:tcp,账户名:${VLESSEmail}\n"
|
echoContent green " 协议类型:VLESS,地址:${host},端口:${port},用户ID:${id},安全:tls,传输方式:tcp,账户名:${email}\n"
|
||||||
|
|
||||||
cat <<EOF >>"/etc/v2ray-agent/subscribe_tmp/${subAccount}"
|
cat <<EOF >>"/etc/v2ray-agent/subscribe_tmp/${subAccount}"
|
||||||
vless://${VLESSID}@${host}:${port}?security=tls&encryption=none&host=${host}&headerType=none&type=tcp#${VLESSEmail}
|
vless://${id}@${host}:${port}?security=tls&encryption=none&host=${host}&headerType=none&type=tcp#${email}
|
||||||
EOF
|
EOF
|
||||||
echoContent yellow " ---> 二维码 VLESS(VLESS+TCP+TLS)"
|
echoContent yellow " ---> 二维码 VLESS(VLESS+TCP+TLS)"
|
||||||
echoContent green " https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=vless%3a%2f%2f${VLESSID}%40${host}%3a${port}%3fsecurity%3dtls%26encryption%3dnone%26host%3d${host}%26headerType%3dnone%26type%3dtcp%23${VLESSEmail}\n"
|
echoContent green " https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=vless%3a%2f%2f${id}%40${host}%3a${port}%3fsecurity%3dtls%26encryption%3dnone%26host%3d${host}%26headerType%3dnone%26type%3dtcp%23${email}\n"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
elif [[ "${type}" == "trojanTCPXTLS" ]]; then
|
||||||
|
echoContent yellow " ---> 通用格式(Trojan+TCP+TLS/xtls-rprx-direct)"
|
||||||
|
echoContent green " trojan://${id}@${host}:${port}?encryption=none&security=xtls&type=tcp&host=${host}&headerType=none&sni=${host}&flow=xtls-rprx-direct#${email}\n"
|
||||||
|
|
||||||
|
echoContent yellow " ---> 格式化明文(Trojan+TCP+TLS/xtls-rprx-direct)"
|
||||||
|
echoContent green "协议类型:Trojan,地址:${host},端口:${port},用户ID:${id},安全:xtls,传输方式:tcp,flow:xtls-rprx-direct,账户名:${email}\n"
|
||||||
|
cat <<EOF >>"/etc/v2ray-agent/subscribe_tmp/${subAccount}"
|
||||||
|
trojan://${id}@${host}:${port}?encryption=none&security=xtls&type=tcp&host=${host}&headerType=none&sni=${host}&flow=xtls-rprx-direct#${email}
|
||||||
|
EOF
|
||||||
|
echoContent yellow " ---> 二维码 Trojan(Trojan+TCP+TLS/xtls-rprx-direct)"
|
||||||
|
echoContent green " https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=trojan%3A%2F%2F${id}%40${host}%3A${port}%3Fencryption%3Dnone%26security%3Dxtls%26type%3Dtcp%26${host}%3D${host}%26headerType%3Dnone%26sni%3D${host}%26flow%3Dxtls-rprx-direct%23${email}\n"
|
||||||
|
|
||||||
|
echoContent skyBlue "----------------------------------------------------------------------------------"
|
||||||
|
|
||||||
|
echoContent yellow " ---> 通用格式(Trojan+TCP+TLS/xtls-rprx-splice)"
|
||||||
|
echoContent green " trojan://${id}@${host}:${port}?encryption=none&security=xtls&type=tcp&host=${host}&headerType=none&sni=${host}&flow=xtls-rprx-splice#${email}\n"
|
||||||
|
|
||||||
|
echoContent yellow " ---> 格式化明文(Trojan+TCP+TLS/xtls-rprx-splice)"
|
||||||
|
echoContent green " 协议类型:VLESS,地址:${host},端口:${port},用户ID:${id},安全:xtls,传输方式:tcp,flow:xtls-rprx-splice,账户名:${email}\n"
|
||||||
|
cat <<EOF >>"/etc/v2ray-agent/subscribe_tmp/${subAccount}"
|
||||||
|
trojan://${id}@${host}:${port}?encryption=none&security=xtls&type=tcp&host=${host}&headerType=none&sni=${host}&flow=xtls-rprx-splice#${email}
|
||||||
|
EOF
|
||||||
|
echoContent yellow " ---> 二维码 Trojan(Trojan+TCP+TLS/xtls-rprx-splice)"
|
||||||
|
echoContent green " https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=trojan%3A%2F%2F${id}%40${host}%3A${port}%3Fencryption%3Dnone%26security%3Dxtls%26type%3Dtcp%26${host}%3D${host}%26headerType%3Dnone%26sni%3D${host}%26flow%3Dxtls-rprx-splice%23${email}\n"
|
||||||
|
|
||||||
|
|
||||||
elif [[ "${type}" == "vmessws" ]]; then
|
elif [[ "${type}" == "vmessws" ]]; then
|
||||||
|
|
||||||
qrCodeBase64Default=$(echo -n '{"port":"'${port}'","ps":'${ps}',"tls":"tls","id":'"${id}"',"aid":"0","v":"2","host":"'${host}'","type":"none","path":"/'${path}'","net":"ws","add":"'${add}'","allowInsecure":0,"method":"none","peer":"'${host}'","sni":"'${host}'"}' | sed 's#/#\\\/#g' | base64)
|
qrCodeBase64Default=$(echo -n '{"port":"'${port}'","ps":'${ps}',"tls":"tls","id":'"${id}"',"aid":"0","v":"2","host":"'${host}'","type":"none","path":"/'${path}'","net":"ws","add":"'${add}'","allowInsecure":0,"method":"none","peer":"'${host}'","sni":"'${host}'"}' | sed 's#/#\\\/#g' | base64)
|
||||||
|
@ -2429,97 +2629,111 @@ EOF
|
||||||
echoContent green " https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=vmess://${qrCodeBase64Default}\n"
|
echoContent green " https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=vmess://${qrCodeBase64Default}\n"
|
||||||
|
|
||||||
elif [[ "${type}" == "vlessws" ]]; then
|
elif [[ "${type}" == "vlessws" ]]; then
|
||||||
local VLESSID
|
|
||||||
VLESSID=$(echo "${id}" | awk -F "[\"]" '{print $2}')
|
|
||||||
local VLESSEmail
|
|
||||||
VLESSEmail=$(echo "${ps}" | awk -F "[\"]" '{print $2}')
|
|
||||||
|
|
||||||
echoContent yellow " ---> 通用格式(VLESS+WS+TLS)"
|
echoContent yellow " ---> 通用格式(VLESS+WS+TLS)"
|
||||||
echoContent green " vless://${VLESSID}@${add}:${port}?encryption=none&security=tls&type=ws&host=${host}&sni=${host}&path=%2f${path}#${VLESSEmail}\n"
|
echoContent green " vless://${id}@${add}:${port}?encryption=none&security=tls&type=ws&host=${host}&sni=${host}&path=%2f${path}#${email}\n"
|
||||||
|
|
||||||
echoContent yellow " ---> 格式化明文(VLESS+WS+TLS)"
|
echoContent yellow " ---> 格式化明文(VLESS+WS+TLS)"
|
||||||
echoContent green " 协议类型:VLESS,地址:${add},伪装域名/SNI:${host},端口:${port},用户ID:${VLESSID},安全:tls,传输方式:ws,路径:/${path},账户名:${VLESSEmail}\n"
|
echoContent green " 协议类型:VLESS,地址:${add},伪装域名/SNI:${host},端口:${port},用户ID:${id},安全:tls,传输方式:ws,路径:/${path},账户名:${email}\n"
|
||||||
|
|
||||||
cat <<EOF >>"/etc/v2ray-agent/subscribe_tmp/${subAccount}"
|
cat <<EOF >>"/etc/v2ray-agent/subscribe_tmp/${subAccount}"
|
||||||
vless://${VLESSID}@${add}:${port}?encryption=none&security=tls&type=ws&host=${host}&sni=${host}&path=%2f${path}#${VLESSEmail}
|
vless://${id}@${add}:${port}?encryption=none&security=tls&type=ws&host=${host}&sni=${host}&path=%2f${path}#${email}
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
echoContent yellow " ---> 二维码 VLESS(VLESS+TCP+TLS/XTLS)"
|
echoContent yellow " ---> 二维码 VLESS(VLESS+TCP+TLS/XTLS)"
|
||||||
echoContent green " https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=vless%3A%2F%2F${VLESSID}%40${add}%3A${port}%3Fencryption%3Dnone%26security%3Dtls%26type%3Dws%26host%3D${host}%26sni%3D${host}%26path%3D%252f${path}%23${VLESSEmail}"
|
echoContent green " https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=vless%3A%2F%2F${id}%40${add}%3A${port}%3Fencryption%3Dnone%26security%3Dtls%26type%3Dws%26host%3D${host}%26sni%3D${host}%26path%3D%252f${path}%23${email}"
|
||||||
|
|
||||||
elif [[ "${type}" == "vlessgrpc" ]]; then
|
elif [[ "${type}" == "vlessgrpc" ]]; then
|
||||||
local VLESSID
|
|
||||||
VLESSID=$(echo "${id}" | awk -F "[\"]" '{print $2}')
|
|
||||||
local VLESSEmail
|
|
||||||
VLESSEmail=$(echo "${ps}" | awk -F "[\"]" '{print $2}')
|
|
||||||
|
|
||||||
echoContent yellow " ---> 通用格式(VLESS+gRPC+TLS)"
|
echoContent yellow " ---> 通用格式(VLESS+gRPC+TLS)"
|
||||||
echoContent green " vless://${VLESSID}@${add}:${port}?encryption=none&security=tls&type=grpc&host=${host}&serviceName=${path}&alpn=h2&sni=${host}#${VLESSEmail}\n"
|
echoContent green " vless://${id}@${add}:${port}?encryption=none&security=tls&type=grpc&host=${host}&path=${path}&serviceName=${path}&alpn=h2&sni=${host}#${email}\n"
|
||||||
|
|
||||||
echoContent yellow " ---> 格式化明文(VLESS+gRPC+TLS)"
|
echoContent yellow " ---> 格式化明文(VLESS+gRPC+TLS)"
|
||||||
echoContent green " 协议类型:VLESS,地址:${add},伪装域名/SNI:${host},端口:${port},用户ID:${VLESSID},安全:tls,传输方式:gRPC,alpn:h2,serviceName:${path},账户名:${VLESSEmail}\n"
|
echoContent green " 协议类型:VLESS,地址:${add},伪装域名/SNI:${host},端口:${port},用户ID:${id},安全:tls,传输方式:gRPC,alpn:h2,serviceName:${path},账户名:${email}\n"
|
||||||
|
|
||||||
cat <<EOF >>"/etc/v2ray-agent/subscribe_tmp/${subAccount}"
|
cat <<EOF >>"/etc/v2ray-agent/subscribe_tmp/${subAccount}"
|
||||||
vless://${VLESSID}@${add}:${port}?encryption=none&security=tls&type=grpc&host=${host}&path=${path}&serviceName=${path}&alpn=h2&sni=${host}#${VLESSEmail}
|
vless://${id}@${add}:${port}?encryption=none&security=tls&type=grpc&host=${host}&path=${path}&serviceName=${path}&alpn=h2&sni=${host}#${email}
|
||||||
EOF
|
EOF
|
||||||
echoContent yellow " ---> 二维码 VLESS(VLESS+gRPC+TLS)"
|
echoContent yellow " ---> 二维码 VLESS(VLESS+gRPC+TLS)"
|
||||||
echoContent green " https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=vless%3A%2F%2F${VLESSID}%40${add}%3A${port}%3Fencryption%3Dnone%26security%3Dtls%26type%3Dgrpc%26host%3D${host}%26serviceName%3D${path}%26path%3D${path}%26sni%3D${host}%26alpn%3Dh2%23${VLESSEmail}"
|
echoContent green " https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=vless%3A%2F%2F${id}%40${add}%3A${port}%3Fencryption%3Dnone%26security%3Dtls%26type%3Dgrpc%26host%3D${host}%26serviceName%3D${path}%26path%3D${path}%26sni%3D${host}%26alpn%3Dh2%23${email}"
|
||||||
|
|
||||||
elif [[ "${type}" == "trojan" ]]; then
|
elif [[ "${type}" == "trojan" ]]; then
|
||||||
# URLEncode
|
# URLEncode
|
||||||
echoContent yellow " ---> Trojan(TLS)"
|
echoContent yellow " ---> Trojan(TLS)"
|
||||||
echoContent green " trojan://${id}@${host}:${port}?peer=${host}&sni=${host}&alpn=http1.1#${host}_trojan\n"
|
echoContent green " trojan://${id}@${host}:${port}?peer=${host}&sni=${host}&alpn=http1.1#${host}_Trojan\n"
|
||||||
|
|
||||||
cat <<EOF >>"/etc/v2ray-agent/subscribe_tmp/${subAccount}"
|
cat <<EOF >>"/etc/v2ray-agent/subscribe_tmp/${subAccount}"
|
||||||
trojan://${id}@${host}:${port}?peer=${host}&sni=${host}&alpn=http1.1#${host}_trojan
|
trojan://${id}@${host}:${port}?peer=${host}&sni=${host}&alpn=http1.1#${host}_Trojan
|
||||||
EOF
|
EOF
|
||||||
echoContent yellow " ---> 二维码 Trojan(TLS)"
|
echoContent yellow " ---> 二维码 Trojan(TLS)"
|
||||||
echoContent green " https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=trojan%3a%2f%2f${id}%40${host}%3a${port}%3fpeer%3d${host}%26sni%3d${host}%26alpn%3Dhttp1.1%23${host}_trojan\n"
|
echoContent green " https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=trojan%3a%2f%2f${id}%40${host}%3a${port}%3fpeer%3d${host}%26sni%3d${host}%26alpn%3Dhttp1.1%23${host}_Trojan\n"
|
||||||
|
|
||||||
|
elif [[ "${type}" == "trojangrpc" ]]; then
|
||||||
|
# URLEncode
|
||||||
|
|
||||||
|
echoContent yellow " ---> Trojan gRPC(TLS)"
|
||||||
|
echoContent green " trojan://${id}@${host}:${port}?encryption=none&peer=${host}&security=tls&type=grpc&sni=${host}&alpn=h2&path=${path}&serviceName=${path}#${host}_Trojan_gRPC\n"
|
||||||
|
|
||||||
|
cat <<EOF >>"/etc/v2ray-agent/subscribe_tmp/${subAccount}"
|
||||||
|
trojan://${id}@${host}:${port}?encryption=none&peer=${host}&security=tls&type=grpc&sni=${host}&alpn=h2&path=${path}&serviceName=${path}#${host}_Trojan_gRPC
|
||||||
|
EOF
|
||||||
|
echoContent yellow " ---> 二维码 Trojan gRPC(TLS)"
|
||||||
|
echoContent green " https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=trojan%3a%2f%2f${id}%40${host}%3a${port}%3Fencryption%3Dnone%26security%3Dtls%26peer%3d${host}%26type%3Dgrpc%26sni%3d${host}%26path%3D${path}%26alpn%3D=h2%26serviceName%3D${path}%23${host}_Trojan_gRPC\n"
|
||||||
|
|
||||||
elif [[ "${type}" == "trojangows" ]]; then
|
elif [[ "${type}" == "trojangows" ]]; then
|
||||||
# URLEncode
|
# URLEncode
|
||||||
echoContent yellow " ---> Trojan-Go(WS+TLS) Shadowrocket"
|
echoContent yellow " ---> Trojan-Go(WS+TLS) Shadowrocket"
|
||||||
echoContent green " trojan://${id}@${add}:${port}?allowInsecure=0&&peer=${host}&sni=${host}&plugin=obfs-local;obfs=websocket;obfs-host=${host};obfs-uri=${path}#${host}_trojan_ws\n"
|
echoContent green " trojan://${id}@${add}:${port}?allowInsecure=0&&peer=${host}&sni=${host}&plugin=obfs-local;obfs=websocket;obfs-host=${host};obfs-uri=${path}#${host}_Trojan_ws\n"
|
||||||
|
|
||||||
cat <<EOF >>"/etc/v2ray-agent/subscribe_tmp/${subAccount}"
|
cat <<EOF >>"/etc/v2ray-agent/subscribe_tmp/${subAccount}"
|
||||||
trojan://${id}@${add}:${port}?allowInsecure=0&&peer=${host}&sni=${host}&plugin=obfs-local;obfs=websocket;obfs-host=${host};obfs-uri=${path}#${host}_trojan_ws
|
trojan://${id}@${add}:${port}?allowInsecure=0&&peer=${host}&sni=${host}&plugin=obfs-local;obfs=websocket;obfs-host=${host};obfs-uri=${path}#${host}_Trojan_ws
|
||||||
EOF
|
EOF
|
||||||
echoContent yellow " ---> 二维码 Trojan-Go(WS+TLS) Shadowrocket"
|
echoContent yellow " ---> 二维码 Trojan-Go(WS+TLS) Shadowrocket"
|
||||||
echoContent green " https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=trojan%3a%2f%2f${id}%40${add}%3a${port}%3fallowInsecure%3d0%26peer%3d${host}%26plugin%3dobfs-local%3bobfs%3dwebsocket%3bobfs-host%3d${host}%3bobfs-uri%3d${path}%23${host}_trojan_ws\n"
|
echoContent green " https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=trojan%3a%2f%2f${id}%40${add}%3a${port}%3fallowInsecure%3d0%26peer%3d${host}%26plugin%3dobfs-local%3bobfs%3dwebsocket%3bobfs-host%3d${host}%3bobfs-uri%3d${path}%23${host}_Trojan_ws\n"
|
||||||
|
|
||||||
path=$(echo "${path}" | awk -F "[/]" '{print $2}')
|
path=$(echo "${path}" | awk -F "[/]" '{print $2}')
|
||||||
echoContent yellow " ---> Trojan-Go(WS+TLS) QV2ray"
|
echoContent yellow " ---> Trojan-Go(WS+TLS) QV2ray"
|
||||||
|
|
||||||
cat <<EOF >>"/etc/v2ray-agent/subscribe_tmp/${subAccount}"
|
cat <<EOF >>"/etc/v2ray-agent/subscribe_tmp/${subAccount}"
|
||||||
trojan-go://${id}@${add}:${port}?sni=${host}&type=ws&host=${host}&path=%2F${path}#${host}_trojan_ws
|
trojan-go://${id}@${add}:${port}?sni=${host}&type=ws&host=${host}&path=%2F${path}#${host}_Trojan_ws
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
echoContent green " trojan-go://${id}@${add}:${port}?sni=${host}&type=ws&host=${host}&path=%2F${path}#${host}_trojan_ws\n"
|
echoContent green " trojan-go://${id}@${add}:${port}?sni=${host}&type=ws&host=${host}&path=%2F${path}#${host}_Trojan_ws\n"
|
||||||
|
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
# 账号
|
# 账号
|
||||||
showAccounts() {
|
showAccounts() {
|
||||||
readInstallType
|
readInstallType
|
||||||
readConfigHostPathUUID
|
|
||||||
readInstallProtocolType
|
readInstallProtocolType
|
||||||
|
readConfigHostPathUUID
|
||||||
echoContent skyBlue "\n进度 $1/${totalProgress} : 账号"
|
echoContent skyBlue "\n进度 $1/${totalProgress} : 账号"
|
||||||
local show
|
local show
|
||||||
# VLESS TCP
|
# VLESS TCP
|
||||||
if [[ -n "${configPath}" ]]; then
|
if [[ -n "${configPath}" ]]; then
|
||||||
show=1
|
show=1
|
||||||
if echo "${currentInstallProtocolType}" | grep -q 0 || [[ -z "${currentInstallProtocolType}" ]]; then
|
if echo "${currentInstallProtocolType}" | grep -q trojan ;then
|
||||||
|
echoContent skyBlue "===================== Trojan TCP TLS/XTLS-direct/XTLS-splice ======================\n"
|
||||||
|
# cat ${configPath}02_VLESS_TCP_inbounds.json | jq .inbounds[0].settings.clients | jq -c '.[]'
|
||||||
|
jq .inbounds[0].settings.clients ${configPath}02_trojan_TCP_inbounds.json | jq -c '.[]' | while read -r user; do
|
||||||
|
echoContent skyBlue "\n ---> 帐号:$(echo "${user}" | jq -r .email )_$(echo "${user}" | jq -r .password)"
|
||||||
|
echo
|
||||||
|
defaultBase64Code trojanTCPXTLS $(echo "${user}" | jq -r .email) $(echo "${user}" | jq -r .password) "${currentHost}:${currentPort}" ${currentHost}
|
||||||
|
done
|
||||||
|
|
||||||
|
else
|
||||||
echoContent skyBlue "===================== VLESS TCP TLS/XTLS-direct/XTLS-splice ======================\n"
|
echoContent skyBlue "===================== VLESS TCP TLS/XTLS-direct/XTLS-splice ======================\n"
|
||||||
# cat ${configPath}02_VLESS_TCP_inbounds.json | jq .inbounds[0].settings.clients | jq -c '.[]'
|
# cat ${configPath}02_VLESS_TCP_inbounds.json | jq .inbounds[0].settings.clients | jq -c '.[]'
|
||||||
jq .inbounds[0].settings.clients ${configPath}02_VLESS_TCP_inbounds.json | jq -c '.[]' | while read -r user; do
|
jq .inbounds[0].settings.clients ${configPath}02_VLESS_TCP_inbounds.json | jq -c '.[]' | while read -r user; do
|
||||||
echoContent skyBlue "\n ---> 帐号:$(echo "${user}" | jq -r .email )_$(echo "${user}" | jq -r .id)"
|
echoContent skyBlue "\n ---> 帐号:$(echo "${user}" | jq -r .email )_$(echo "${user}" | jq -r .id)"
|
||||||
echo
|
echo
|
||||||
defaultBase64Code vlesstcp $(echo "${user}" | jq .email) $(echo "${user}" | jq .id) "${currentHost}:${currentPort}" ${currentHost}
|
defaultBase64Code vlesstcp $(echo "${user}" | jq -r .email) $(echo "${user}" | jq -r .id) "${currentHost}:${currentPort}" ${currentHost}
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
# VLESS WS
|
# VLESS WS
|
||||||
if echo ${currentInstallProtocolType} | grep -q 1 || [[ -z "${currentInstallProtocolType}" ]]; then
|
if echo ${currentInstallProtocolType} | grep -q 1; then
|
||||||
echoContent skyBlue "\n================================ VLESS WS TLS CDN ================================\n"
|
echoContent skyBlue "\n================================ VLESS WS TLS CDN ================================\n"
|
||||||
|
|
||||||
# cat ${configPath}03_VLESS_WS_inbounds.json | jq .inbounds[0].settings.clients | jq -c '.[]'
|
# cat ${configPath}03_VLESS_WS_inbounds.json | jq .inbounds[0].settings.clients | jq -c '.[]'
|
||||||
|
@ -2531,24 +2745,24 @@ showAccounts() {
|
||||||
echoContent yellow "Xray的0-RTT path后面会有?ed=2048,不兼容以v2ray为核心的客户端,请手动删除?ed=2048后使用\n"
|
echoContent yellow "Xray的0-RTT path后面会有?ed=2048,不兼容以v2ray为核心的客户端,请手动删除?ed=2048后使用\n"
|
||||||
path="${currentPath}ws?ed=2048"
|
path="${currentPath}ws?ed=2048"
|
||||||
fi
|
fi
|
||||||
defaultBase64Code vlessws $(echo "${user}" | jq .email) $(echo "${user}" | jq .id) "${currentHost}:${currentPort}" ${path} ${currentAdd}
|
defaultBase64Code vlessws $(echo "${user}" | jq -r .email) $(echo "${user}" | jq -r .id) "${currentHost}:${currentPort}" ${path} ${currentAdd}
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# VMess TCP
|
# VMess TCP
|
||||||
if echo ${currentInstallProtocolType} | grep -q 2 || [[ -z "${currentInstallProtocolType}" ]]; then
|
# if echo ${currentInstallProtocolType} | grep -q 2; then
|
||||||
echoContent skyBlue "\n================================= VMess TCP TLS =================================\n"
|
# echoContent skyBlue "\n================================= VMess TCP TLS =================================\n"
|
||||||
|
#
|
||||||
# cat ${configPath}04_VMess_TCP_inbounds.json | jq .inbounds[0].settings.clients | jq -c '.[]'
|
# # cat ${configPath}04_VMess_TCP_inbounds.json | jq .inbounds[0].settings.clients | jq -c '.[]'
|
||||||
jq .inbounds[0].settings.clients ${configPath}04_VMess_TCP_inbounds.json | jq -c '.[]' | while read -r user; do
|
# jq .inbounds[0].settings.clients ${configPath}04_VMess_TCP_inbounds.json | jq -c '.[]' | while read -r user; do
|
||||||
echoContent skyBlue "\n ---> 帐号:$(echo "${user}" | jq -r .email )_$(echo "${user}" | jq -r .id)"
|
# echoContent skyBlue "\n ---> 帐号:$(echo "${user}" | jq -r .email )_$(echo "${user}" | jq -r .id)"
|
||||||
echo
|
# echo
|
||||||
defaultBase64Code vmesstcp $(echo "${user}" | jq .email) $(echo "${user}" | jq .id) "${currentHost}:${currentPort}" "${currentPath}tcp" "${currentHost}"
|
# defaultBase64Code vmesstcp $(echo "${user}" | jq .email) $(echo "${user}" | jq .id) "${currentHost}:${currentPort}" "${currentPath}tcp" "${currentHost}"
|
||||||
done
|
# done
|
||||||
fi
|
# fi
|
||||||
|
|
||||||
# VMess WS
|
# VMess WS
|
||||||
if echo ${currentInstallProtocolType} | grep -q 3 || [[ -z "${currentInstallProtocolType}" ]]; then
|
if echo ${currentInstallProtocolType} | grep -q 3; then
|
||||||
echoContent skyBlue "\n================================ VMess WS TLS CDN ================================\n"
|
echoContent skyBlue "\n================================ VMess WS TLS CDN ================================\n"
|
||||||
local path="${currentPath}vws"
|
local path="${currentPath}vws"
|
||||||
if [[ ${coreInstallType} == "1" ]]; then
|
if [[ ${coreInstallType} == "1" ]]; then
|
||||||
|
@ -2557,24 +2771,24 @@ showAccounts() {
|
||||||
jq .inbounds[0].settings.clients ${configPath}05_VMess_WS_inbounds.json | jq -c '.[]' | while read -r user; do
|
jq .inbounds[0].settings.clients ${configPath}05_VMess_WS_inbounds.json | jq -c '.[]' | while read -r user; do
|
||||||
echoContent skyBlue "\n ---> 帐号:$(echo "${user}" | jq -r .email )_$(echo "${user}" | jq -r .id)"
|
echoContent skyBlue "\n ---> 帐号:$(echo "${user}" | jq -r .email )_$(echo "${user}" | jq -r .id)"
|
||||||
echo
|
echo
|
||||||
defaultBase64Code vmessws $(echo "${user}" | jq .email) $(echo "${user}" | jq .id) "${currentHost}:${currentPort}" ${path} ${currentAdd}
|
defaultBase64Code vmessws $(echo "${user}" | jq -r .email) $(echo "${user}" | jq -r .id) "${currentHost}:${currentPort}" ${path} ${currentAdd}
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# VLESS grpc
|
# VLESS grpc
|
||||||
if echo ${currentInstallProtocolType} | grep -q 5 || [[ -z "${currentInstallProtocolType}" ]]; then
|
if echo ${currentInstallProtocolType} | grep -q 5; then
|
||||||
echoContent skyBlue "\n=============================== VLESS gRPC TLS CDN ===============================\n"
|
echoContent skyBlue "\n=============================== VLESS gRPC TLS CDN ===============================\n"
|
||||||
local serviceName=$(jq -r .inbounds[0].streamSettings.grpcSettings.serviceName ${configPath}06_VLESS_gRPC_inbounds.json)
|
local serviceName=$(jq -r .inbounds[0].streamSettings.grpcSettings.serviceName ${configPath}06_VLESS_gRPC_inbounds.json)
|
||||||
jq .inbounds[0].settings.clients ${configPath}06_VLESS_gRPC_inbounds.json | jq -c '.[]' | while read -r user; do
|
jq .inbounds[0].settings.clients ${configPath}06_VLESS_gRPC_inbounds.json | jq -c '.[]' | while read -r user; do
|
||||||
echoContent skyBlue "\n ---> 帐号:$(echo "${user}" | jq -r .email )_$(echo "${user}" | jq -r .id)"
|
echoContent skyBlue "\n ---> 帐号:$(echo "${user}" | jq -r .email )_$(echo "${user}" | jq -r .id)"
|
||||||
echo
|
echo
|
||||||
defaultBase64Code vlessgrpc $(echo "${user}" | jq .email) $(echo "${user}" | jq .id) "${currentHost}:${currentPort}" ${serviceName} ${currentAdd}
|
defaultBase64Code vlessgrpc $(echo "${user}" | jq -r .email) $(echo "${user}" | jq -r .id) "${currentHost}:${currentPort}" ${serviceName} ${currentAdd}
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# trojan tcp
|
# trojan tcp
|
||||||
if echo ${currentInstallProtocolType} | grep -q 4 || [[ -z "${currentInstallProtocolType}" ]]; then
|
if echo ${currentInstallProtocolType} | grep -q 4; then
|
||||||
echoContent skyBlue "\n================================== Trojan TLS ==================================\n"
|
echoContent skyBlue "\n================================== Trojan TLS ==================================\n"
|
||||||
jq .inbounds[0].settings.clients ${configPath}04_trojan_TCP_inbounds.json | jq -c '.[]' | while read -r user; do
|
jq .inbounds[0].settings.clients ${configPath}04_trojan_TCP_inbounds.json | jq -c '.[]' | while read -r user; do
|
||||||
echoContent skyBlue "\n ---> 帐号:$(echo "${user}" | jq -r .email )_$(echo "${user}" | jq -r .password)"
|
echoContent skyBlue "\n ---> 帐号:$(echo "${user}" | jq -r .email )_$(echo "${user}" | jq -r .password)"
|
||||||
|
@ -2583,41 +2797,15 @@ showAccounts() {
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if echo ${currentInstallProtocolType} | grep -q 2; then
|
||||||
# # trojan-go
|
echoContent skyBlue "\n================================ Trojan gRPC TLS ================================\n"
|
||||||
# if [[ -d "/etc/v2ray-agent/" ]] && [[ -d "/etc/v2ray-agent/trojan/" ]] && [[ -f "/etc/v2ray-agent/trojan/config_full.json" ]]; then
|
local serviceName=$(jq -r .inbounds[0].streamSettings.grpcSettings.serviceName ${configPath}04_trojan_gRPC_inbounds.json)
|
||||||
# show=1
|
jq .inbounds[0].settings.clients ${configPath}04_trojan_gRPC_inbounds.json | jq -c '.[]' | while read -r user; do
|
||||||
# # local trojanUUID=`cat /etc/v2ray-agent/trojan/config_full.json |jq .password[0]|awk -F '["]' '{print $2}'`
|
echoContent skyBlue "\n ---> 帐号:$(echo "${user}" | jq -r .email )_$(echo "${user}" | jq -r .password)"
|
||||||
# local trojanGoPath
|
echo
|
||||||
# trojanGoPath=$(jq -r .websocket.path /etc/v2ray-agent/trojan/config_full.json)
|
defaultBase64Code trojangrpc $(echo "${user}" | jq -r .email) $(echo "${user}" | jq -r .password) "${currentHost}:${currentPort}" ${serviceName} ${currentAdd}
|
||||||
# local trojanGoAdd
|
done
|
||||||
# trojanGoAdd=$(jq .websocket.add /etc/v2ray-agent/trojan/config_full.json | awk -F '["]' '{print $2}')
|
fi
|
||||||
# echoContent skyBlue "\n================================== Trojan TLS ==================================\n"
|
|
||||||
# # cat /etc/v2ray-agent/trojan/config_full.json | jq .password
|
|
||||||
# jq -r -c '.password[]' /etc/v2ray-agent/trojan/config_full.json | while read -r user; do
|
|
||||||
# trojanUUID=${user}
|
|
||||||
# if [[ -n "${trojanUUID}" ]]; then
|
|
||||||
# echoContent skyBlue " ---> 帐号:${currentHost}_trojan_${trojanUUID}\n"
|
|
||||||
# echo
|
|
||||||
# defaultBase64Code trojan trojan ${trojanUUID} ${currentHost}
|
|
||||||
# fi
|
|
||||||
# done
|
|
||||||
#
|
|
||||||
# echoContent skyBlue "\n================================ Trojan WS TLS ================================\n"
|
|
||||||
# if [[ -z ${trojanGoAdd} ]]; then
|
|
||||||
# trojanGoAdd=${currentHost}
|
|
||||||
# fi
|
|
||||||
#
|
|
||||||
# jq -r -c '.password[]' /etc/v2ray-agent/trojan/config_full.json | while read -r user; do
|
|
||||||
# trojanUUID=${user}
|
|
||||||
# if [[ -n "${trojanUUID}" ]]; then
|
|
||||||
# echoContent skyBlue " ---> 帐号:${trojanGoAdd}_trojan_ws_${trojanUUID}"
|
|
||||||
# echo
|
|
||||||
# defaultBase64Code trojangows trojan ${trojanUUID} ${currentHost} ${trojanGoPath} ${trojanGoAdd}
|
|
||||||
# fi
|
|
||||||
#
|
|
||||||
# done
|
|
||||||
# fi
|
|
||||||
|
|
||||||
if [[ -z ${show} ]]; then
|
if [[ -z ${show} ]]; then
|
||||||
echoContent red " ---> 未安装"
|
echoContent red " ---> 未安装"
|
||||||
|
@ -2785,9 +2973,9 @@ updateV2RayCDN() {
|
||||||
|
|
||||||
if [[ -n ${setDomain} ]]; then
|
if [[ -n ${setDomain} ]]; then
|
||||||
if [[ -n ${currentAdd} ]]; then
|
if [[ -n ${currentAdd} ]]; then
|
||||||
sed -i "s/\"${currentAdd}\"/\"${setDomain}\"/g" $(grep "${currentAdd}" -rl ${configPath}02_VLESS_TCP_inbounds.json)
|
sed -i "s/\"${currentAdd}\"/\"${setDomain}\"/g" $(grep "${currentAdd}" -rl ${configPath}${frontingType}.json)
|
||||||
fi
|
fi
|
||||||
if [[ $(jq -r .inbounds[0].settings.clients[0].add ${configPath}02_VLESS_TCP_inbounds.json) == ${setDomain} ]]; then
|
if [[ $(jq -r .inbounds[0].settings.clients[0].add ${configPath}${frontingType}.json) == ${setDomain} ]]; then
|
||||||
echoContent green " ---> CDN修改成功"
|
echoContent green " ---> CDN修改成功"
|
||||||
reloadCore
|
reloadCore
|
||||||
else
|
else
|
||||||
|
@ -2843,7 +3031,7 @@ customUUID() {
|
||||||
echoContent red " ---> UUID不可为空"
|
echoContent red " ---> UUID不可为空"
|
||||||
else
|
else
|
||||||
local repeat=
|
local repeat=
|
||||||
jq -r -c '.inbounds[0].settings.clients[].id' ${configPath}02_VLESS_TCP_inbounds.json | while read -r line; do
|
jq -r -c '.inbounds[0].settings.clients[].id' ${configPath}${frontingType}.json | while read -r line; do
|
||||||
if [[ "${line}" == "${currentCustomUUID}" ]]; then
|
if [[ "${line}" == "${currentCustomUUID}" ]]; then
|
||||||
echo repeat >/tmp/v2ray-agent
|
echo repeat >/tmp/v2ray-agent
|
||||||
fi
|
fi
|
||||||
|
@ -2868,7 +3056,7 @@ customUserEmail() {
|
||||||
echoContent red " ---> email不可为空"
|
echoContent red " ---> email不可为空"
|
||||||
else
|
else
|
||||||
local repeat=
|
local repeat=
|
||||||
jq -r -c '.inbounds[0].settings.clients[].email' ${configPath}02_VLESS_TCP_inbounds.json | while read -r line; do
|
jq -r -c '.inbounds[0].settings.clients[].email' ${configPath}${frontingType}.json | while read -r line; do
|
||||||
if [[ "${line}" == "${currentCustomEmail}" ]]; then
|
if [[ "${line}" == "${currentCustomEmail}" ]]; then
|
||||||
echo repeat >/tmp/v2ray-agent
|
echo repeat >/tmp/v2ray-agent
|
||||||
fi
|
fi
|
||||||
|
@ -2937,12 +3125,21 @@ addUser() {
|
||||||
users="${users//\"flow\":\"xtls-rprx-direct\"\,/}"
|
users="${users//\"flow\":\"xtls-rprx-direct\"\,/}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ -n $(echo ${currentInstallProtocolType} | grep 0) ]]; then
|
if echo ${currentInstallProtocolType} | grep -q 0; then
|
||||||
local vlessUsers="${users//\,\"alterId\":0/}"
|
local vlessUsers="${users//\,\"alterId\":0/}"
|
||||||
|
|
||||||
local vlessTcpResult
|
local vlessTcpResult
|
||||||
vlessTcpResult=$(jq -r '.inbounds[0].settings.clients += ['${vlessUsers}']' ${configPath}02_VLESS_TCP_inbounds.json)
|
vlessTcpResult=$(jq -r '.inbounds[0].settings.clients += ['${vlessUsers}']' ${configPath}${frontingType}.json)
|
||||||
echo "${vlessTcpResult}" | jq . >${configPath}02_VLESS_TCP_inbounds.json
|
echo "${vlessTcpResult}" | jq . >${configPath}${frontingType}.json
|
||||||
|
fi
|
||||||
|
|
||||||
|
if echo ${currentInstallProtocolType} | grep -q trojan; then
|
||||||
|
local trojanXTLSUsers="${users//\,\"alterId\":0/}"
|
||||||
|
trojanXTLSUsers=${trojanXTLSUsers//"id"/"password"}
|
||||||
|
echo trojanXTLSUsers:${trojanXTLSUsers}
|
||||||
|
local trojanXTLSResult
|
||||||
|
trojanXTLSResult=$(jq -r '.inbounds[0].settings.clients += ['${trojanXTLSUsers}']' ${configPath}${frontingType}.json)
|
||||||
|
echo "${trojanXTLSResult}" | jq . >${configPath}${frontingType}.json
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# users="${users//"flow":"xtls-rprx-direct",/"alterId":1,}"
|
# users="${users//"flow":"xtls-rprx-direct",/"alterId":1,}"
|
||||||
|
@ -2956,11 +3153,13 @@ addUser() {
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if echo ${currentInstallProtocolType} | grep -q 2; then
|
if echo ${currentInstallProtocolType} | grep -q 2; then
|
||||||
local vmessUsers="${users//\"flow\":\"xtls-rprx-direct\"\,/}"
|
local trojangRPCUsers="${users//\"flow\":\"xtls-rprx-direct\"\,/}"
|
||||||
|
trojangRPCUsers="${trojangRPCUsers//\,\"alterId\":0/}"
|
||||||
local vmessTcpResult
|
trojangRPCUsers=${trojangRPCUsers//"id"/"password"}
|
||||||
vmessTcpResult=$(jq -r '.inbounds[0].settings.clients += ['${vmessUsers}']' ${configPath}04_VMess_TCP_inbounds.json)
|
echo trojangRPCUsers:${trojangRPCUsers}
|
||||||
echo "${vmessTcpResult}" | jq . >${configPath}04_VMess_TCP_inbounds.json
|
local trojangRPCResult
|
||||||
|
trojangRPCResult=$(jq -r '.inbounds[0].settings.clients += ['${trojangRPCUsers}']' ${configPath}04_trojan_gRPC_inbounds.json)
|
||||||
|
echo "${trojangRPCResult}" | jq . >${configPath}04_trojan_gRPC_inbounds.json
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if echo ${currentInstallProtocolType} | grep -q 3; then
|
if echo ${currentInstallProtocolType} | grep -q 3; then
|
||||||
|
@ -3007,16 +3206,16 @@ addUser() {
|
||||||
# 移除用户
|
# 移除用户
|
||||||
removeUser() {
|
removeUser() {
|
||||||
|
|
||||||
if echo ${currentInstallProtocolType} | grep -q 0; then
|
if echo ${currentInstallProtocolType} | grep -q 0 || echo ${currentInstallProtocolType} | grep -q trojan ; then
|
||||||
jq -r -c .inbounds[0].settings.clients[].email ${configPath}02_VLESS_TCP_inbounds.json | awk '{print NR""":"$0}'
|
jq -r -c .inbounds[0].settings.clients[].email ${configPath}${frontingType}.json | awk '{print NR""":"$0}'
|
||||||
read -r -p "请选择要删除的用户编号[仅支持单个删除]:" delUserIndex
|
read -r -p "请选择要删除的用户编号[仅支持单个删除]:" delUserIndex
|
||||||
if [[ $(jq -r '.inbounds[0].settings.clients|length' ${configPath}02_VLESS_TCP_inbounds.json) -lt ${delUserIndex} ]]; then
|
if [[ $(jq -r '.inbounds[0].settings.clients|length' ${configPath}${frontingType}.json) -lt ${delUserIndex} ]]; then
|
||||||
echoContent red " ---> 选择错误"
|
echoContent red " ---> 选择错误"
|
||||||
else
|
else
|
||||||
delUserIndex=$((${delUserIndex} - 1))
|
delUserIndex=$((${delUserIndex} - 1))
|
||||||
local vlessTcpResult
|
local vlessTcpResult
|
||||||
vlessTcpResult=$(jq -r 'del(.inbounds[0].settings.clients['${delUserIndex}'])' ${configPath}02_VLESS_TCP_inbounds.json)
|
vlessTcpResult=$(jq -r 'del(.inbounds[0].settings.clients['${delUserIndex}'])' ${configPath}${frontingType}.json)
|
||||||
echo "${vlessTcpResult}" | jq . >${configPath}02_VLESS_TCP_inbounds.json
|
echo "${vlessTcpResult}" | jq . >${configPath}${frontingType}.json
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
if [[ -n "${delUserIndex}" ]]; then
|
if [[ -n "${delUserIndex}" ]]; then
|
||||||
|
@ -3027,9 +3226,9 @@ removeUser() {
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if echo ${currentInstallProtocolType} | grep -q 2; then
|
if echo ${currentInstallProtocolType} | grep -q 2; then
|
||||||
local vmessTCPResult
|
local trojangRPCUsers
|
||||||
vmessTCPResult=$(jq -r 'del(.inbounds[0].settings.clients['${delUserIndex}'])' ${configPath}04_VMess_TCP_inbounds.json)
|
trojangRPCUsers=$(jq -r 'del(.inbounds[0].settings.clients['${delUserIndex}'])' ${configPath}04_trojan_gRPC_inbounds.json)
|
||||||
echo "${vmessTCPResult}" | jq . >${configPath}04_VMess_TCP_inbounds.json
|
echo "${trojangRPCUsers}" | jq . >${configPath}04_trojan_gRPC_inbounds.json
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if echo ${currentInstallProtocolType} | grep -q 3; then
|
if echo ${currentInstallProtocolType} | grep -q 3; then
|
||||||
|
@ -3049,13 +3248,7 @@ removeUser() {
|
||||||
trojanTCPResult=$(jq -r 'del(.inbounds[0].settings.clients['${delUserIndex}'])' ${configPath}04_trojan_TCP_inbounds.json)
|
trojanTCPResult=$(jq -r 'del(.inbounds[0].settings.clients['${delUserIndex}'])' ${configPath}04_trojan_TCP_inbounds.json)
|
||||||
echo "${trojanTCPResult}" | jq . >${configPath}04_trojan_TCP_inbounds.json
|
echo "${trojanTCPResult}" | jq . >${configPath}04_trojan_TCP_inbounds.json
|
||||||
fi
|
fi
|
||||||
# if echo ${currentInstallProtocolType} | grep -q 4; then
|
|
||||||
# local trojanResult
|
|
||||||
# trojanResult=$(jq -r 'del(.password['${delUserIndex}'])' ${configPath}../../trojan/config_full.json)
|
|
||||||
# echo "${trojanResult}" | jq . >${configPath}../../trojan/config_full.json
|
|
||||||
# handleTrojanGo stop
|
|
||||||
# handleTrojanGo start
|
|
||||||
# fi
|
|
||||||
reloadCore
|
reloadCore
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
@ -3817,7 +4010,7 @@ customXrayInstall() {
|
||||||
echoContent yellow "VLESS前置,默认安装0,如果只需要安装0,则只选择0即可"
|
echoContent yellow "VLESS前置,默认安装0,如果只需要安装0,则只选择0即可"
|
||||||
echoContent yellow "0.VLESS+TLS/XTLS+TCP"
|
echoContent yellow "0.VLESS+TLS/XTLS+TCP"
|
||||||
echoContent yellow "1.VLESS+TLS+WS[CDN]"
|
echoContent yellow "1.VLESS+TLS+WS[CDN]"
|
||||||
# echoContent yellow "2.VMess+TLS+TCP"
|
echoContent yellow "2.Trojan+TLS+gRPC[CDN]"
|
||||||
echoContent yellow "3.VMess+TLS+WS[CDN]"
|
echoContent yellow "3.VMess+TLS+WS[CDN]"
|
||||||
# echoContent yellow "4.Trojan、Trojan+WS[CDN]"
|
# echoContent yellow "4.Trojan、Trojan+WS[CDN]"
|
||||||
echoContent yellow "4.Trojan"
|
echoContent yellow "4.Trojan"
|
||||||
|
@ -3837,7 +4030,7 @@ customXrayInstall() {
|
||||||
handleNginx stop
|
handleNginx stop
|
||||||
initNginxConfig 4
|
initNginxConfig 4
|
||||||
# 随机path
|
# 随机path
|
||||||
if echo "${selectCustomInstallType}" | grep -q 1 || echo "${selectCustomInstallType}" | grep -q 3 || echo "${selectCustomInstallType}" | grep -q 4 || echo "${selectCustomInstallType}" | grep -q 5; then
|
if echo "${selectCustomInstallType}" | grep -q 1 || echo "${selectCustomInstallType}" | grep -q 2 || echo "${selectCustomInstallType}" | grep -q 3 || echo "${selectCustomInstallType}" | grep -q 5; then
|
||||||
randomPathFunction 5
|
randomPathFunction 5
|
||||||
customCDNIP 6
|
customCDNIP 6
|
||||||
fi
|
fi
|
||||||
|
@ -4074,7 +4267,7 @@ menu() {
|
||||||
cd "$HOME" || exit
|
cd "$HOME" || exit
|
||||||
echoContent red "\n=============================================================="
|
echoContent red "\n=============================================================="
|
||||||
echoContent green "作者:mack-a"
|
echoContent green "作者:mack-a"
|
||||||
echoContent green "当前版本:v2.5.13"
|
echoContent green "当前版本:v2.5.14"
|
||||||
echoContent green "Github:https://github.com/mack-a/v2ray-agent"
|
echoContent green "Github:https://github.com/mack-a/v2ray-agent"
|
||||||
echoContent green "描述:八合一共存脚本\c"
|
echoContent green "描述:八合一共存脚本\c"
|
||||||
showInstallStatus
|
showInstallStatus
|
||||||
|
@ -4086,23 +4279,28 @@ menu() {
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echoContent yellow "2.任意组合安装"
|
echoContent yellow "2.任意组合安装"
|
||||||
|
if echo ${currentInstallProtocolType} | grep -q trojan; then
|
||||||
|
echoContent yellow "3.切换VLESS[XTLS]"
|
||||||
|
elif echo ${currentInstallProtocolType} | grep -q 0;then
|
||||||
|
echoContent yellow "3.切换Trojan[XTLS]"
|
||||||
|
fi
|
||||||
echoContent skyBlue "-------------------------工具管理-----------------------------"
|
echoContent skyBlue "-------------------------工具管理-----------------------------"
|
||||||
echoContent yellow "3.账号管理"
|
echoContent yellow "4.账号管理"
|
||||||
echoContent yellow "4.更换伪装站"
|
echoContent yellow "5.更换伪装站"
|
||||||
echoContent yellow "5.更新证书"
|
echoContent yellow "6.更新证书"
|
||||||
echoContent yellow "6.更换CDN节点"
|
echoContent yellow "7.更换CDN节点"
|
||||||
echoContent yellow "7.IPv6分流"
|
echoContent yellow "8.IPv6分流"
|
||||||
echoContent yellow "8.WARP分流"
|
echoContent yellow "9.WARP分流"
|
||||||
echoContent yellow "9.流媒体工具"
|
echoContent yellow "10.流媒体工具"
|
||||||
echoContent yellow "10.添加新端口"
|
echoContent yellow "11.添加新端口"
|
||||||
echoContent skyBlue "-------------------------版本管理-----------------------------"
|
echoContent skyBlue "-------------------------版本管理-----------------------------"
|
||||||
echoContent yellow "11.core管理"
|
echoContent yellow "12.core管理"
|
||||||
# echoContent yellow "12.更新Trojan-Go"
|
# echoContent yellow "12.更新Trojan-Go"
|
||||||
echoContent yellow "12.更新脚本"
|
echoContent yellow "13.更新脚本"
|
||||||
echoContent yellow "13.安装BBR、DD脚本"
|
echoContent yellow "14.安装BBR、DD脚本"
|
||||||
echoContent skyBlue "-------------------------脚本管理-----------------------------"
|
echoContent skyBlue "-------------------------脚本管理-----------------------------"
|
||||||
echoContent yellow "14.查看日志"
|
echoContent yellow "15.查看日志"
|
||||||
echoContent yellow "15.卸载脚本"
|
echoContent yellow "16.卸载脚本"
|
||||||
echoContent red "=============================================================="
|
echoContent red "=============================================================="
|
||||||
mkdirTools
|
mkdirTools
|
||||||
aliasInstall
|
aliasInstall
|
||||||
|
@ -4115,45 +4313,48 @@ menu() {
|
||||||
selectCoreInstall
|
selectCoreInstall
|
||||||
;;
|
;;
|
||||||
3)
|
3)
|
||||||
manageAccount 1
|
initXrayFrontingConfig 1
|
||||||
;;
|
;;
|
||||||
4)
|
4)
|
||||||
updateNginxBlog 1
|
manageAccount 1
|
||||||
;;
|
;;
|
||||||
5)
|
5)
|
||||||
renewalTLS 1
|
updateNginxBlog 1
|
||||||
;;
|
;;
|
||||||
6)
|
6)
|
||||||
updateV2RayCDN 1
|
renewalTLS 1
|
||||||
;;
|
;;
|
||||||
7)
|
7)
|
||||||
ipv6Routing 1
|
updateV2RayCDN 1
|
||||||
;;
|
;;
|
||||||
8)
|
8)
|
||||||
warpRouting 1
|
ipv6Routing 1
|
||||||
;;
|
;;
|
||||||
9)
|
9)
|
||||||
streamingToolbox 1
|
warpRouting 1
|
||||||
;;
|
;;
|
||||||
10)
|
10)
|
||||||
addCorePort 1
|
streamingToolbox 1
|
||||||
;;
|
;;
|
||||||
11)
|
11)
|
||||||
|
addCorePort 1
|
||||||
|
;;
|
||||||
|
12)
|
||||||
coreVersionManageMenu 1
|
coreVersionManageMenu 1
|
||||||
;;
|
;;
|
||||||
# 12)
|
# 12)
|
||||||
# updateTrojanGo 1
|
# updateTrojanGo 1
|
||||||
# ;;
|
# ;;
|
||||||
12)
|
13)
|
||||||
updateV2RayAgent 1
|
updateV2RayAgent 1
|
||||||
;;
|
;;
|
||||||
13)
|
14)
|
||||||
bbrInstall
|
bbrInstall
|
||||||
;;
|
;;
|
||||||
14)
|
15)
|
||||||
checkLog 1
|
checkLog 1
|
||||||
;;
|
;;
|
||||||
15)
|
16)
|
||||||
unInstall 1
|
unInstall 1
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
Loading…
Reference in New Issue