feat(脚本): 添加嗅探、添加可以批量加入CDN IP或者域名、修复申请TLS证书失败问题、修改宝塔端口检测逻辑
parent
40ea4a1f79
commit
6f8434aec8
140
install.sh
140
install.sh
|
@ -565,7 +565,8 @@ readConfigHostPathUUID() {
|
||||||
# 安装
|
# 安装
|
||||||
if [[ -n "${frontingType}" ]]; then
|
if [[ -n "${frontingType}" ]]; then
|
||||||
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}')
|
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}')
|
||||||
currentAdd=$(jq -r .inbounds[0].settings.clients[0].add ${configPath}${frontingType}.json)
|
currentAdd=$(jq -r .inbounds[0].add ${configPath}${frontingType}.json)
|
||||||
|
|
||||||
if [[ "${currentAdd}" == "null" ]]; then
|
if [[ "${currentAdd}" == "null" ]]; then
|
||||||
currentAdd=${currentHost}
|
currentAdd=${currentHost}
|
||||||
fi
|
fi
|
||||||
|
@ -875,8 +876,8 @@ installTools() {
|
||||||
echoContent yellow "错误排查:"
|
echoContent yellow "错误排查:"
|
||||||
echoContent red " 1.获取Github文件失败,请等待Github恢复后尝试,恢复进度可查看 [https://www.githubstatus.com/]"
|
echoContent red " 1.获取Github文件失败,请等待Github恢复后尝试,恢复进度可查看 [https://www.githubstatus.com/]"
|
||||||
echoContent red " 2.acme.sh脚本出现bug,可查看[https://github.com/acmesh-official/acme.sh] issues"
|
echoContent red " 2.acme.sh脚本出现bug,可查看[https://github.com/acmesh-official/acme.sh] issues"
|
||||||
echoContent red " 3.如纯IPv6机器,请设置NAT64,可执行下方命令"
|
echoContent red " 3.如纯IPv6机器,请设置NAT64,可执行下方命令,如果添加下方命令还是不可用,请尝试更换其他NAT64"
|
||||||
echoContent skyBlue " echo -e \"nameserver 2001:67c:2b0::4\\\nnameserver 2001:67c:2b0::6\" >> /etc/resolv.conf"
|
echoContent skyBlue " echo -e \"nameserver 2001:67c:2b0::4\\\nnameserver 2a00:1098:2c::1\" >> /etc/resolv.conf"
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
@ -981,7 +982,6 @@ checkPortOpen() {
|
||||||
local port=$1
|
local port=$1
|
||||||
local domain=$2
|
local domain=$2
|
||||||
local checkPortOpenResult=
|
local checkPortOpenResult=
|
||||||
local ip=
|
|
||||||
|
|
||||||
allowPort "${port}"
|
allowPort "${port}"
|
||||||
|
|
||||||
|
@ -1009,7 +1009,7 @@ EOF
|
||||||
|
|
||||||
# 检查域名+端口的开放
|
# 检查域名+端口的开放
|
||||||
checkPortOpenResult=$(curl -s -m 2 "http://${domain}:${port}/checkPort")
|
checkPortOpenResult=$(curl -s -m 2 "http://${domain}:${port}/checkPort")
|
||||||
ip=$(curl -s -m 2 "http://${domain}:${port}/ip")
|
localIP=$(curl -s -m 2 "http://${domain}:${port}/ip")
|
||||||
|
|
||||||
rm "${nginxConfigPath}checkPortOpen.conf"
|
rm "${nginxConfigPath}checkPortOpen.conf"
|
||||||
handleNginx stop
|
handleNginx stop
|
||||||
|
@ -1019,7 +1019,7 @@ EOF
|
||||||
echoContent green " ---> 未检测到${port}端口开放,退出安装"
|
echoContent green " ---> 未检测到${port}端口开放,退出安装"
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
checkIP "${ip}"
|
checkIP "${localIP}"
|
||||||
}
|
}
|
||||||
|
|
||||||
# 初始化Nginx申请证书配置
|
# 初始化Nginx申请证书配置
|
||||||
|
@ -1305,6 +1305,7 @@ switchSSLType() {
|
||||||
# 选择acme安装证书方式
|
# 选择acme安装证书方式
|
||||||
selectAcmeInstallSSL() {
|
selectAcmeInstallSSL() {
|
||||||
local installSSLIPv6=
|
local installSSLIPv6=
|
||||||
|
|
||||||
if echo "${localIP}" | grep -q ":"; then
|
if echo "${localIP}" | grep -q ":"; then
|
||||||
installSSLIPv6="--listen-v6"
|
installSSLIPv6="--listen-v6"
|
||||||
fi
|
fi
|
||||||
|
@ -1372,12 +1373,8 @@ acmeInstallSSL() {
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
echoContent green " ---> 生成证书中"
|
echoContent green " ---> 生成证书中"
|
||||||
|
sudo "$HOME/.acme.sh/acme.sh" --issue -d "${tlsDomain}" --standalone -k ec-256 --server "${sslType}" ${installSSLIPv6} 2>&1 | tee -a /etc/v2ray-agent/tls/acme.log >/dev/null
|
||||||
sudo "$HOME/.acme.sh/acme.sh" --issue -d "${tlsDomain}" --standalone -k ec-256 --server "${sslType}" --tlsport "${port}" ${installSSLIPv6} 2>&1 | tee -a /etc/v2ray-agent/tls/acme.log >/dev/null
|
|
||||||
sed -i '/Le_HTTPPort/d' "$HOME/.acme.sh/account.conf"
|
|
||||||
echo "Le_HTTPPort=${port}" >>"$HOME/.acme.sh/account.conf"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
}
|
}
|
||||||
# 自定义端口
|
# 自定义端口
|
||||||
customPortFunction() {
|
customPortFunction() {
|
||||||
|
@ -1417,7 +1414,9 @@ customPortFunction() {
|
||||||
if ((port >= 1 && port <= 65535)); then
|
if ((port >= 1 && port <= 65535)); then
|
||||||
allowPort "${port}"
|
allowPort "${port}"
|
||||||
echoContent yellow "\n ---> 端口: ${port}"
|
echoContent yellow "\n ---> 端口: ${port}"
|
||||||
|
if [[ -z "${btDomain}" ]]; then
|
||||||
checkPortOpen "${port}" "${domain}"
|
checkPortOpen "${port}" "${domain}"
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
echoContent red " ---> 端口输入错误"
|
echoContent red " ---> 端口输入错误"
|
||||||
exit 0
|
exit 0
|
||||||
|
@ -1461,8 +1460,8 @@ installTLS() {
|
||||||
fi
|
fi
|
||||||
|
|
||||||
elif [[ -d "$HOME/.acme.sh" ]] && [[ ! -f "$HOME/.acme.sh/${tlsDomain}_ecc/${tlsDomain}.cer" || ! -f "$HOME/.acme.sh/${tlsDomain}_ecc/${tlsDomain}.key" ]]; then
|
elif [[ -d "$HOME/.acme.sh" ]] && [[ ! -f "$HOME/.acme.sh/${tlsDomain}_ecc/${tlsDomain}.cer" || ! -f "$HOME/.acme.sh/${tlsDomain}_ecc/${tlsDomain}.key" ]]; then
|
||||||
echoContent green " ---> 安装TLS证书"
|
echoContent green " ---> 安装TLS证书,需要依赖80端口"
|
||||||
|
allowPort 80
|
||||||
if [[ "${installDNSACMEStatus}" != "true" ]]; then
|
if [[ "${installDNSACMEStatus}" != "true" ]]; then
|
||||||
switchSSLType
|
switchSSLType
|
||||||
customSSLEmail
|
customSSLEmail
|
||||||
|
@ -2340,13 +2339,7 @@ initXrayClients() {
|
||||||
email=$(echo "${user}" | jq -r .email | awk -F "[-]" '{print $1}')
|
email=$(echo "${user}" | jq -r .email | awk -F "[-]" '{print $1}')
|
||||||
currentUser=
|
currentUser=
|
||||||
if echo "${type}" | grep -q "0"; then
|
if echo "${type}" | grep -q "0"; then
|
||||||
add=$(echo "${user}" | jq -r .add)
|
|
||||||
if [[ "${add}" != 'null' ]]; then
|
|
||||||
currentUser="{\"id\":\"${uuid}\",\"flow\":\"xtls-rprx-vision\",\"email\":\"${email}-VLESS_TCP/TLS_Vision\",\"add\":\"${add}\"}"
|
|
||||||
else
|
|
||||||
currentUser="{\"id\":\"${uuid}\",\"flow\":\"xtls-rprx-vision\",\"email\":\"${email}-VLESS_TCP/TLS_Vision\"}"
|
currentUser="{\"id\":\"${uuid}\",\"flow\":\"xtls-rprx-vision\",\"email\":\"${email}-VLESS_TCP/TLS_Vision\"}"
|
||||||
fi
|
|
||||||
|
|
||||||
users=$(echo "${users}" | jq -r ". +=[${currentUser}]")
|
users=$(echo "${users}" | jq -r ". +=[${currentUser}]")
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -3442,6 +3435,7 @@ EOF
|
||||||
${fallbacksList}
|
${fallbacksList}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"add": "${add}",
|
||||||
"streamSettings": {
|
"streamSettings": {
|
||||||
"network": "tcp",
|
"network": "tcp",
|
||||||
"security": "tls",
|
"security": "tls",
|
||||||
|
@ -3548,6 +3542,7 @@ EOF
|
||||||
rm /etc/v2ray-agent/xray/conf/07_VLESS_vision_reality_inbounds.json >/dev/null 2>&1
|
rm /etc/v2ray-agent/xray/conf/07_VLESS_vision_reality_inbounds.json >/dev/null 2>&1
|
||||||
rm /etc/v2ray-agent/xray/conf/08_VLESS_reality_fallback_grpc_inbounds.json >/dev/null 2>&1
|
rm /etc/v2ray-agent/xray/conf/08_VLESS_reality_fallback_grpc_inbounds.json >/dev/null 2>&1
|
||||||
fi
|
fi
|
||||||
|
installSniffing
|
||||||
}
|
}
|
||||||
# 初始化Xray Reality配置
|
# 初始化Xray Reality配置
|
||||||
# 自定义CDN IP
|
# 自定义CDN IP
|
||||||
|
@ -3585,6 +3580,7 @@ defaultBase64Code() {
|
||||||
local type=$1
|
local type=$1
|
||||||
local email=$2
|
local email=$2
|
||||||
local id=$3
|
local id=$3
|
||||||
|
local add=$4
|
||||||
local user=
|
local user=
|
||||||
user=$(echo "${email}" | awk -F "[-]" '{print $1}')
|
user=$(echo "${email}" | awk -F "[-]" '{print $1}')
|
||||||
port=${currentDefaultPort}
|
port=${currentDefaultPort}
|
||||||
|
@ -3641,11 +3637,11 @@ EOF
|
||||||
echoContent green " https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=trojan%3A%2F%2F${id}%40${currentHost}%3A${currentDefaultPort}%3Fencryption%3Dnone%26security%3Dxtls%26type%3Dtcp%26${currentHost}%3D${currentHost}%26headerType%3Dnone%26sni%3D${currentHost}%26flow%3Dxtls-rprx-vision%23${email}\n"
|
echoContent green " https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=trojan%3A%2F%2F${id}%40${currentHost}%3A${currentDefaultPort}%3Fencryption%3Dnone%26security%3Dxtls%26type%3Dtcp%26${currentHost}%3D${currentHost}%26headerType%3Dnone%26sni%3D${currentHost}%26flow%3Dxtls-rprx-vision%23${email}\n"
|
||||||
|
|
||||||
elif [[ "${type}" == "vmessws" ]]; then
|
elif [[ "${type}" == "vmessws" ]]; then
|
||||||
qrCodeBase64Default=$(echo -n "{\"port\":${currentDefaultPort},\"ps\":\"${email}\",\"tls\":\"tls\",\"id\":\"${id}\",\"aid\":0,\"v\":2,\"host\":\"${currentHost}\",\"type\":\"none\",\"path\":\"/${currentPath}vws\",\"net\":\"ws\",\"add\":\"${currentAdd}\",\"allowInsecure\":0,\"method\":\"none\",\"peer\":\"${currentHost}\",\"sni\":\"${currentHost}\"}" | base64 -w 0)
|
qrCodeBase64Default=$(echo -n "{\"port\":${currentDefaultPort},\"ps\":\"${email}\",\"tls\":\"tls\",\"id\":\"${id}\",\"aid\":0,\"v\":2,\"host\":\"${currentHost}\",\"type\":\"none\",\"path\":\"/${currentPath}vws\",\"net\":\"ws\",\"add\":\"${add}\",\"allowInsecure\":0,\"method\":\"none\",\"peer\":\"${currentHost}\",\"sni\":\"${currentHost}\"}" | base64 -w 0)
|
||||||
qrCodeBase64Default="${qrCodeBase64Default// /}"
|
qrCodeBase64Default="${qrCodeBase64Default// /}"
|
||||||
|
|
||||||
echoContent yellow " ---> 通用json(VMess+WS+TLS)"
|
echoContent yellow " ---> 通用json(VMess+WS+TLS)"
|
||||||
echoContent green " {\"port\":${currentDefaultPort},\"ps\":\"${email}\",\"tls\":\"tls\",\"id\":\"${id}\",\"aid\":0,\"v\":2,\"host\":\"${currentHost}\",\"type\":\"none\",\"path\":\"/${currentPath}vws\",\"net\":\"ws\",\"add\":\"${currentAdd}\",\"allowInsecure\":0,\"method\":\"none\",\"peer\":\"${currentHost}\",\"sni\":\"${currentHost}\"}\n"
|
echoContent green " {\"port\":${currentDefaultPort},\"ps\":\"${email}\",\"tls\":\"tls\",\"id\":\"${id}\",\"aid\":0,\"v\":2,\"host\":\"${currentHost}\",\"type\":\"none\",\"path\":\"/${currentPath}vws\",\"net\":\"ws\",\"add\":\"${add}\",\"allowInsecure\":0,\"method\":\"none\",\"peer\":\"${currentHost}\",\"sni\":\"${currentHost}\"}\n"
|
||||||
echoContent yellow " ---> 通用vmess(VMess+WS+TLS)链接"
|
echoContent yellow " ---> 通用vmess(VMess+WS+TLS)链接"
|
||||||
echoContent green " vmess://${qrCodeBase64Default}\n"
|
echoContent green " vmess://${qrCodeBase64Default}\n"
|
||||||
echoContent yellow " ---> 二维码 vmess(VMess+WS+TLS)"
|
echoContent yellow " ---> 二维码 vmess(VMess+WS+TLS)"
|
||||||
|
@ -3656,7 +3652,7 @@ EOF
|
||||||
cat <<EOF >>"/etc/v2ray-agent/subscribe_local/clashMeta/${user}"
|
cat <<EOF >>"/etc/v2ray-agent/subscribe_local/clashMeta/${user}"
|
||||||
- name: "${email}"
|
- name: "${email}"
|
||||||
type: vmess
|
type: vmess
|
||||||
server: ${currentHost}
|
server: ${add}
|
||||||
port: ${currentDefaultPort}
|
port: ${currentDefaultPort}
|
||||||
uuid: ${id}
|
uuid: ${id}
|
||||||
alterId: 0
|
alterId: 0
|
||||||
|
@ -3664,7 +3660,7 @@ EOF
|
||||||
udp: true
|
udp: true
|
||||||
tls: true
|
tls: true
|
||||||
client-fingerprint: chrome
|
client-fingerprint: chrome
|
||||||
servername: ${currentAdd}
|
servername: ${currentHost}
|
||||||
network: ws
|
network: ws
|
||||||
ws-opts:
|
ws-opts:
|
||||||
path: /${currentPath}vws
|
path: /${currentPath}vws
|
||||||
|
@ -3676,18 +3672,18 @@ EOF
|
||||||
elif [[ "${type}" == "vlessws" ]]; then
|
elif [[ "${type}" == "vlessws" ]]; then
|
||||||
|
|
||||||
echoContent yellow " ---> 通用格式(VLESS+WS+TLS)"
|
echoContent yellow " ---> 通用格式(VLESS+WS+TLS)"
|
||||||
echoContent green " vless://${id}@${currentAdd}:${currentDefaultPort}?encryption=none&security=tls&type=ws&host=${currentHost}&sni=${currentHost}&fp=chrome&path=/${currentPath}ws#${email}\n"
|
echoContent green " vless://${id}@${add}:${currentDefaultPort}?encryption=none&security=tls&type=ws&host=${currentHost}&sni=${currentHost}&fp=chrome&path=/${currentPath}ws#${email}\n"
|
||||||
|
|
||||||
echoContent yellow " ---> 格式化明文(VLESS+WS+TLS)"
|
echoContent yellow " ---> 格式化明文(VLESS+WS+TLS)"
|
||||||
echoContent green " 协议类型:VLESS,地址:${currentAdd},伪装域名/SNI:${currentHost},端口:${currentDefaultPort},client-fingerprint: chrome,用户ID:${id},安全:tls,传输方式:ws,路径:/${currentPath}ws,账户名:${email}\n"
|
echoContent green " 协议类型:VLESS,地址:${add},伪装域名/SNI:${currentHost},端口:${currentDefaultPort},client-fingerprint: chrome,用户ID:${id},安全:tls,传输方式:ws,路径:/${currentPath}ws,账户名:${email}\n"
|
||||||
|
|
||||||
cat <<EOF >>"/etc/v2ray-agent/subscribe_local/default/${user}"
|
cat <<EOF >>"/etc/v2ray-agent/subscribe_local/default/${user}"
|
||||||
vless://${id}@${currentAdd}:${currentDefaultPort}?encryption=none&security=tls&type=ws&host=${currentHost}&sni=${currentHost}&fp=chrome&path=/${currentPath}ws#${email}
|
vless://${id}@${add}:${currentDefaultPort}?encryption=none&security=tls&type=ws&host=${currentHost}&sni=${currentHost}&fp=chrome&path=/${currentPath}ws#${email}
|
||||||
EOF
|
EOF
|
||||||
cat <<EOF >>"/etc/v2ray-agent/subscribe_local/clashMeta/${user}"
|
cat <<EOF >>"/etc/v2ray-agent/subscribe_local/clashMeta/${user}"
|
||||||
- name: "${email}"
|
- name: "${email}"
|
||||||
type: vless
|
type: vless
|
||||||
server: ${currentAdd}
|
server: ${add}
|
||||||
port: ${currentDefaultPort}
|
port: ${currentDefaultPort}
|
||||||
uuid: ${id}
|
uuid: ${id}
|
||||||
udp: true
|
udp: true
|
||||||
|
@ -3702,21 +3698,21 @@ EOF
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
echoContent yellow " ---> 二维码 VLESS(VLESS+WS+TLS)"
|
echoContent yellow " ---> 二维码 VLESS(VLESS+WS+TLS)"
|
||||||
echoContent green " https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=vless%3A%2F%2F${id}%40${currentAdd}%3A${currentDefaultPort}%3Fencryption%3Dnone%26security%3Dtls%26type%3Dws%26host%3D${currentHost}%26fp%3Dchrome%26sni%3D${currentHost}%26path%3D%252f${currentPath}ws%23${email}"
|
echoContent green " https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=vless%3A%2F%2F${id}%40${add}%3A${currentDefaultPort}%3Fencryption%3Dnone%26security%3Dtls%26type%3Dws%26host%3D${currentHost}%26fp%3Dchrome%26sni%3D${currentHost}%26path%3D%252f${currentPath}ws%23${email}"
|
||||||
|
|
||||||
elif [[ "${type}" == "vlessgrpc" ]]; then
|
elif [[ "${type}" == "vlessgrpc" ]]; then
|
||||||
|
|
||||||
echoContent yellow " ---> 通用格式(VLESS+gRPC+TLS)"
|
echoContent yellow " ---> 通用格式(VLESS+gRPC+TLS)"
|
||||||
echoContent green " vless://${id}@${currentAdd}:${currentDefaultPort}?encryption=none&security=tls&type=grpc&host=${currentHost}&path=${currentPath}grpc&fp=chrome&serviceName=${currentPath}grpc&alpn=h2&sni=${currentHost}#${email}\n"
|
echoContent green " vless://${id}@${add}:${currentDefaultPort}?encryption=none&security=tls&type=grpc&host=${currentHost}&path=${currentPath}grpc&fp=chrome&serviceName=${currentPath}grpc&alpn=h2&sni=${currentHost}#${email}\n"
|
||||||
|
|
||||||
echoContent yellow " ---> 格式化明文(VLESS+gRPC+TLS)"
|
echoContent yellow " ---> 格式化明文(VLESS+gRPC+TLS)"
|
||||||
echoContent green " 协议类型:VLESS,地址:${currentAdd},伪装域名/SNI:${currentHost},端口:${currentDefaultPort},用户ID:${id},安全:tls,传输方式:gRPC,alpn:h2,client-fingerprint: chrome,serviceName:${currentPath}grpc,账户名:${email}\n"
|
echoContent green " 协议类型:VLESS,地址:${add},伪装域名/SNI:${currentHost},端口:${currentDefaultPort},用户ID:${id},安全:tls,传输方式:gRPC,alpn:h2,client-fingerprint: chrome,serviceName:${currentPath}grpc,账户名:${email}\n"
|
||||||
|
|
||||||
cat <<EOF >>"/etc/v2ray-agent/subscribe_local/default/${user}"
|
cat <<EOF >>"/etc/v2ray-agent/subscribe_local/default/${user}"
|
||||||
vless://${id}@${currentAdd}:${currentDefaultPort}?encryption=none&security=tls&type=grpc&host=${currentHost}&path=${currentPath}grpc&serviceName=${currentPath}grpc&fp=chrome&alpn=h2&sni=${currentHost}#${email}
|
vless://${id}@${add}:${currentDefaultPort}?encryption=none&security=tls&type=grpc&host=${currentHost}&path=${currentPath}grpc&serviceName=${currentPath}grpc&fp=chrome&alpn=h2&sni=${currentHost}#${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${id}%40${currentAdd}%3A${currentDefaultPort}%3Fencryption%3Dnone%26security%3Dtls%26type%3Dgrpc%26host%3D${currentHost}%26serviceName%3D${currentPath}grpc%26fp%3Dchrome%26path%3D${currentPath}grpc%26sni%3D${currentHost}%26alpn%3Dh2%23${email}"
|
echoContent green " https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=vless%3A%2F%2F${id}%40${add}%3A${currentDefaultPort}%3Fencryption%3Dnone%26security%3Dtls%26type%3Dgrpc%26host%3D${currentHost}%26serviceName%3D${currentPath}grpc%26fp%3Dchrome%26path%3D${currentPath}grpc%26sni%3D${currentHost}%26alpn%3Dh2%23${email}"
|
||||||
|
|
||||||
elif [[ "${type}" == "trojan" ]]; then
|
elif [[ "${type}" == "trojan" ]]; then
|
||||||
# URLEncode
|
# URLEncode
|
||||||
|
@ -3744,13 +3740,13 @@ EOF
|
||||||
# URLEncode
|
# URLEncode
|
||||||
|
|
||||||
echoContent yellow " ---> Trojan gRPC(TLS)"
|
echoContent yellow " ---> Trojan gRPC(TLS)"
|
||||||
echoContent green " trojan://${id}@${currentAdd}:${currentDefaultPort}?encryption=none&peer=${currentHost}&fp=chrome&security=tls&type=grpc&sni=${currentHost}&alpn=h2&path=${currentPath}trojangrpc&serviceName=${currentPath}trojangrpc#${email}\n"
|
echoContent green " trojan://${id}@${add}:${currentDefaultPort}?encryption=none&peer=${currentHost}&fp=chrome&security=tls&type=grpc&sni=${currentHost}&alpn=h2&path=${currentPath}trojangrpc&serviceName=${currentPath}trojangrpc#${email}\n"
|
||||||
cat <<EOF >>"/etc/v2ray-agent/subscribe_local/default/${user}"
|
cat <<EOF >>"/etc/v2ray-agent/subscribe_local/default/${user}"
|
||||||
trojan://${id}@${currentAdd}:${currentDefaultPort}?encryption=none&peer=${currentHost}&security=tls&type=grpc&fp=chrome&sni=${currentHost}&alpn=h2&path=${currentPath}trojangrpc&serviceName=${currentPath}trojangrpc#${email}
|
trojan://${id}@${add}:${currentDefaultPort}?encryption=none&peer=${currentHost}&security=tls&type=grpc&fp=chrome&sni=${currentHost}&alpn=h2&path=${currentPath}trojangrpc&serviceName=${currentPath}trojangrpc#${email}
|
||||||
EOF
|
EOF
|
||||||
cat <<EOF >>"/etc/v2ray-agent/subscribe_local/clashMeta/${user}"
|
cat <<EOF >>"/etc/v2ray-agent/subscribe_local/clashMeta/${user}"
|
||||||
- name: "${email}"
|
- name: "${email}"
|
||||||
server: ${currentAdd}
|
server: ${add}
|
||||||
port: ${currentDefaultPort}
|
port: ${currentDefaultPort}
|
||||||
type: trojan
|
type: trojan
|
||||||
password: ${id}
|
password: ${id}
|
||||||
|
@ -3761,11 +3757,11 @@ EOF
|
||||||
grpc-service-name: "${currentPath}trojangrpc"
|
grpc-service-name: "${currentPath}trojangrpc"
|
||||||
EOF
|
EOF
|
||||||
echoContent yellow " ---> 二维码 Trojan gRPC(TLS)"
|
echoContent yellow " ---> 二维码 Trojan gRPC(TLS)"
|
||||||
echoContent green " https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=trojan%3a%2f%2f${id}%40${currentAdd}%3a${currentDefaultPort}%3Fencryption%3Dnone%26fp%3Dchrome%26security%3Dtls%26peer%3d${currentHost}%26type%3Dgrpc%26sni%3d${currentHost}%26path%3D${currentPath}trojangrpc%26alpn%3Dh2%26serviceName%3D${currentPath}trojangrpc%23${email}\n"
|
echoContent green " https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=trojan%3a%2f%2f${id}%40${add}%3a${currentDefaultPort}%3Fencryption%3Dnone%26fp%3Dchrome%26security%3Dtls%26peer%3d${currentHost}%26type%3Dgrpc%26sni%3d${currentHost}%26path%3D${currentPath}trojangrpc%26alpn%3Dh2%26serviceName%3D${currentPath}trojangrpc%23${email}\n"
|
||||||
|
|
||||||
elif [[ "${type}" == "hysteria" ]]; then
|
elif [[ "${type}" == "hysteria" ]]; then
|
||||||
local hysteriaEmail=
|
local hysteriaEmail=
|
||||||
hysteriaEmail=$(echo "${email}" | awk -F "[_]" '{print $1}')_hysteria
|
hysteriaEmail=$(echo "${email}" | awk -F "[-]" '{print $1}')_hysteria
|
||||||
echoContent yellow " ---> Hysteria(TLS)"
|
echoContent yellow " ---> Hysteria(TLS)"
|
||||||
local clashMetaPortTmp="port: ${hysteriaPort}"
|
local clashMetaPortTmp="port: ${hysteriaPort}"
|
||||||
local mport=
|
local mport=
|
||||||
|
@ -3861,7 +3857,7 @@ showAccounts() {
|
||||||
readHysteriaConfig
|
readHysteriaConfig
|
||||||
readXrayCoreRealityConfig
|
readXrayCoreRealityConfig
|
||||||
readHysteriaPortHopping
|
readHysteriaPortHopping
|
||||||
|
echo
|
||||||
echoContent skyBlue "\n进度 $1/${totalProgress} : 账号"
|
echoContent skyBlue "\n进度 $1/${totalProgress} : 账号"
|
||||||
local show
|
local show
|
||||||
# VLESS TCP
|
# VLESS TCP
|
||||||
|
@ -3898,7 +3894,14 @@ showAccounts() {
|
||||||
echoContent skyBlue "\n ---> 账号:${email}"
|
echoContent skyBlue "\n ---> 账号:${email}"
|
||||||
echo
|
echo
|
||||||
local path="${currentPath}ws"
|
local path="${currentPath}ws"
|
||||||
defaultBase64Code vlessws "${email}" "$(echo "${user}" | jq -r .id)"
|
local count=
|
||||||
|
while read -r line; do
|
||||||
|
if [[ -n "${line}" ]]; then
|
||||||
|
defaultBase64Code vlessws "${email}${count}" "$(echo "${user}" | jq -r .id)" "${line}"
|
||||||
|
count=$((count + 1))
|
||||||
|
fi
|
||||||
|
done < <(echo "${currentAdd}" | tr ',' '\n')
|
||||||
|
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -3912,7 +3915,14 @@ showAccounts() {
|
||||||
|
|
||||||
echoContent skyBlue "\n ---> 账号:${email}"
|
echoContent skyBlue "\n ---> 账号:${email}"
|
||||||
echo
|
echo
|
||||||
defaultBase64Code vlessgrpc "${email}" "$(echo "${user}" | jq -r .id)"
|
local count=
|
||||||
|
while read -r line; do
|
||||||
|
if [[ -n "${line}" ]]; then
|
||||||
|
defaultBase64Code vlessgrpc "${email}${count}" "$(echo "${user}" | jq -r .id)" "${line}"
|
||||||
|
count=$((count + 1))
|
||||||
|
fi
|
||||||
|
done < <(echo "${currentAdd}" | tr ',' '\n')
|
||||||
|
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -3929,7 +3939,13 @@ showAccounts() {
|
||||||
|
|
||||||
echoContent skyBlue "\n ---> 账号:${email}"
|
echoContent skyBlue "\n ---> 账号:${email}"
|
||||||
echo
|
echo
|
||||||
defaultBase64Code vmessws "${email}" "$(echo "${user}" | jq -r .id)"
|
local count=
|
||||||
|
while read -r line; do
|
||||||
|
if [[ -n "${line}" ]]; then
|
||||||
|
defaultBase64Code vmessws "${email}${count}" "$(echo "${user}" | jq -r .id)" "${line}"
|
||||||
|
count=$((count + 1))
|
||||||
|
fi
|
||||||
|
done < <(echo "${currentAdd}" | tr ',' '\n')
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -3953,7 +3969,14 @@ showAccounts() {
|
||||||
|
|
||||||
echoContent skyBlue "\n ---> 账号:${email}"
|
echoContent skyBlue "\n ---> 账号:${email}"
|
||||||
echo
|
echo
|
||||||
defaultBase64Code trojangrpc "${email}" "$(echo "${user}" | jq -r .password)"
|
local count=
|
||||||
|
while read -r line; do
|
||||||
|
if [[ -n "${line}" ]]; then
|
||||||
|
defaultBase64Code trojangrpc "${email}${count}" "$(echo "${user}" | jq -r .password)" "${line}"
|
||||||
|
count=$((count + 1))
|
||||||
|
fi
|
||||||
|
done < <(echo "${currentAdd}" | tr ',' '\n')
|
||||||
|
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
if echo ${currentInstallProtocolType} | grep -q 6; then
|
if echo ${currentInstallProtocolType} | grep -q 6; then
|
||||||
|
@ -3976,7 +3999,7 @@ showAccounts() {
|
||||||
hysteriaEmail=$(echo "${email}" | awk -F "[_]" '{print $1}')_hysteria
|
hysteriaEmail=$(echo "${email}" | awk -F "[_]" '{print $1}')_hysteria
|
||||||
|
|
||||||
if [[ -n ${defaultUser} ]]; then
|
if [[ -n ${defaultUser} ]]; then
|
||||||
echoContent skyBlue "\n ---> 账号:${hysteriaEmail}"
|
echoContent skyBlue "\n ---> 账号:$(echo "${hysteriaEmail}" | awk -F "[-]" '{print $1"_hysteria"}')"
|
||||||
echo
|
echo
|
||||||
defaultBase64Code hysteria "${hysteriaEmail}" "${user}"
|
defaultBase64Code hysteria "${hysteriaEmail}" "${user}"
|
||||||
fi
|
fi
|
||||||
|
@ -4018,7 +4041,7 @@ showAccounts() {
|
||||||
}
|
}
|
||||||
# 移除nginx302配置
|
# 移除nginx302配置
|
||||||
removeNginx302() {
|
removeNginx302() {
|
||||||
local count=0
|
local count=
|
||||||
grep -n "return 302" <"${nginxConfigPath}alone.conf" | while read -r line; do
|
grep -n "return 302" <"${nginxConfigPath}alone.conf" | while read -r line; do
|
||||||
|
|
||||||
if ! echo "${line}" | grep -q "request_uri"; then
|
if ! echo "${line}" | grep -q "request_uri"; then
|
||||||
|
@ -4335,7 +4358,7 @@ updateV2RayCDN() {
|
||||||
echoContent yellow "1.CNAME www.digitalocean.com"
|
echoContent yellow "1.CNAME www.digitalocean.com"
|
||||||
echoContent yellow "2.CNAME who.int"
|
echoContent yellow "2.CNAME who.int"
|
||||||
echoContent yellow "3.CNAME blog.hostmonit.com"
|
echoContent yellow "3.CNAME blog.hostmonit.com"
|
||||||
echoContent yellow "4.手动输入"
|
echoContent yellow "4.手动输入[可输入多个,比如: 1.1.1.1,1.1.2.2,cloudflare.com 逗号分隔]"
|
||||||
echoContent yellow "5.移除CDN节点"
|
echoContent yellow "5.移除CDN节点"
|
||||||
echoContent red "=============================================================="
|
echoContent red "=============================================================="
|
||||||
read -r -p "请选择:" selectCDNType
|
read -r -p "请选择:" selectCDNType
|
||||||
|
@ -4357,16 +4380,12 @@ updateV2RayCDN() {
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
if [[ -n ${setDomain} ]]; then
|
if [[ -n "${setDomain}" ]]; then
|
||||||
if [[ -n "${currentAdd}" ]]; then
|
local cdnAddressResult=
|
||||||
sed -i "s/\"${currentAdd}\"/\"${setDomain}\"/g" "$(grep "${currentAdd}" -rl ${configPath}${frontingType}.json)"
|
cdnAddressResult=$(jq -r ".inbounds[0].add = \"${setDomain}\" " ${configPath}${frontingType}.json)
|
||||||
fi
|
echo "${cdnAddressResult}" | jq . >${configPath}${frontingType}.json
|
||||||
if [[ $(jq -r .inbounds[0].settings.clients[0].add ${configPath}${frontingType}.json) == "${setDomain}" ]]; then
|
|
||||||
echoContent green " ---> CDN修改成功"
|
echoContent green " ---> 修改CDN成功"
|
||||||
reloadCore
|
|
||||||
else
|
|
||||||
echoContent red " ---> 修改CDN失败"
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
echoContent red " ---> 未安装可用类型"
|
echoContent red " ---> 未安装可用类型"
|
||||||
|
@ -5265,17 +5284,24 @@ unInstallOutbounds() {
|
||||||
unInstallSniffing() {
|
unInstallSniffing() {
|
||||||
|
|
||||||
find ${configPath} -name "*inbounds.json*" | awk -F "[c][o][n][f][/]" '{print $2}' | while read -r inbound; do
|
find ${configPath} -name "*inbounds.json*" | awk -F "[c][o][n][f][/]" '{print $2}' | while read -r inbound; do
|
||||||
|
if grep -q "destOverride" <"${configPath}${inbound}"; then
|
||||||
sniffing=$(jq -r 'del(.inbounds[0].sniffing)' "${configPath}${inbound}")
|
sniffing=$(jq -r 'del(.inbounds[0].sniffing)' "${configPath}${inbound}")
|
||||||
echo "${sniffing}" | jq . >"${configPath}${inbound}"
|
echo "${sniffing}" | jq . >"${configPath}${inbound}"
|
||||||
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# 安装嗅探
|
# 安装嗅探
|
||||||
installSniffing() {
|
installSniffing() {
|
||||||
|
readInstallType
|
||||||
|
find ${configPath} -name "*inbounds.json*"
|
||||||
|
find ${configPath} -name "*inbounds.json*" | awk -F "[c][o][n][f][/]" '{print $2}'
|
||||||
find ${configPath} -name "*inbounds.json*" | awk -F "[c][o][n][f][/]" '{print $2}' | while read -r inbound; do
|
find ${configPath} -name "*inbounds.json*" | awk -F "[c][o][n][f][/]" '{print $2}' | while read -r inbound; do
|
||||||
|
if ! grep -q "destOverride" <"${configPath}${inbound}"; then
|
||||||
sniffing=$(jq -r '.inbounds[0].sniffing = {"enabled":true,"destOverride":["http","tls"]}' "${configPath}${inbound}")
|
sniffing=$(jq -r '.inbounds[0].sniffing = {"enabled":true,"destOverride":["http","tls"]}' "${configPath}${inbound}")
|
||||||
echo "${sniffing}" | jq . >"${configPath}${inbound}"
|
echo "${sniffing}" | jq . >"${configPath}${inbound}"
|
||||||
|
fi
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7050,7 +7076,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.9.2"
|
echoContent green "当前版本:v2.9.3"
|
||||||
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
|
||||||
|
|
Loading…
Reference in New Issue