fix: run VLESS Reality on Xray instead of sing-box for v2rayN

sing-box Hy2 stays on 8443+; port 443 VLESS uses Xray which pairs reliably with v2rayN/Xray-core clients.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-06-16 11:56:22 +08:00
parent 5685b869dc
commit c9895133cb
9 changed files with 305 additions and 39 deletions
+71
View File
@@ -0,0 +1,71 @@
#!/usr/bin/env bash
# 核对 Reality 密钥是否一致,并验证 Xray 配置
set -euo pipefail
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
ENV_FILE="${ROOT}/.env"
XRAY_CFG="/usr/local/etc/xray/config.json"
SB_CFG="/etc/sing-box/config.json"
[[ -f "$ENV_FILE" ]] || { echo "缺少 $ENV_FILE"; exit 1; }
# shellcheck disable=SC1090
source "$ENV_FILE"
echo "========== .env =========="
grep ^REALITY_ "$ENV_FILE" | grep -v PRIVATE || true
echo "REALITY_PRIVATE_KEY=***(已隐藏)"
if command -v xray &>/dev/null && [[ -f "$XRAY_CFG" ]]; then
echo ""
echo "========== Xray config.json =========="
ENV_FILE="$ENV_FILE" XRAY_CFG="$XRAY_CFG" python3 - <<'PY'
import json, os
from pathlib import Path
env = {}
for line in Path(os.environ["ENV_FILE"]).read_text().splitlines():
line = line.strip()
if not line or line.startswith("#") or "=" not in line:
continue
k, _, v = line.partition("=")
env[k.strip()] = v.strip()
cfg = json.load(open(os.environ["XRAY_CFG"]))
rs = cfg["inbounds"][0]["streamSettings"]["realitySettings"]
pk = rs["privateKey"]
print("privateKey:", pk[:8] + "..." if pk else "(empty)")
print("shortIds:", rs.get("shortIds"))
print("serverNames:", rs.get("serverNames"))
print("clients:", len(cfg["inbounds"][0]["settings"]["clients"]))
match = pk == env.get("REALITY_PRIVATE_KEY", "")
print("privateKey 与 .env 一致:", "是" if match else "否 ← 需运行 render-xray.py")
PY
echo ""
echo "========== xray -test =========="
xray run -test -c "$XRAY_CFG"
else
echo ""
echo "Xray 未安装或配置不存在。VLESS Reality 需 Xray"
echo " bash -c \"\$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)\" @ install"
echo " python3 ${ROOT}/scripts/render-xray.py"
fi
if [[ -f "$SB_CFG" ]] && grep -q vless-reality "$SB_CFG" 2>/dev/null; then
echo ""
echo "[!] sing-box 仍含 vless-reality inbound,会与 Xray 争抢 443。"
echo " 请运行: python3 ${ROOT}/scripts/render-server.py && systemctl restart sing-box"
fi
if command -v xray &>/dev/null && [[ -n "${REALITY_PRIVATE_KEY:-}" ]]; then
echo ""
echo "========== 公钥配对 =========="
DERIVED="$(xray x25519 -i "$REALITY_PRIVATE_KEY" 2>/dev/null | awk '/Public key/ {print $3}')"
if [[ -n "$DERIVED" ]]; then
if [[ "$DERIVED" == "${REALITY_PUBLIC_KEY:-}" ]]; then
echo "公钥与私钥配对: 是"
else
echo "公钥与私钥配对: 否"
echo " .env PUBLIC: ${REALITY_PUBLIC_KEY:-}"
echo " 推导 PUBLIC: $DERIVED"
echo " 请重新运行 generate-keys.sh 并 render-xray.py"
fi
fi
fi