From 6a196e418bd8ece7813b8a71eab1ffea046f112e Mon Sep 17 00:00:00 2001 From: mack-a <57424792+mack-a@users.noreply.github.com> Date: Sat, 2 Aug 2025 16:43:58 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E8=84=9A=E6=9C=AC):=20=E5=A2=9E=E5=8A=A0x?= =?UTF-8?q?ray-core=20mldsa65?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- install.sh | 62 ++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 53 insertions(+), 9 deletions(-) diff --git a/install.sh b/install.sh index 00a8941..8f6542f 100644 --- a/install.sh +++ b/install.sh @@ -433,6 +433,9 @@ readInstallProtocolType() { currentRealityPrivateKey= currentRealityPublicKey= + currentRealityMldsa65Seed= + currentRealityMldsa65Verify= + singBoxVLESSVisionPort= singBoxHysteria2Port= singBoxTrojanPort= @@ -515,6 +518,10 @@ readInstallProtocolType() { currentRealityPublicKey=$(jq -r .inbounds[0].streamSettings.realitySettings.publicKey "${row}.json") currentRealityPrivateKey=$(jq -r .inbounds[0].streamSettings.realitySettings.privateKey "${row}.json") + + currentRealityMldsa65Seed=$(jq -r .inbounds[0].streamSettings.realitySettings.mldsa65Seed "${row}.json") + currentRealityMldsa65Verify=$(jq -r .inbounds[0].streamSettings.realitySettings.mldsa65Verify "${row}.json") + frontingTypeReality=07_VLESS_vision_reality_inbounds elif [[ "${coreInstallType}" == "2" ]]; then @@ -4332,6 +4339,7 @@ EOF initXrayXHTTPort initRealityClientServersName initRealityKey + initRealityMldsa65 cat </etc/v2ray-agent/xray/conf/12_VLESS_XHTTP_inbounds.json { "inbounds":[ @@ -4515,6 +4523,7 @@ EOF initXrayRealityPort initRealityClientServersName initRealityKey + initRealityMldsa65 cat </etc/v2ray-agent/xray/conf/07_VLESS_vision_reality_inbounds.json { @@ -5307,17 +5316,19 @@ EOF elif [[ "${type}" == "vlessReality" ]]; then local realityServerName=${xrayVLESSRealityServerName} local publicKey=${currentRealityPublicKey} + local realityMldsa65Verify=${currentRealityMldsa65Verify} + if [[ "${coreInstallType}" == "2" ]]; then realityServerName=${singBoxVLESSRealityVisionServerName} publicKey=${singBoxVLESSRealityPublicKey} fi echoContent yellow " ---> 通用格式(VLESS+reality+uTLS+Vision)" - echoContent green " vless://${id}@$(getPublicIP):${port}?encryption=none&security=reality&type=tcp&sni=${realityServerName}&fp=chrome&pbk=${publicKey}&sid=6ba85179e30d4fc2&flow=xtls-rprx-vision#${email}\n" + echoContent green " vless://${id}@$(getPublicIP):${port}?encryption=none&security=reality&pqv=${realityMldsa65Verify}&type=tcp&sni=${realityServerName}&fp=chrome&pbk=${publicKey}&sid=6ba85179e30d4fc2&flow=xtls-rprx-vision#${email}\n" echoContent yellow " ---> 格式化明文(VLESS+reality+uTLS+Vision)" - echoContent green "协议类型:VLESS reality,地址:$(getPublicIP),publicKey:${publicKey},shortId: 6ba85179e30d4fc2,serverNames:${realityServerName},端口:${port},用户ID:${id},传输方式:tcp,账户名:${email}\n" + echoContent green "协议类型:VLESS reality,地址:$(getPublicIP),publicKey:${publicKey},shortId: 6ba85179e30d4fc2,pqv=${realityMldsa65Verify},serverNames:${realityServerName},端口:${port},用户ID:${id},传输方式:tcp,账户名:${email}\n" cat <>"/etc/v2ray-agent/subscribe_local/default/${user}" -vless://${id}@$(getPublicIP):${port}?encryption=none&security=reality&type=tcp&sni=${realityServerName}&fp=chrome&pbk=${publicKey}&sid=6ba85179e30d4fc2&flow=xtls-rprx-vision#${email} +vless://${id}@$(getPublicIP):${port}?encryption=none&security=reality&pqv=${realityMldsa65Verify}&type=tcp&sni=${realityServerName}&fp=chrome&pbk=${publicKey}&sid=6ba85179e30d4fc2&flow=xtls-rprx-vision#${email} EOF cat <>"/etc/v2ray-agent/subscribe_local/clashMeta/${user}" - name: "${email}" @@ -5340,23 +5351,25 @@ EOF echo "${singBoxSubscribeLocalConfig}" | jq . >"/etc/v2ray-agent/subscribe_local/sing-box/${user}" echoContent yellow " ---> 二维码 VLESS(VLESS+reality+uTLS+Vision)" - echoContent green " https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=vless%3A%2F%2F${id}%40$(getPublicIP)%3A${port}%3Fencryption%3Dnone%26security%3Dreality%26type%3Dtcp%26sni%3D${realityServerName}%26fp%3Dchrome%26pbk%3D${publicKey}%26sid%3D6ba85179e30d4fc2%26flow%3Dxtls-rprx-vision%23${email}\n" + echoContent green " https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=vless%3A%2F%2F${id}%40$(getPublicIP)%3A${port}%3Fencryption%3Dnone%26security%3Dreality%26pqv%3D${realityMldsa65Verify}%26type%3Dtcp%26sni%3D${realityServerName}%26fp%3Dchrome%26pbk%3D${publicKey}%26sid%3D6ba85179e30d4fc2%26flow%3Dxtls-rprx-vision%23${email}\n" elif [[ "${type}" == "vlessRealityGRPC" ]]; then local realityServerName=${xrayVLESSRealityServerName} local publicKey=${currentRealityPublicKey} + local realityMldsa65Verify=${currentRealityMldsa65Verify} + if [[ "${coreInstallType}" == "2" ]]; then realityServerName=${singBoxVLESSRealityGRPCServerName} publicKey=${singBoxVLESSRealityPublicKey} fi echoContent yellow " ---> 通用格式(VLESS+reality+uTLS+gRPC)" - echoContent green " vless://${id}@$(getPublicIP):${port}?encryption=none&security=reality&type=grpc&sni=${realityServerName}&fp=chrome&pbk=${publicKey}&sid=6ba85179e30d4fc2&path=grpc&serviceName=grpc#${email}\n" + echoContent green " vless://${id}@$(getPublicIP):${port}?encryption=none&security=reality&pqv=${realityMldsa65Verify}&type=grpc&sni=${realityServerName}&fp=chrome&pbk=${publicKey}&sid=6ba85179e30d4fc2&path=grpc&serviceName=grpc#${email}\n" echoContent yellow " ---> 格式化明文(VLESS+reality+uTLS+gRPC)" - echoContent green "协议类型:VLESS reality,serviceName:grpc,地址:$(getPublicIP),publicKey:${publicKey},shortId: 6ba85179e30d4fc2,serverNames:${realityServerName},端口:${port},用户ID:${id},传输方式:gRPC,client-fingerprint:chrome,账户名:${email}\n" + echoContent green "协议类型:VLESS reality,serviceName:grpc,地址:$(getPublicIP),publicKey:${publicKey},shortId: 6ba85179e30d4fc2,pqv=${realityMldsa65Verify},serverNames:${realityServerName},端口:${port},用户ID:${id},传输方式:gRPC,client-fingerprint:chrome,账户名:${email}\n" cat <>"/etc/v2ray-agent/subscribe_local/default/${user}" -vless://${id}@$(getPublicIP):${port}?encryption=none&security=reality&type=grpc&sni=${realityServerName}&fp=chrome&pbk=${publicKey}&sid=6ba85179e30d4fc2&path=grpc&serviceName=grpc#${email} +vless://${id}@$(getPublicIP):${port}?encryption=none&security=reality&pqv=${realityMldsa65Verify}&type=grpc&sni=${realityServerName}&fp=chrome&pbk=${publicKey}&sid=6ba85179e30d4fc2&path=grpc&serviceName=grpc#${email} EOF cat <>"/etc/v2ray-agent/subscribe_local/clashMeta/${user}" - name: "${email}" @@ -5380,7 +5393,7 @@ EOF echo "${singBoxSubscribeLocalConfig}" | jq . >"/etc/v2ray-agent/subscribe_local/sing-box/${user}" echoContent yellow " ---> 二维码 VLESS(VLESS+reality+uTLS+gRPC)" - echoContent green " https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=vless%3A%2F%2F${id}%40$(getPublicIP)%3A${port}%3Fencryption%3Dnone%26security%3Dreality%26type%3Dgrpc%26sni%3D${realityServerName}%26fp%3Dchrome%26pbk%3D${publicKey}%26sid%3D6ba85179e30d4fc2%26path%3Dgrpc%26serviceName%3Dgrpc%23${email}\n" + echoContent green " https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=vless%3A%2F%2F${id}%40$(getPublicIP)%3A${port}%3Fencryption%3Dnone%26security%3Dreality%26pqv%3D${realityMldsa65Verify}%26type%3Dgrpc%26sni%3D${realityServerName}%26fp%3Dchrome%26pbk%3D${publicKey}%26sid%3D6ba85179e30d4fc2%26path%3Dgrpc%26serviceName%3Dgrpc%23${email}\n" elif [[ "${type}" == "tuic" ]]; then local tuicUUID= tuicUUID=$(echo "${id}" | awk -F "[_]" '{print $1}') @@ -9371,6 +9384,34 @@ initRealityKey() { echoContent green "\n privateKey:${realityPrivateKey}" echoContent green "\n publicKey:${realityPublicKey}" } +# 初始化 mldsa65Seed +initRealityMldsa65() { + echoContent skyBlue "\n生成Reality mldsa65\n" + if [[ -n "${currentRealityMldsa65}" && -z "${lastInstallationConfig}" ]]; then + read -r -p "读取到上次安装记录,是否使用上次安装时的Seed/Verify ?[y/n]:" historyMldsa65Status + if [[ "${historyMldsa65Status}" == "y" ]]; then + realityMldsa65Seed=${currentRealityMldsa65Seed} + realityMldsa65Verify=${currentRealityMldsa65Verify} + fi + elif [[ -n "${currentRealityMldsa65Seed}" && -n "${lastInstallationConfig}" ]]; then + realityMldsa65Seed=${currentRealityMldsa65Seed} + realityMldsa65Verify=${currentRealityMldsa65Verify} + fi + if [[ -z "${realityMldsa65Seed}" ]]; then + # if [[ "${selectCoreType}" == "2" || "${coreInstallType}" == "2" ]]; then + # realityX25519Key=$(/etc/v2ray-agent/sing-box/sing-box generate reality-keypair) + # realityPrivateKey=$(echo "${realityX25519Key}" | head -1 | awk '{print $2}') + # realityPublicKey=$(echo "${realityX25519Key}" | tail -n 1 | awk '{print $2}') + # echo "publicKey:${realityPublicKey}" >/etc/v2ray-agent/sing-box/conf/config/reality_key + # else + realityMldsa65=$(/etc/v2ray-agent/xray/xray mldsa65) + realityMldsa65Seed=$(echo "${realityMldsa65}" | head -1 | awk '{print $2}') + realityMldsa65Verify=$(echo "${realityMldsa65}" | tail -n 1 | awk '{print $2}') + # fi + fi + echoContent green "\n Seed:${realityMldsa65Seed}" + echoContent green "\n Verify:${realityMldsa65Verify}" +} # 检查reality域名是否符合 checkRealityDest() { local traceResult= @@ -9529,6 +9570,7 @@ initXrayRealityConfig() { echoContent skyBlue "\n进度 $1/${totalProgress} : 初始化 Xray-core reality配置" initXrayRealityPort initRealityKey + initRealityMldsa65 initRealityClientServersName } # 修改reality域名端口等信息 @@ -9796,7 +9838,7 @@ menu() { cd "$HOME" || exit echoContent red "\n==============================================================" echoContent green "作者:mack-a" - echoContent green "当前版本:v3.4.16" + echoContent green "当前版本:v3.4.17" echoContent green "Github:https://github.com/mack-a/v2ray-agent" echoContent green "描述:八合一共存脚本\c" showInstallStatus @@ -9805,6 +9847,8 @@ menu() { echoContent red " " echoContent green "VPS选购攻略:https://www.v2ray-agent.com/archives/1679975663984" echoContent green "年付10美金低价VPS AS4837:https://www.v2ray-agent.com/archives/racknerdtao-can-zheng-li-nian-fu-10mei-yuan" + echoContent green "优质常驻套餐DMIT CN2-GIA:https://www.v2ray-agent.com/archives/186cee7b-9459-4e57-b9b2-b07a4f36931c" + echoContent green "VPS探针:https://ping.v2ray-agent.com/" echoContent red "==============================================================" if [[ -n "${coreInstallType}" ]]; then echoContent yellow "1.重新安装"