feat(脚本): 添加hysteria、优化dns申请证书提示,并添加教程
parent
127fadcd9b
commit
b715e86283
|
@ -0,0 +1,3 @@
|
||||||
|
# dns添加TXT记录
|
||||||
|
## 1.cloudflare
|
||||||
|
<img src="https://raw.githubusercontent.com/mack-a/v2ray-agent/master/fodder/cloudflare/cloudflare_dns_txt.png" width=700>
|
Binary file not shown.
After Width: | Height: | Size: 40 KiB |
523
install.sh
523
install.sh
|
@ -83,12 +83,12 @@ checkCPUVendor() {
|
||||||
'amd64' | 'x86_64')
|
'amd64' | 'x86_64')
|
||||||
xrayCoreCPUVendor="Xray-linux-64"
|
xrayCoreCPUVendor="Xray-linux-64"
|
||||||
v2rayCoreCPUVendor="v2ray-linux-64"
|
v2rayCoreCPUVendor="v2ray-linux-64"
|
||||||
# hysteriaCoreCPUVendor="hysteria-linux-amd64"
|
hysteriaCoreCPUVendor="hysteria-linux-amd64"
|
||||||
;;
|
;;
|
||||||
'armv8' | 'aarch64')
|
'armv8' | 'aarch64')
|
||||||
xrayCoreCPUVendor="Xray-linux-arm64-v8a"
|
xrayCoreCPUVendor="Xray-linux-arm64-v8a"
|
||||||
v2rayCoreCPUVendor="v2ray-linux-arm64-v8a"
|
v2rayCoreCPUVendor="v2ray-linux-arm64-v8a"
|
||||||
# hysteriaCoreCPUVendor="hysteria-linux-arm64"
|
hysteriaCoreCPUVendor="hysteria-linux-arm64"
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo " 不支持此CPU架构--->"
|
echo " 不支持此CPU架构--->"
|
||||||
|
@ -113,7 +113,7 @@ initVar() {
|
||||||
# 核心支持的cpu版本
|
# 核心支持的cpu版本
|
||||||
xrayCoreCPUVendor=""
|
xrayCoreCPUVendor=""
|
||||||
v2rayCoreCPUVendor=""
|
v2rayCoreCPUVendor=""
|
||||||
# hysteriaCoreCPUVendor=""
|
hysteriaCoreCPUVendor=""
|
||||||
|
|
||||||
# 域名
|
# 域名
|
||||||
domain=
|
domain=
|
||||||
|
@ -153,6 +153,9 @@ initVar() {
|
||||||
# v2ray-core、xray-core配置文件的路径
|
# v2ray-core、xray-core配置文件的路径
|
||||||
configPath=
|
configPath=
|
||||||
|
|
||||||
|
# hysteria 配置文件的路径
|
||||||
|
hysteriaConfigPath=
|
||||||
|
|
||||||
# 配置文件的path
|
# 配置文件的path
|
||||||
currentPath=
|
currentPath=
|
||||||
|
|
||||||
|
@ -214,6 +217,22 @@ initVar() {
|
||||||
|
|
||||||
# 自定义端口
|
# 自定义端口
|
||||||
customPort=
|
customPort=
|
||||||
|
|
||||||
|
# hysteria端口
|
||||||
|
hysteriaPort=
|
||||||
|
|
||||||
|
# hysteria协议
|
||||||
|
hysteriaProtocol=
|
||||||
|
|
||||||
|
# hysteria延迟
|
||||||
|
hysteriaLag=
|
||||||
|
|
||||||
|
# hysteria下行速度
|
||||||
|
hysteriaClientDownloadSpeed=
|
||||||
|
|
||||||
|
# hysteria上行速度
|
||||||
|
hysteriaClientUploadSpeed=
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# 读取tls证书详情
|
# 读取tls证书详情
|
||||||
|
@ -239,6 +258,7 @@ readCustomPort() {
|
||||||
readInstallType() {
|
readInstallType() {
|
||||||
coreInstallType=
|
coreInstallType=
|
||||||
configPath=
|
configPath=
|
||||||
|
hysteriaConfigPath=
|
||||||
|
|
||||||
# 1.检测安装目录
|
# 1.检测安装目录
|
||||||
if [[ -d "/etc/v2ray-agent" ]]; then
|
if [[ -d "/etc/v2ray-agent" ]]; then
|
||||||
|
@ -267,6 +287,14 @@ readInstallType() {
|
||||||
coreInstallType=1
|
coreInstallType=1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [[ -d "/etc/v2ray-agent/hysteria" && -f "/etc/v2ray-agent/hysteria/hysteria" ]]; then
|
||||||
|
# 这里检测 hysteria
|
||||||
|
if [[ -d "/etc/v2ray-agent/hysteria/conf" ]] && [[ -f "/etc/v2ray-agent/hysteria/conf/config.json" ]] && [[ -f "/etc/v2ray-agent/hysteria/conf/client_network.json" ]]; then
|
||||||
|
hysteriaConfigPath=/etc/v2ray-agent/hysteria/conf/
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -299,6 +327,10 @@ readInstallProtocolType() {
|
||||||
currentInstallProtocolType=${currentInstallProtocolType}'5'
|
currentInstallProtocolType=${currentInstallProtocolType}'5'
|
||||||
fi
|
fi
|
||||||
done < <(find ${configPath} -name "*inbounds.json" | awk -F "[.]" '{print $1}')
|
done < <(find ${configPath} -name "*inbounds.json" | awk -F "[.]" '{print $1}')
|
||||||
|
|
||||||
|
if [[ -n "${hysteriaConfigPath}" ]]; then
|
||||||
|
currentInstallProtocolType=${currentInstallProtocolType}'6'
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# 检查是否安装宝塔
|
# 检查是否安装宝塔
|
||||||
|
@ -390,6 +422,17 @@ checkFirewalldAllowPort() {
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# 读取hysteria网络环境
|
||||||
|
readHysteriaConfig() {
|
||||||
|
if [[ -n "${hysteriaConfigPath}" ]]; then
|
||||||
|
hysteriaLag=$(jq -r .hysteriaLag <"${hysteriaConfigPath}client_network.json")
|
||||||
|
hysteriaClientDownloadSpeed=$(jq -r .hysteriaClientDownloadSpeed <"${hysteriaConfigPath}client_network.json")
|
||||||
|
hysteriaClientUploadSpeed=$(jq -r .hysteriaClientUploadSpeed <"${hysteriaConfigPath}client_network.json")
|
||||||
|
hysteriaPort=$(jq -r .listen <"${hysteriaConfigPath}config.json" | awk -F "[:]" '{print $2}')
|
||||||
|
hysteriaProtocol=$(jq -r .protocol <"${hysteriaConfigPath}config.json")
|
||||||
|
fi
|
||||||
|
}
|
||||||
# 检查文件目录以及path路径
|
# 检查文件目录以及path路径
|
||||||
readConfigHostPathUUID() {
|
readConfigHostPathUUID() {
|
||||||
currentPath=
|
currentPath=
|
||||||
|
@ -563,7 +606,7 @@ mkdirTools() {
|
||||||
mkdir -p /etc/v2ray-agent/xray/conf
|
mkdir -p /etc/v2ray-agent/xray/conf
|
||||||
mkdir -p /etc/v2ray-agent/xray/tmp
|
mkdir -p /etc/v2ray-agent/xray/tmp
|
||||||
mkdir -p /etc/v2ray-agent/trojan
|
mkdir -p /etc/v2ray-agent/trojan
|
||||||
# mkdir -p /etc/v2ray-agent/hysteria/conf
|
mkdir -p /etc/v2ray-agent/hysteria/conf
|
||||||
mkdir -p /etc/systemd/system/
|
mkdir -p /etc/systemd/system/
|
||||||
mkdir -p /tmp/v2ray-agent-tls/
|
mkdir -p /tmp/v2ray-agent-tls/
|
||||||
}
|
}
|
||||||
|
@ -1036,8 +1079,10 @@ checkIP() {
|
||||||
echoContent yellow " ---> 2.检查域名dns解析是否正确"
|
echoContent yellow " ---> 2.检查域名dns解析是否正确"
|
||||||
echoContent yellow " ---> 3.如解析正确,请等待dns生效,预计三分钟内生效"
|
echoContent yellow " ---> 3.如解析正确,请等待dns生效,预计三分钟内生效"
|
||||||
echoContent yellow " ---> 4.如报Nginx启动问题,请手动启动nginx查看错误,如自己无法处理请提issues"
|
echoContent yellow " ---> 4.如报Nginx启动问题,请手动启动nginx查看错误,如自己无法处理请提issues"
|
||||||
|
echoContent yellow " ---> 5.错误日志:${localIP}"
|
||||||
echo
|
echo
|
||||||
echoContent skyBlue " ---> 如以上设置都正确,请重新安装纯净系统后再次尝试"
|
echoContent skyBlue " ---> 如以上设置都正确,请重新安装纯净系统后再次尝试"
|
||||||
|
|
||||||
if [[ -n ${localIP} ]]; then
|
if [[ -n ${localIP} ]]; then
|
||||||
echoContent yellow " ---> 检测返回值异常,建议手动卸载nginx后重新执行脚本"
|
echoContent yellow " ---> 检测返回值异常,建议手动卸载nginx后重新执行脚本"
|
||||||
fi
|
fi
|
||||||
|
@ -1126,7 +1171,9 @@ switchSSLType() {
|
||||||
|
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
acmeInstallSSL() {
|
|
||||||
|
# 选择acme安装证书方式
|
||||||
|
selectAcmeInstallSSL() {
|
||||||
local installSSLIPv6=
|
local installSSLIPv6=
|
||||||
if echo "${localIP}" | grep -q ":"; then
|
if echo "${localIP}" | grep -q ":"; then
|
||||||
installSSLIPv6="--listen-v6"
|
installSSLIPv6="--listen-v6"
|
||||||
|
@ -1145,7 +1192,13 @@ acmeInstallSSL() {
|
||||||
dnsSSLStatus=true
|
dnsSSLStatus=true
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
acmeInstallSSL
|
||||||
|
|
||||||
|
readAcmeTLS
|
||||||
|
}
|
||||||
|
|
||||||
|
# 安装SSL证书
|
||||||
|
acmeInstallSSL() {
|
||||||
if [[ "${dnsSSLStatus}" == "true" ]]; then
|
if [[ "${dnsSSLStatus}" == "true" ]]; then
|
||||||
|
|
||||||
sudo "$HOME/.acme.sh/acme.sh" --issue -d "*.${dnsTLSDomain}" --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please --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 "*.${dnsTLSDomain}" --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please --standalone -k ec-256 --server "${sslType}" ${installSSLIPv6} 2>&1 | tee -a /etc/v2ray-agent/tls/acme.log >/dev/null
|
||||||
|
@ -1154,6 +1207,7 @@ acmeInstallSSL() {
|
||||||
txtValue=$(tail -n 10 /etc/v2ray-agent/tls/acme.log | grep "TXT value" | awk -F "'" '{print $2}')
|
txtValue=$(tail -n 10 /etc/v2ray-agent/tls/acme.log | grep "TXT value" | awk -F "'" '{print $2}')
|
||||||
if [[ -n "${txtValue}" ]]; then
|
if [[ -n "${txtValue}" ]]; then
|
||||||
echoContent green " ---> 请手动添加DNS TXT记录"
|
echoContent green " ---> 请手动添加DNS TXT记录"
|
||||||
|
echoContent yellow " ---> 添加方法请参考此教程,https://github.com/mack-a/v2ray-agent/blob/master/documents/dns_txt.md"
|
||||||
echoContent green " ---> name:_acme-challenge"
|
echoContent green " ---> name:_acme-challenge"
|
||||||
echoContent green " ---> value:${txtValue}"
|
echoContent green " ---> value:${txtValue}"
|
||||||
echoContent yellow " ---> 添加完成后等请等待1-2分钟"
|
echoContent yellow " ---> 添加完成后等请等待1-2分钟"
|
||||||
|
@ -1168,7 +1222,7 @@ acmeInstallSSL() {
|
||||||
sudo "$HOME/.acme.sh/acme.sh" --renew -d "*.${dnsTLSDomain}" --yes-I-know-dns-manual-mode-enough-go-ahead-please --ecc --server "${sslType}" ${installSSLIPv6} 2>&1 | tee -a /etc/v2ray-agent/tls/acme.log >/dev/null
|
sudo "$HOME/.acme.sh/acme.sh" --renew -d "*.${dnsTLSDomain}" --yes-I-know-dns-manual-mode-enough-go-ahead-please --ecc --server "${sslType}" ${installSSLIPv6} 2>&1 | tee -a /etc/v2ray-agent/tls/acme.log >/dev/null
|
||||||
else
|
else
|
||||||
echoContent red " ---> 验证失败,请等待1-2分钟后重新尝试"
|
echoContent red " ---> 验证失败,请等待1-2分钟后重新尝试"
|
||||||
exit 0
|
acmeInstallSSL
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
echoContent red " ---> 放弃"
|
echoContent red " ---> 放弃"
|
||||||
|
@ -1179,7 +1233,6 @@ acmeInstallSSL() {
|
||||||
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}" ${installSSLIPv6} 2>&1 | tee -a /etc/v2ray-agent/tls/acme.log >/dev/null
|
||||||
fi
|
fi
|
||||||
readAcmeTLS
|
|
||||||
}
|
}
|
||||||
# 自定义端口
|
# 自定义端口
|
||||||
customPortFunction() {
|
customPortFunction() {
|
||||||
|
@ -1194,7 +1247,7 @@ customPortFunction() {
|
||||||
|
|
||||||
if [[ "${historyCustomPortStatus}" == "n" || -z "${customPort}" ]]; then
|
if [[ "${historyCustomPortStatus}" == "n" || -z "${customPort}" ]]; then
|
||||||
echo
|
echo
|
||||||
echoContent yellow "请输入自定义端口[例: 2083],自定义端口后只允许使用DNS申请证书,[回车]使用443"
|
echoContent yellow "请输入端口[默认: 443],如自定义端口,只允许使用DNS申请证书[回车使用默认]"
|
||||||
read -r -p "端口:" customPort
|
read -r -p "端口:" customPort
|
||||||
if [[ -n "${customPort}" ]]; then
|
if [[ -n "${customPort}" ]]; then
|
||||||
if ((customPort >= 1 && customPort <= 65535)); then
|
if ((customPort >= 1 && customPort <= 65535)); then
|
||||||
|
@ -1246,7 +1299,7 @@ installTLS() {
|
||||||
if [[ "${installDNSACMEStatus}" != "true" ]]; then
|
if [[ "${installDNSACMEStatus}" != "true" ]]; then
|
||||||
switchSSLType
|
switchSSLType
|
||||||
customSSLEmail
|
customSSLEmail
|
||||||
acmeInstallSSL
|
selectAcmeInstallSSL
|
||||||
else
|
else
|
||||||
echoContent green " ---> 检测到已安装通配符证书,自动生成中"
|
echoContent green " ---> 检测到已安装通配符证书,自动生成中"
|
||||||
fi
|
fi
|
||||||
|
@ -1548,6 +1601,33 @@ installV2Ray() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# 安装 hysteria
|
||||||
|
installHysteria() {
|
||||||
|
readInstallType
|
||||||
|
echoContent skyBlue "\n进度 $1/${totalProgress} : 安装Hysteria"
|
||||||
|
|
||||||
|
if [[ -z "${hysteriaConfigPath}" ]]; then
|
||||||
|
|
||||||
|
version=$(curl -s https://api.github.com/repos/HyNetwork/hysteria/releases | jq -r '.[]|select (.prerelease==false)|.tag_name' | head -1)
|
||||||
|
|
||||||
|
echoContent green " ---> Hysteria版本:${version}"
|
||||||
|
if wget --help | grep -q show-progress; then
|
||||||
|
wget -c -q --show-progress -P /etc/v2ray-agent/hysteria/ "https://github.com/HyNetwork/hysteria/releases/download/${version}/${hysteriaCoreCPUVendor}"
|
||||||
|
else
|
||||||
|
wget -c -P /etc/v2ray-agent/hysteria/ "https://github.com/HyNetwork/hysteria/releases/download/${version}/${hysteriaCoreCPUVendor}" >/dev/null 2>&1
|
||||||
|
fi
|
||||||
|
mv "/etc/v2ray-agent/hysteria/${hysteriaCoreCPUVendor}" /etc/v2ray-agent/hysteria/hysteria
|
||||||
|
chmod 655 /etc/v2ray-agent/hysteria/hysteria
|
||||||
|
else
|
||||||
|
echoContent green " ---> Hysteria版本:$(/etc/v2ray-agent/hysteria/hysteria --version | awk '{print $3}')"
|
||||||
|
read -r -p "是否更新、升级?[y/n]:" reInstallHysteriaStatus
|
||||||
|
if [[ "${reInstallHysteriaStatus}" == "y" ]]; then
|
||||||
|
rm -f /etc/v2ray-agent/hysteria/hysteria
|
||||||
|
installHysteria "$1"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
}
|
||||||
# 安装xray
|
# 安装xray
|
||||||
installXray() {
|
installXray() {
|
||||||
readInstallType
|
readInstallType
|
||||||
|
@ -1861,6 +1941,39 @@ EOF
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# 安装hysteria开机自启
|
||||||
|
installHysteriaService() {
|
||||||
|
echoContent skyBlue "\n进度 $1/${totalProgress} : 配置Hysteria开机自启"
|
||||||
|
if [[ -n $(find /bin /usr/bin -name "systemctl") ]]; then
|
||||||
|
rm -rf /etc/systemd/system/hysteria.service
|
||||||
|
touch /etc/systemd/system/hysteria.service
|
||||||
|
execStart='/etc/v2ray-agent/hysteria/hysteria --log-level info -c /etc/v2ray-agent/hysteria/conf/config.json server'
|
||||||
|
cat <<EOF >/etc/systemd/system/hysteria.service
|
||||||
|
[Unit]
|
||||||
|
Description=Hysteria Service
|
||||||
|
Documentation=https://github.com/HyNetwork/hysteria/wiki
|
||||||
|
After=network.target nss-lookup.target
|
||||||
|
Wants=network-online.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=root
|
||||||
|
CapabilityBoundingSet=CAP_NET_BIND_SERVICE CAP_NET_RAW
|
||||||
|
NoNewPrivileges=yes
|
||||||
|
ExecStart=${execStart}
|
||||||
|
Restart=on-failure
|
||||||
|
RestartPreventExitStatus=23
|
||||||
|
LimitNPROC=10000
|
||||||
|
LimitNOFILE=1000000
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl daemon-reload
|
||||||
|
systemctl enable hysteria.service
|
||||||
|
echoContent green " ---> 配置Hysteria开机自启成功"
|
||||||
|
fi
|
||||||
|
}
|
||||||
# Xray开机自启
|
# Xray开机自启
|
||||||
installXrayService() {
|
installXrayService() {
|
||||||
echoContent skyBlue "\n进度 $1/${totalProgress} : 配置Xray开机自启"
|
echoContent skyBlue "\n进度 $1/${totalProgress} : 配置Xray开机自启"
|
||||||
|
@ -1925,6 +2038,37 @@ handleV2Ray() {
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# 操作Hysteria
|
||||||
|
handleHysteria() {
|
||||||
|
# shellcheck disable=SC2010
|
||||||
|
if find /bin /usr/bin | grep -q systemctl && ls /etc/systemd/system/ | grep -q hysteria.service; then
|
||||||
|
if [[ -z $(pgrep -f "hysteria/hysteria") ]] && [[ "$1" == "start" ]]; then
|
||||||
|
systemctl start hysteria.service
|
||||||
|
elif [[ -n $(pgrep -f "hysteria/hysteria") ]] && [[ "$1" == "stop" ]]; then
|
||||||
|
systemctl stop hysteria.service
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
sleep 0.8
|
||||||
|
|
||||||
|
if [[ "$1" == "start" ]]; then
|
||||||
|
if [[ -n $(pgrep -f "hysteria/hysteria") ]]; then
|
||||||
|
echoContent green " ---> Hysteria启动成功"
|
||||||
|
else
|
||||||
|
echoContent red "Hysteria启动失败"
|
||||||
|
echoContent red "请手动执行【/etc/v2ray-agent/hysteria/hysteria --log-level debug -c /etc/v2ray-agent/hysteria/conf/config.json server】,查看错误日志"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
elif [[ "$1" == "stop" ]]; then
|
||||||
|
if [[ -z $(pgrep -f "hysteria/hysteria") ]]; then
|
||||||
|
echoContent green " ---> Hysteria关闭成功"
|
||||||
|
else
|
||||||
|
echoContent red "Hysteria关闭失败"
|
||||||
|
echoContent red "请手动执行【ps -ef|grep -v grep|grep hysteria|awk '{print \$2}'|xargs kill -9】"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
# 操作xray
|
# 操作xray
|
||||||
handleXray() {
|
handleXray() {
|
||||||
if [[ -n $(find /bin /usr/bin -name "systemctl") ]] && [[ -n $(find /etc/systemd/system/ -name "xray.service") ]]; then
|
if [[ -n $(find /bin /usr/bin -name "systemctl") ]] && [[ -n $(find /etc/systemd/system/ -name "xray.service") ]]; then
|
||||||
|
@ -1983,10 +2127,121 @@ addClients() {
|
||||||
echo "${config}" | jq . >"${path}"
|
echo "${config}" | jq . >"${path}"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
# 添加hysteria配置
|
||||||
|
addClientsHysteria() {
|
||||||
|
local path=$1
|
||||||
|
local addClientsStatus=$2
|
||||||
|
|
||||||
|
if [[ ${addClientsStatus} == "true" && -n "${previousClients}" ]]; then
|
||||||
|
local uuids=
|
||||||
|
uuids=$(echo "${previousClients}" | jq -r [.[].id])
|
||||||
|
config=$(jq -r ".auth.config = ${uuids}" "${path}")
|
||||||
|
echo "${config}" | jq . >"${path}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# 初始化hysteria端口
|
||||||
|
initHysteriaPort() {
|
||||||
|
echoContent yellow "请输入Hysteria端口[例: 10000],不可与其他服务重复"
|
||||||
|
read -r -p "端口:" hysteriaPort
|
||||||
|
if [[ -z ${hysteriaPort} ]]; then
|
||||||
|
echoContent red "\n ---> 端口不可为空"
|
||||||
|
initHysteriaPort "$2"
|
||||||
|
elif ((customPort >= 1 && customPort <= 65535)); then
|
||||||
|
echoContent red "\n ---> 端口不合法"
|
||||||
|
initHysteriaPort "$2"
|
||||||
|
fi
|
||||||
|
allowPort "${hysteriaPort}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 初始化hysteria的协议
|
||||||
|
initHysteriaProtocol() {
|
||||||
|
echoContent skyBlue "\n请选择协议类型"
|
||||||
|
echoContent red "=============================================================="
|
||||||
|
echoContent yellow "1.udp(QUIC)(默认)"
|
||||||
|
echoContent yellow "2.faketcp"
|
||||||
|
echoContent yellow "3.wechat-video"
|
||||||
|
echoContent red "=============================================================="
|
||||||
|
read -r -p "请选择:" selectHysteriaProtocol
|
||||||
|
case ${selectHysteriaProtocol} in
|
||||||
|
1)
|
||||||
|
hysteriaProtocol="udp"
|
||||||
|
;;
|
||||||
|
2)
|
||||||
|
hysteriaProtocol="faketcp"
|
||||||
|
;;
|
||||||
|
3)
|
||||||
|
hysteriaProtocol="wechat-video"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
hysteriaProtocol="udp"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
# 初始化hysteria网络信息
|
||||||
|
initHysteriaNetwork() {
|
||||||
|
|
||||||
|
echoContent yellow "请输入本地到服务器的平均延迟,请按照真实情况填写(默认:180,单位:ms)"
|
||||||
|
read -r -p "延迟:" hysteriaLag
|
||||||
|
if [[ -z "${hysteriaLag}" ]]; then
|
||||||
|
hysteriaLag=180
|
||||||
|
fi
|
||||||
|
|
||||||
|
echoContent yellow "请输入本地带宽峰值的下行速度(默认:100,单位:Mbps)"
|
||||||
|
read -r -p "延迟:" hysteriaClientDownloadSpeed
|
||||||
|
if [[ -z "${hysteriaClientDownloadSpeed}" ]]; then
|
||||||
|
hysteriaClientDownloadSpeed=100
|
||||||
|
fi
|
||||||
|
|
||||||
|
echoContent yellow "请输入本地带宽峰值的上行速度(默认:50,单位:Mbps)"
|
||||||
|
read -r -p "延迟:" hysteriaClientUploadSpeed
|
||||||
|
if [[ -z "${hysteriaClientUploadSpeed}" ]]; then
|
||||||
|
hysteriaClientUploadSpeed=50
|
||||||
|
fi
|
||||||
|
|
||||||
|
cat <<EOF >/etc/v2ray-agent/hysteria/conf/client_network.json
|
||||||
|
{
|
||||||
|
"hysteriaLag":"${hysteriaLag}",
|
||||||
|
"hysteriaClientUploadSpeed":"${hysteriaClientUploadSpeed}",
|
||||||
|
"hysteriaClientDownloadSpeed":"${hysteriaClientDownloadSpeed}"
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
}
|
||||||
# 初始化Hysteria配置
|
# 初始化Hysteria配置
|
||||||
initHysteriaConfig() {
|
initHysteriaConfig() {
|
||||||
echoContent skyBlue "\n进度 $2/${totalProgress} : 初始化Hysteria配置"
|
echoContent skyBlue "\n进度 $1/${totalProgress} : 初始化Hysteria配置"
|
||||||
|
|
||||||
|
initHysteriaPort
|
||||||
|
initHysteriaProtocol
|
||||||
|
initHysteriaNetwork
|
||||||
|
|
||||||
|
getClients "${configPath}/02_VLESS_TCP_inbounds.json" true
|
||||||
|
cat <<EOF >/etc/v2ray-agent/hysteria/conf/config.json
|
||||||
|
{
|
||||||
|
"listen": ":${hysteriaPort}",
|
||||||
|
"protocol": "udp",
|
||||||
|
"disable_udp": false,
|
||||||
|
"cert": "/etc/v2ray-agent/tls/${currentHost}.crt",
|
||||||
|
"key": "/etc/v2ray-agent/tls/${currentHost}.key",
|
||||||
|
"auth": {
|
||||||
|
"mode": "passwords",
|
||||||
|
"config": []
|
||||||
|
},
|
||||||
|
"up_mbps":${hysteriaClientUploadSpeed},
|
||||||
|
"down_mbps":${hysteriaClientDownloadSpeed},
|
||||||
|
"alpn": "h3",
|
||||||
|
"recv_window_conn": 15728640,
|
||||||
|
"recv_window_client": 67108864,
|
||||||
|
"max_conn_client": 4096,
|
||||||
|
"disable_mtu_discovery": true,
|
||||||
|
"resolve_preference": "46",
|
||||||
|
"resolver": "https://8.8.8.8:443/dns-query"
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
addClientsHysteria "/etc/v2ray-agent/hysteria/conf/config.json" true
|
||||||
}
|
}
|
||||||
|
|
||||||
# 初始化V2Ray 配置文件
|
# 初始化V2Ray 配置文件
|
||||||
|
@ -2105,7 +2360,7 @@ EOF
|
||||||
"clients": [
|
"clients": [
|
||||||
{
|
{
|
||||||
"password": "${uuid}",
|
"password": "${uuid}",
|
||||||
"email": "${domain}_trojan_tcp"
|
"email": "${domain}_${uuid}"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"fallbacks":[
|
"fallbacks":[
|
||||||
|
@ -2142,7 +2397,7 @@ EOF
|
||||||
"clients": [
|
"clients": [
|
||||||
{
|
{
|
||||||
"id": "${uuid}",
|
"id": "${uuid}",
|
||||||
"email": "${domain}_VLESS_WS"
|
"email": "${domain}_${uuid}"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"decryption": "none"
|
"decryption": "none"
|
||||||
|
@ -2180,7 +2435,7 @@ EOF
|
||||||
"clients": [
|
"clients": [
|
||||||
{
|
{
|
||||||
"password": "${uuid}",
|
"password": "${uuid}",
|
||||||
"email": "${domain}_trojan_gRPC"
|
"email": "${domain}_${uuid}"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"fallbacks": [
|
"fallbacks": [
|
||||||
|
@ -2222,7 +2477,7 @@ EOF
|
||||||
"id": "${uuid}",
|
"id": "${uuid}",
|
||||||
"alterId": 0,
|
"alterId": 0,
|
||||||
"add": "${add}",
|
"add": "${add}",
|
||||||
"email": "${domain}_vmess_ws"
|
"email": "${domain}_${uuid}"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -2256,7 +2511,7 @@ EOF
|
||||||
{
|
{
|
||||||
"id": "${uuid}",
|
"id": "${uuid}",
|
||||||
"add": "${add}",
|
"add": "${add}",
|
||||||
"email": "${domain}_VLESS_gRPC"
|
"email": "${domain}_${uuid}"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"decryption": "none"
|
"decryption": "none"
|
||||||
|
@ -2518,7 +2773,7 @@ EOF
|
||||||
"clients": [
|
"clients": [
|
||||||
{
|
{
|
||||||
"password": "${uuid}",
|
"password": "${uuid}",
|
||||||
"email": "${domain}_trojan_tcp"
|
"email": "${domain}_${uuid}"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"fallbacks":[
|
"fallbacks":[
|
||||||
|
@ -2555,7 +2810,7 @@ EOF
|
||||||
"clients": [
|
"clients": [
|
||||||
{
|
{
|
||||||
"id": "${uuid}",
|
"id": "${uuid}",
|
||||||
"email": "${domain}_VLESS_WS"
|
"email": "${domain}_${uuid}"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"decryption": "none"
|
"decryption": "none"
|
||||||
|
@ -2593,7 +2848,7 @@ EOF
|
||||||
"clients": [
|
"clients": [
|
||||||
{
|
{
|
||||||
"password": "${uuid}",
|
"password": "${uuid}",
|
||||||
"email": "${domain}_trojan_gRPC"
|
"email": "${domain}_${uuid}"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"fallbacks": [
|
"fallbacks": [
|
||||||
|
@ -2633,7 +2888,7 @@ EOF
|
||||||
"id": "${uuid}",
|
"id": "${uuid}",
|
||||||
"alterId": 0,
|
"alterId": 0,
|
||||||
"add": "${add}",
|
"add": "${add}",
|
||||||
"email": "${domain}_vmess_ws"
|
"email": "${domain}_${uuid}"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -2667,7 +2922,7 @@ EOF
|
||||||
{
|
{
|
||||||
"id": "${uuid}",
|
"id": "${uuid}",
|
||||||
"add": "${add}",
|
"add": "${add}",
|
||||||
"email": "${domain}_VLESS_gRPC"
|
"email": "${domain}_${uuid}"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"decryption": "none"
|
"decryption": "none"
|
||||||
|
@ -2705,7 +2960,7 @@ EOF
|
||||||
"id": "${uuid}",
|
"id": "${uuid}",
|
||||||
"add":"${add}",
|
"add":"${add}",
|
||||||
"flow":"xtls-rprx-direct",
|
"flow":"xtls-rprx-direct",
|
||||||
"email": "${domain}_VLESS_XTLS/TLS-direct_TCP"
|
"email": "${domain}_${uuid}"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"decryption": "none",
|
"decryption": "none",
|
||||||
|
@ -2963,6 +3218,15 @@ trojan://${id}@${currentAdd}:${currentDefaultPort}?encryption=none&peer=${curren
|
||||||
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%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${currentAdd}%3a${currentDefaultPort}%3Fencryption%3Dnone%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
|
||||||
|
echoContent yellow " ---> Hysteria(TLS)"
|
||||||
|
echoContent green " hysteria://${currentHost}:${hysteriaPort}?protocol=${hysteriaProtocol}&auth=${id}&peer=${currentHost}&insecure=0&alpn=h3&upmbps=${hysteriaClientUploadSpeed}&downmbps=${hysteriaClientDownloadSpeed}#${email}\n"
|
||||||
|
cat <<EOF >>"/etc/v2ray-agent/subscribe_tmp/${subAccount}"
|
||||||
|
hysteria://${currentHost}:${hysteriaPort}?protocol=${hysteriaProtocol}&auth=${id}&peer=${currentHost}&insecure=0&alpn=h3&upmbps=${hysteriaClientUploadSpeed}&downmbps=${hysteriaClientDownloadSpeed}#${email}
|
||||||
|
EOF
|
||||||
|
echoContent yellow " ---> 二维码 Hysteria(TLS)"
|
||||||
|
echoContent green " https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=hysteria%3A%2F%2F${currentHost}%3A${hysteriaPort}%3Fprotocol%3D${hysteriaProtocol}%26auth%3D${id}%26peer%3D${currentHost}%26insecure%3D0%26alpn%3Dh3%26upmbps%3D${hysteriaClientUploadSpeed}%26downmbps%3D${hysteriaClientDownloadSpeed}%23${email}\n"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2972,6 +3236,7 @@ showAccounts() {
|
||||||
readInstallType
|
readInstallType
|
||||||
readInstallProtocolType
|
readInstallProtocolType
|
||||||
readConfigHostPathUUID
|
readConfigHostPathUUID
|
||||||
|
readHysteriaConfig
|
||||||
echoContent skyBlue "\n进度 $1/${totalProgress} : 账号"
|
echoContent skyBlue "\n进度 $1/${totalProgress} : 账号"
|
||||||
local show
|
local show
|
||||||
# VLESS TCP
|
# VLESS TCP
|
||||||
|
@ -2980,16 +3245,21 @@ showAccounts() {
|
||||||
if echo "${currentInstallProtocolType}" | grep -q trojan; then
|
if echo "${currentInstallProtocolType}" | grep -q trojan; then
|
||||||
echoContent skyBlue "===================== Trojan TCP TLS/XTLS-direct/XTLS-splice ======================\n"
|
echoContent skyBlue "===================== Trojan TCP TLS/XTLS-direct/XTLS-splice ======================\n"
|
||||||
jq .inbounds[0].settings.clients ${configPath}02_trojan_TCP_inbounds.json | jq -c '.[]' | while read -r user; do
|
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)"
|
local email=
|
||||||
defaultBase64Code trojanTCPXTLS "$(echo "${user}" | jq -r .email)" "$(echo "${user}" | jq -r .password)"
|
email=$(echo "${user}" | jq -r .email)
|
||||||
|
echoContent skyBlue "\n ---> 账号:${email}"
|
||||||
|
defaultBase64Code trojanTCPXTLS "${email}" "$(echo "${user}" | jq -r .password)"
|
||||||
done
|
done
|
||||||
|
|
||||||
else
|
else
|
||||||
echoContent skyBlue "===================== VLESS TCP TLS/XTLS-direct/XTLS-splice ======================\n"
|
echoContent skyBlue "===================== VLESS TCP TLS/XTLS-direct/XTLS-splice ======================\n"
|
||||||
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)"
|
local email=
|
||||||
|
email=$(echo "${user}" | jq -r .email)
|
||||||
|
|
||||||
|
echoContent skyBlue "\n ---> 账号:${email}"
|
||||||
echo
|
echo
|
||||||
defaultBase64Code vlesstcp "$(echo "${user}" | jq -r .email)" "$(echo "${user}" | jq -r .id)"
|
defaultBase64Code vlesstcp "${email}" "$(echo "${user}" | jq -r .id)"
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -2998,14 +3268,17 @@ showAccounts() {
|
||||||
echoContent skyBlue "\n================================ VLESS WS TLS CDN ================================\n"
|
echoContent skyBlue "\n================================ VLESS WS TLS CDN ================================\n"
|
||||||
|
|
||||||
jq .inbounds[0].settings.clients ${configPath}03_VLESS_WS_inbounds.json | jq -c '.[]' | while read -r user; do
|
jq .inbounds[0].settings.clients ${configPath}03_VLESS_WS_inbounds.json | jq -c '.[]' | while read -r user; do
|
||||||
echoContent skyBlue "\n ---> 账号:$(echo "${user}" | jq -r .email)"
|
local email=
|
||||||
|
email=$(echo "${user}" | jq -r .email)
|
||||||
|
|
||||||
|
echoContent skyBlue "\n ---> 账号:${email}"
|
||||||
echo
|
echo
|
||||||
local path="${currentPath}ws"
|
local path="${currentPath}ws"
|
||||||
# if [[ ${coreInstallType} == "1" ]]; then
|
# if [[ ${coreInstallType} == "1" ]]; then
|
||||||
# echoContent yellow "Xray的0-RTT path后面会有,不兼容以v2ray为核心的客户端,请手动删除后使用\n"
|
# echoContent yellow "Xray的0-RTT path后面会有,不兼容以v2ray为核心的客户端,请手动删除后使用\n"
|
||||||
# path="${currentPath}ws"
|
# path="${currentPath}ws"
|
||||||
# fi
|
# fi
|
||||||
defaultBase64Code vlessws "$(echo "${user}" | jq -r .email)" "$(echo "${user}" | jq -r .id)"
|
defaultBase64Code vlessws "${email}" "$(echo "${user}" | jq -r .id)"
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -3017,9 +3290,12 @@ showAccounts() {
|
||||||
path="${currentPath}vws"
|
path="${currentPath}vws"
|
||||||
fi
|
fi
|
||||||
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)"
|
local email=
|
||||||
|
email=$(echo "${user}" | jq -r .email)
|
||||||
|
|
||||||
|
echoContent skyBlue "\n ---> 账号:${email}"
|
||||||
echo
|
echo
|
||||||
defaultBase64Code vmessws "$(echo "${user}" | jq -r .email)" "$(echo "${user}" | jq -r .id)"
|
defaultBase64Code vmessws "${email}" "$(echo "${user}" | jq -r .id)"
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -3030,9 +3306,13 @@ showAccounts() {
|
||||||
# local serviceName
|
# local serviceName
|
||||||
# serviceName=$(jq -r .inbounds[0].streamSettings.grpcSettings.serviceName ${configPath}06_VLESS_gRPC_inbounds.json)
|
# 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)"
|
|
||||||
|
local email=
|
||||||
|
email=$(echo "${user}" | jq -r .email)
|
||||||
|
|
||||||
|
echoContent skyBlue "\n ---> 账号:${email}"
|
||||||
echo
|
echo
|
||||||
defaultBase64Code vlessgrpc "$(echo "${user}" | jq -r .email)" "$(echo "${user}" | jq -r .id)"
|
defaultBase64Code vlessgrpc "${email}" "$(echo "${user}" | jq -r .id)"
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
@ -3041,23 +3321,44 @@ showAccounts() {
|
||||||
if echo ${currentInstallProtocolType} | grep -q 4; 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)"
|
local email=
|
||||||
|
email=$(echo "${user}" | jq -r .email)
|
||||||
|
echoContent skyBlue "\n ---> 账号:${email}"
|
||||||
|
|
||||||
defaultBase64Code trojan "$(echo "${user}" | jq -r .email)" "$(echo "${user}" | jq -r .password)"
|
defaultBase64Code trojan "${email}" "$(echo "${user}" | jq -r .password)"
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if echo ${currentInstallProtocolType} | grep -q 2; then
|
if echo ${currentInstallProtocolType} | grep -q 2; then
|
||||||
echoContent skyBlue "\n================================ Trojan gRPC TLS ================================\n"
|
echoContent skyBlue "\n================================ Trojan gRPC TLS ================================\n"
|
||||||
echoContent red "\n --->gRPC处于测试阶段,可能对你使用的客户端不兼容,如不能使用请忽略"
|
echoContent red "\n --->gRPC处于测试阶段,可能对你使用的客户端不兼容,如不能使用请忽略"
|
||||||
# local serviceName=
|
|
||||||
# serviceName=$(jq -r .inbounds[0].streamSettings.grpcSettings.serviceName ${configPath}04_trojan_gRPC_inbounds.json)
|
|
||||||
jq .inbounds[0].settings.clients ${configPath}04_trojan_gRPC_inbounds.json | jq -c '.[]' | while read -r user; do
|
jq .inbounds[0].settings.clients ${configPath}04_trojan_gRPC_inbounds.json | jq -c '.[]' | while read -r user; do
|
||||||
echoContent skyBlue "\n ---> 账号:$(echo "${user}" | jq -r .email)"
|
local email=
|
||||||
|
email=$(echo "${user}" | jq -r .email)
|
||||||
|
|
||||||
|
echoContent skyBlue "\n ---> 账号:${email}"
|
||||||
echo
|
echo
|
||||||
defaultBase64Code trojangrpc "$(echo "${user}" | jq -r .email)" "$(echo "${user}" | jq -r .password)"
|
defaultBase64Code trojangrpc "${email}" "$(echo "${user}" | jq -r .password)"
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
if echo ${currentInstallProtocolType} | grep -q 6; then
|
||||||
|
echoContent skyBlue "\n================================ Hysteria TLS ================================\n"
|
||||||
|
echoContent red "\n --->Hysteria速度依赖与本地的网络环境,如果被QoS使用体验会非常差。IDC也有可能认为是攻击,请谨慎使用"
|
||||||
|
jq .auth.config ${hysteriaConfigPath}config.json | jq -r '.[]' | while read -r user; do
|
||||||
|
local vlessUser=
|
||||||
|
vlessUser=$(jq '.inbounds[0].settings.clients[]|select(.id=="'"${user}"'")' ${configPath}02_VLESS_TCP_inbounds.json)
|
||||||
|
local email=
|
||||||
|
email=$(echo "${vlessUser}" | jq -r .email)
|
||||||
|
|
||||||
|
if [[ -n ${vlessUser} ]]; then
|
||||||
|
echoContent skyBlue "\n ---> 账号:${email}"
|
||||||
|
echo
|
||||||
|
defaultBase64Code hysteria "${email}" "${user}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
done
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
if [[ -z ${show} ]]; then
|
if [[ -z ${show} ]]; then
|
||||||
echoContent red " ---> 未安装"
|
echoContent red " ---> 未安装"
|
||||||
|
@ -3065,9 +3366,6 @@ showAccounts() {
|
||||||
}
|
}
|
||||||
# 移除nginx302配置
|
# 移除nginx302配置
|
||||||
removeNginx302() {
|
removeNginx302() {
|
||||||
# 查找到302那行并删除
|
|
||||||
# local line302Result=
|
|
||||||
# line302Result=$(grep -n "return 302" </etc/nginx/conf.d/alone.conf | tail -n 1)
|
|
||||||
local count=0
|
local count=0
|
||||||
grep -n "return 302" <"/etc/nginx/conf.d/alone.conf" | while read -r line; do
|
grep -n "return 302" <"/etc/nginx/conf.d/alone.conf" | while read -r line; do
|
||||||
|
|
||||||
|
@ -3202,8 +3500,8 @@ addCorePort() {
|
||||||
echoContent red "\n=============================================================="
|
echoContent red "\n=============================================================="
|
||||||
echoContent yellow "# 注意事项\n"
|
echoContent yellow "# 注意事项\n"
|
||||||
echoContent yellow "支持批量添加"
|
echoContent yellow "支持批量添加"
|
||||||
echoContent yellow "不影响443端口的使用"
|
echoContent yellow "不影响默认端口的使用"
|
||||||
echoContent yellow "查看账号时,只会展示默认端口443的账号"
|
echoContent yellow "查看账号时,只会展示默认端口的账号"
|
||||||
echoContent yellow "不允许有特殊字符,注意逗号的格式"
|
echoContent yellow "不允许有特殊字符,注意逗号的格式"
|
||||||
echoContent yellow "录入示例:2053,2083,2087\n"
|
echoContent yellow "录入示例:2053,2083,2087\n"
|
||||||
|
|
||||||
|
@ -3305,6 +3603,12 @@ unInstall() {
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [[ -z "${hysteriaConfigPath}" ]]; then
|
||||||
|
handleHysteria stop
|
||||||
|
rm -rf /etc/systemd/system/hysteria.service
|
||||||
|
echoContent green " ---> 删除Hysteria开机自启完成"
|
||||||
|
fi
|
||||||
|
|
||||||
if [[ -f "/root/.acme.sh/acme.sh.env" ]] && grep -q 'acme.sh.env' </root/.bashrc; then
|
if [[ -f "/root/.acme.sh/acme.sh.env" ]] && grep -q 'acme.sh.env' </root/.bashrc; then
|
||||||
sed -i 's/. "\/root\/.acme.sh\/acme.sh.env"//g' "$(grep '. "/root/.acme.sh/acme.sh.env"' -rl /root/.bashrc)"
|
sed -i 's/. "\/root\/.acme.sh\/acme.sh.env"//g' "$(grep '. "/root/.acme.sh/acme.sh.env"' -rl /root/.bashrc)"
|
||||||
fi
|
fi
|
||||||
|
@ -3333,6 +3637,8 @@ unInstall() {
|
||||||
echoContent green " ---> 卸载v2ray-agent脚本完成"
|
echoContent green " ---> 卸载v2ray-agent脚本完成"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#updateGeoSite
|
||||||
|
|
||||||
# 修改V2Ray CDN节点
|
# 修改V2Ray CDN节点
|
||||||
updateV2RayCDN() {
|
updateV2RayCDN() {
|
||||||
|
|
||||||
|
@ -3548,6 +3854,12 @@ addUser() {
|
||||||
trojanTCPResult=$(jq -r ".inbounds[0].settings.clients += [${trojanUsers}]" ${configPath}04_trojan_TCP_inbounds.json)
|
trojanTCPResult=$(jq -r ".inbounds[0].settings.clients += [${trojanUsers}]" ${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 6; then
|
||||||
|
local hysteriaResult
|
||||||
|
hysteriaResult=$(jq -r ".auth.config += [\"${uuid}\"]" ${hysteriaConfigPath}config.json)
|
||||||
|
echo "${hysteriaResult}" | jq . >${hysteriaConfigPath}config.json
|
||||||
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
reloadCore
|
reloadCore
|
||||||
|
@ -3601,6 +3913,12 @@ removeUser() {
|
||||||
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 6; then
|
||||||
|
local hysteriaResult
|
||||||
|
hysteriaResult=$(jq -r 'del(.auth.config['${delUserIndex}'])' ${hysteriaConfigPath}config.json)
|
||||||
|
echo "${hysteriaResult}" | jq . >${hysteriaConfigPath}config.json
|
||||||
|
fi
|
||||||
|
|
||||||
reloadCore
|
reloadCore
|
||||||
fi
|
fi
|
||||||
manageAccount 1
|
manageAccount 1
|
||||||
|
@ -4539,6 +4857,11 @@ reloadCore() {
|
||||||
handleV2Ray stop
|
handleV2Ray stop
|
||||||
handleV2Ray start
|
handleV2Ray start
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [[ -n "${hysteriaConfigPath}" ]]; then
|
||||||
|
handleHysteria stop
|
||||||
|
handleHysteria start
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# dns解锁Netflix
|
# dns解锁Netflix
|
||||||
|
@ -4869,6 +5192,32 @@ xrayCoreInstall() {
|
||||||
checkGFWStatue 12
|
checkGFWStatue 12
|
||||||
showAccounts 13
|
showAccounts 13
|
||||||
}
|
}
|
||||||
|
# Hysteria安装
|
||||||
|
hysteriaCoreInstall() {
|
||||||
|
if [[ -z "${coreInstallType}" ]]; then
|
||||||
|
echoContent red "\n ---> 由于环境依赖,如安装hysteria,请先安装Xray/V2ray"
|
||||||
|
menu
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
totalProgress=5
|
||||||
|
installHysteria 1
|
||||||
|
initHysteriaConfig 2
|
||||||
|
installHysteriaService 3
|
||||||
|
handleHysteria start
|
||||||
|
showAccounts 5
|
||||||
|
}
|
||||||
|
# 卸载 hysteria
|
||||||
|
unInstallHysteriaCore() {
|
||||||
|
|
||||||
|
if [[ -z "${hysteriaConfigPath}" ]]; then
|
||||||
|
echoContent red "\n ---> 未安装"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
handleHysteria stop
|
||||||
|
rm -rf /etc/v2ray-agent/hysteria/*
|
||||||
|
rm -rf /etc/systemd/system/hysteria.service
|
||||||
|
echoContent green " ---> 卸载完成"
|
||||||
|
}
|
||||||
|
|
||||||
# 核心管理
|
# 核心管理
|
||||||
coreVersionManageMenu() {
|
coreVersionManageMenu() {
|
||||||
|
@ -4900,7 +5249,8 @@ cronRenewTLS() {
|
||||||
manageAccount() {
|
manageAccount() {
|
||||||
echoContent skyBlue "\n功能 1/${totalProgress} : 账号管理"
|
echoContent skyBlue "\n功能 1/${totalProgress} : 账号管理"
|
||||||
echoContent red "\n=============================================================="
|
echoContent red "\n=============================================================="
|
||||||
echoContent yellow "# 每次删除、添加账号后,需要重新查看订阅生成订阅\n"
|
echoContent yellow "# 每次删除、添加账号后,需要重新查看订阅生成订阅"
|
||||||
|
echoContent yellow "# 如安装了Hysteria,账号会同时添加到Hysteria\n"
|
||||||
echoContent yellow "1.查看账号"
|
echoContent yellow "1.查看账号"
|
||||||
echoContent yellow "2.查看订阅"
|
echoContent yellow "2.查看订阅"
|
||||||
echoContent yellow "3.添加用户"
|
echoContent yellow "3.添加用户"
|
||||||
|
@ -4999,12 +5349,31 @@ switchAlpn() {
|
||||||
fi
|
fi
|
||||||
reloadCore
|
reloadCore
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# hysteria管理
|
||||||
|
manageHysteria() {
|
||||||
|
echoContent skyBlue "\n进度 1/1 : Hysteria管理"
|
||||||
|
echoContent red "\n=============================================================="
|
||||||
|
echoContent yellow "1.安装"
|
||||||
|
echoContent yellow "2.卸载"
|
||||||
|
echoContent yellow "3.更新core"
|
||||||
|
echoContent red "=============================================================="
|
||||||
|
read -r -p "请选择:" installHysteriaStatus
|
||||||
|
if [[ "${installHysteriaStatus}" == "1" ]]; then
|
||||||
|
hysteriaCoreInstall
|
||||||
|
elif [[ "${installHysteriaStatus}" == "2" ]]; then
|
||||||
|
unInstallHysteriaCore
|
||||||
|
elif [[ "${installHysteriaStatus}" == "3" ]]; then
|
||||||
|
installHysteria 1
|
||||||
|
handleHysteria start
|
||||||
|
fi
|
||||||
|
}
|
||||||
# 主菜单
|
# 主菜单
|
||||||
menu() {
|
menu() {
|
||||||
cd "$HOME" || exit
|
cd "$HOME" || exit
|
||||||
echoContent red "\n=============================================================="
|
echoContent red "\n=============================================================="
|
||||||
echoContent green "作者:mack-a"
|
echoContent green "作者:mack-a"
|
||||||
echoContent green "当前版本:v2.6.5"
|
echoContent green "当前版本:v2.6.6"
|
||||||
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
|
||||||
|
@ -5027,25 +5396,26 @@ menu() {
|
||||||
echoContent yellow "3.切换Trojan[XTLS]"
|
echoContent yellow "3.切换Trojan[XTLS]"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
echoContent yellow "4.Hysteria管理"
|
||||||
echoContent skyBlue "-------------------------工具管理-----------------------------"
|
echoContent skyBlue "-------------------------工具管理-----------------------------"
|
||||||
echoContent yellow "4.账号管理"
|
echoContent yellow "5.账号管理"
|
||||||
echoContent yellow "5.更换伪装站"
|
echoContent yellow "6.更换伪装站"
|
||||||
echoContent yellow "6.更新证书"
|
echoContent yellow "7.更新证书"
|
||||||
echoContent yellow "7.更换CDN节点"
|
echoContent yellow "8.更换CDN节点"
|
||||||
echoContent yellow "8.IPv6分流"
|
echoContent yellow "9.IPv6分流"
|
||||||
echoContent yellow "9.WARP分流"
|
echoContent yellow "10.WARP分流"
|
||||||
echoContent yellow "10.流媒体工具"
|
echoContent yellow "11.流媒体工具"
|
||||||
echoContent yellow "11.添加新端口"
|
echoContent yellow "12.添加新端口"
|
||||||
echoContent yellow "12.BT下载管理"
|
echoContent yellow "13.BT下载管理"
|
||||||
echoContent yellow "13.切换alpn"
|
echoContent yellow "14.切换alpn"
|
||||||
echoContent yellow "14.域名黑名单"
|
echoContent yellow "15.域名黑名单"
|
||||||
echoContent skyBlue "-------------------------版本管理-----------------------------"
|
echoContent skyBlue "-------------------------版本管理-----------------------------"
|
||||||
echoContent yellow "15.core管理"
|
echoContent yellow "16.core管理"
|
||||||
echoContent yellow "16.更新脚本"
|
echoContent yellow "17.更新脚本"
|
||||||
echoContent yellow "17.安装BBR、DD脚本"
|
echoContent yellow "18.安装BBR、DD脚本"
|
||||||
echoContent skyBlue "-------------------------脚本管理-----------------------------"
|
echoContent skyBlue "-------------------------脚本管理-----------------------------"
|
||||||
echoContent yellow "18.查看日志"
|
echoContent yellow "19.查看日志"
|
||||||
echoContent yellow "19.卸载脚本"
|
echoContent yellow "20.卸载脚本"
|
||||||
echoContent red "=============================================================="
|
echoContent red "=============================================================="
|
||||||
mkdirTools
|
mkdirTools
|
||||||
aliasInstall
|
aliasInstall
|
||||||
|
@ -5061,51 +5431,54 @@ menu() {
|
||||||
initXrayFrontingConfig 1
|
initXrayFrontingConfig 1
|
||||||
;;
|
;;
|
||||||
4)
|
4)
|
||||||
manageAccount 1
|
manageHysteria
|
||||||
;;
|
;;
|
||||||
5)
|
5)
|
||||||
updateNginxBlog 1
|
manageAccount 1
|
||||||
;;
|
;;
|
||||||
6)
|
6)
|
||||||
renewalTLS 1
|
updateNginxBlog 1
|
||||||
;;
|
;;
|
||||||
7)
|
7)
|
||||||
updateV2RayCDN 1
|
renewalTLS 1
|
||||||
;;
|
;;
|
||||||
8)
|
8)
|
||||||
ipv6Routing 1
|
updateV2RayCDN 1
|
||||||
;;
|
;;
|
||||||
9)
|
9)
|
||||||
warpRouting 1
|
ipv6Routing 1
|
||||||
;;
|
;;
|
||||||
10)
|
10)
|
||||||
streamingToolbox 1
|
warpRouting 1
|
||||||
;;
|
;;
|
||||||
11)
|
11)
|
||||||
addCorePort 1
|
streamingToolbox 1
|
||||||
;;
|
;;
|
||||||
12)
|
12)
|
||||||
btTools 1
|
addCorePort 1
|
||||||
;;
|
;;
|
||||||
13)
|
13)
|
||||||
switchAlpn 1
|
btTools 1
|
||||||
;;
|
;;
|
||||||
14)
|
14)
|
||||||
blacklist 1
|
switchAlpn 1
|
||||||
;;
|
;;
|
||||||
15)
|
15)
|
||||||
coreVersionManageMenu 1
|
blacklist 1
|
||||||
;;
|
;;
|
||||||
16)
|
16)
|
||||||
updateV2RayAgent 1
|
coreVersionManageMenu 1
|
||||||
;;
|
;;
|
||||||
17)
|
17)
|
||||||
bbrInstall
|
updateV2RayAgent 1
|
||||||
;;
|
;;
|
||||||
18)
|
18)
|
||||||
checkLog 1
|
bbrInstall
|
||||||
;;
|
;;
|
||||||
19)
|
19)
|
||||||
|
checkLog 1
|
||||||
|
;;
|
||||||
|
20)
|
||||||
unInstall 1
|
unInstall 1
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
Loading…
Reference in New Issue