From 986902cfb4fa06db74d2fb721458a3c10fc6ee81 Mon Sep 17 00:00:00 2001 From: eishare Date: Mon, 10 Nov 2025 11:31:16 +0800 Subject: [PATCH 01/17] Update tuic.sh --- tuic.sh | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/tuic.sh b/tuic.sh index d9c8465..64656fe 100644 --- a/tuic.sh +++ b/tuic.sh @@ -19,6 +19,28 @@ random_port() { echo $(( (RANDOM % 40000) + 20000 )) } +# ========== 永久固定 UUID & 密码 ========== +UUID_FILE="${HOME}/tuic_data/uuid.txt" +PASS_FILE="${HOME}/tuic_data/pass.txt" + +mkdir -p "$(dirname "$UUID_FILE")" + +if [[ -f "$UUID_FILE" && -s "$UUID_FILE" ]]; then + TUIC_UUID=$(cat "$UUID_FILE") +else + TUIC_UUID="$(cat /proc/sys/kernel/random/uuid 2>/dev/null || uuidgen)" + echo "$TUIC_UUID" > "$UUID_FILE" +fi + +if [[ -f "$PASS_FILE" && -s "$PASS_FILE" ]]; then + TUIC_PASSWORD=$(cat "$PASS_FILE") +else + TUIC_PASSWORD="$(openssl rand -hex 16)" + echo "$TUIC_PASSWORD" > "$PASS_FILE" +fi + +echo "🆔 使用固定 UUID: $TUIC_UUID" + # ========== 选择端口 ========== read_port() { if [[ $# -ge 1 && -n "${1:-}" ]]; then @@ -161,5 +183,27 @@ main() { run_background_loop } +# ================== 无 root 定时自动重启(每日北京时间 00:00) ================== +schedule_restart() { + ( + while true; do + # 获取北京时间小时和分钟 + now_hour=$(TZ='Asia/Shanghai' date +%H) + now_min=$(TZ='Asia/Shanghai' date +%M) + + if [[ "$now_hour" -eq 0 && "$now_min" -eq 0 ]]; then + echo "[定时重启] 到达北京时间 00:00,准备重启 TUIC 服务..." + pkill -f "$TUIC_BIN" || true + sleep 2 + nohup bash "$0" > /dev/null 2>&1 & + exit 0 + fi + + sleep 60 # 每分钟检测一次 + done + ) & +} + main "$@" + From a1eafdd62fee244d1f73ce9452cd3561ab357774 Mon Sep 17 00:00:00 2001 From: eishare Date: Mon, 10 Nov 2025 11:32:58 +0800 Subject: [PATCH 02/17] Update README.md --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 6c7fc5e..b245374 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,9 @@ curl -Ls https://raw.githubusercontent.com/eishare/tuic-hy2-node.js-python/main/ # 2.TUIC在Nodejs/Python一键脚本极简部署(Pterodactyl 翼龙面板) -* 更新自适应端口,无需再手动设置 +# 更新每日零时重启-清空缓存,避免内存溢出导致停机 + +* 自适应端口,无需再手动设置 * TUIC版本:1.4.5 官方更新说明(原文直译): From f4f27b2992e38de54589f22621c4e57c0ce8fd14 Mon Sep 17 00:00:00 2001 From: eishare Date: Mon, 10 Nov 2025 11:35:30 +0800 Subject: [PATCH 03/17] Update README.md --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index b245374..1430274 100644 --- a/README.md +++ b/README.md @@ -15,8 +15,6 @@ curl -Ls https://raw.githubusercontent.com/eishare/tuic-hy2-node.js-python/main/ # 2.TUIC在Nodejs/Python一键脚本极简部署(Pterodactyl 翼龙面板) -# 更新每日零时重启-清空缓存,避免内存溢出导致停机 - * 自适应端口,无需再手动设置 * TUIC版本:1.4.5 官方更新说明(原文直译): From 7d9a9401bcd81b041344cc4b7fbebcdf34d09369 Mon Sep 17 00:00:00 2001 From: eishare Date: Mon, 10 Nov 2025 11:36:20 +0800 Subject: [PATCH 04/17] Update tuic.sh --- tuic.sh | 44 +------------------------------------------- 1 file changed, 1 insertion(+), 43 deletions(-) diff --git a/tuic.sh b/tuic.sh index 64656fe..4e48aa6 100644 --- a/tuic.sh +++ b/tuic.sh @@ -19,28 +19,6 @@ random_port() { echo $(( (RANDOM % 40000) + 20000 )) } -# ========== 永久固定 UUID & 密码 ========== -UUID_FILE="${HOME}/tuic_data/uuid.txt" -PASS_FILE="${HOME}/tuic_data/pass.txt" - -mkdir -p "$(dirname "$UUID_FILE")" - -if [[ -f "$UUID_FILE" && -s "$UUID_FILE" ]]; then - TUIC_UUID=$(cat "$UUID_FILE") -else - TUIC_UUID="$(cat /proc/sys/kernel/random/uuid 2>/dev/null || uuidgen)" - echo "$TUIC_UUID" > "$UUID_FILE" -fi - -if [[ -f "$PASS_FILE" && -s "$PASS_FILE" ]]; then - TUIC_PASSWORD=$(cat "$PASS_FILE") -else - TUIC_PASSWORD="$(openssl rand -hex 16)" - echo "$TUIC_PASSWORD" > "$PASS_FILE" -fi - -echo "🆔 使用固定 UUID: $TUIC_UUID" - # ========== 选择端口 ========== read_port() { if [[ $# -ge 1 && -n "${1:-}" ]]; then @@ -183,27 +161,7 @@ main() { run_background_loop } -# ================== 无 root 定时自动重启(每日北京时间 00:00) ================== -schedule_restart() { - ( - while true; do - # 获取北京时间小时和分钟 - now_hour=$(TZ='Asia/Shanghai' date +%H) - now_min=$(TZ='Asia/Shanghai' date +%M) - - if [[ "$now_hour" -eq 0 && "$now_min" -eq 0 ]]; then - echo "[定时重启] 到达北京时间 00:00,准备重启 TUIC 服务..." - pkill -f "$TUIC_BIN" || true - sleep 2 - nohup bash "$0" > /dev/null 2>&1 & - exit 0 - fi - - sleep 60 # 每分钟检测一次 - done - ) & -} - main "$@" + From 72c50f7039ed0584aa8690b54043d0168a2ecf00 Mon Sep 17 00:00:00 2001 From: eishare Date: Mon, 10 Nov 2025 11:38:12 +0800 Subject: [PATCH 05/17] Update tuic.sh --- tuic.sh | 168 +------------------------------------------------------- 1 file changed, 1 insertion(+), 167 deletions(-) diff --git a/tuic.sh b/tuic.sh index 4e48aa6..9c6cafd 100644 --- a/tuic.sh +++ b/tuic.sh @@ -1,167 +1 @@ -#!/bin/bash -# ========================================= -# TUIC v1.4.5 over QUIC 自动部署脚本(免 root) -# 固定 SNI:www.bing.com, -# ========================================= -set -euo pipefail -export LC_ALL=C -IFS=$'\n\t' - -MASQ_DOMAIN="www.bing.com" -SERVER_TOML="server.toml" -CERT_PEM="tuic-cert.pem" -KEY_PEM="tuic-key.pem" -LINK_TXT="tuic_link.txt" -TUIC_BIN="./tuic-server" - -# ========== 随机端口 ========== -random_port() { - echo $(( (RANDOM % 40000) + 20000 )) -} - -# ========== 选择端口 ========== -read_port() { - if [[ $# -ge 1 && -n "${1:-}" ]]; then - TUIC_PORT="$1" - echo "✅ Using specified port: $TUIC_PORT" - return - fi - - if [[ -n "${SERVER_PORT:-}" ]]; then - TUIC_PORT="$SERVER_PORT" - echo "✅ Using environment port: $TUIC_PORT" - return - fi - - TUIC_PORT=$(random_port) - echo "🎲 Random port selected: $TUIC_PORT" -} - -# ========== 检查已有配置 ========== -load_existing_config() { - if [[ -f "$SERVER_TOML" ]]; then - TUIC_PORT=$(grep '^server' "$SERVER_TOML" | grep -Eo '[0-9]+') - TUIC_UUID=$(grep '^\[users\]' -A1 "$SERVER_TOML" | tail -n1 | awk '{print $1}') - TUIC_PASSWORD=$(grep '^\[users\]' -A1 "$SERVER_TOML" | tail -n1 | awk -F'"' '{print $2}') - echo "📂 Existing config detected. Loading..." - return 0 - fi - return 1 -} - -# ========== 生成证书 ========== -generate_cert() { - if [[ -f "$CERT_PEM" && -f "$KEY_PEM" ]]; then - echo "🔐 Certificate exists, skipping." - return - fi - echo "🔐 Generating self-signed certificate for ${MASQ_DOMAIN}..." - openssl req -x509 -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 \ - -keyout "$KEY_PEM" -out "$CERT_PEM" -subj "/CN=${MASQ_DOMAIN}" -days 365 -nodes >/dev/null 2>&1 - chmod 600 "$KEY_PEM" - chmod 644 "$CERT_PEM" -} - -# ========== 下载 tuic-server ========== -check_tuic_server() { - if [[ -x "$TUIC_BIN" ]]; then - echo "✅ tuic-server already exists." - return - fi - echo "📥 Downloading tuic-server..." - curl -L -o "$TUIC_BIN" "https://github.com/Itsusinn/tuic/releases/download/v1.4.5/tuic-server-x86_64-linux" - chmod +x "$TUIC_BIN" -} - -# ========== 生成配置 ========== -generate_config() { -cat > "$SERVER_TOML" < "$LINK_TXT" </dev/null 2>&1 || true - echo "⚠️ TUIC crashed. Restarting in 5s..." - sleep 5 - done -} - -# ========== 主流程 ========== -main() { - if ! load_existing_config; then - read_port "$@" - TUIC_UUID="$(cat /proc/sys/kernel/random/uuid 2>/dev/null || uuidgen)" - TUIC_PASSWORD="$(openssl rand -hex 16)" - generate_cert - check_tuic_server - generate_config - else - generate_cert - check_tuic_server - fi - - ip="$(get_server_ip)" - generate_link "$ip" - run_background_loop -} - -main "$@" - - - +#!/bin/bash # ========================================= # TUIC v1.4.5 over QUIC 自动部署脚本(免 root) # 固定 SNI:www.bing.com, # ========================================= set -euo pipefail export LC_ALL=C IFS=$'\n\t' MASQ_DOMAIN="www.bing.com" SERVER_TOML="server.toml" CERT_PEM="tuic-cert.pem" KEY_PEM="tuic-key.pem" LINK_TXT="tuic_link.txt" TUIC_BIN="./tuic-server" # ========== 随机端口 ========== random_port() { echo $(( (RANDOM % 40000) + 20000 )) } # ========== 选择端口 ========== read_port() { if [[ $# -ge 1 && -n "${1:-}" ]]; then TUIC_PORT="$1" echo "✅ Using specified port: $TUIC_PORT" return fi if [[ -n "${SERVER_PORT:-}" ]]; then TUIC_PORT="$SERVER_PORT" echo "✅ Using environment port: $TUIC_PORT" return fi TUIC_PORT=$(random_port) echo "🎲 Random port selected: $TUIC_PORT" } # ========== 检查已有配置 ========== load_existing_config() { if [[ -f "$SERVER_TOML" ]]; then TUIC_PORT=$(grep '^server' "$SERVER_TOML" | grep -Eo '[0-9]+') TUIC_UUID=$(grep '^\[users\]' -A1 "$SERVER_TOML" | tail -n1 | awk '{print $1}') TUIC_PASSWORD=$(grep '^\[users\]' -A1 "$SERVER_TOML" | tail -n1 | awk -F'"' '{print $2}') echo "📂 Existing config detected. Loading..." return 0 fi return 1 } # ========== 生成证书 ========== generate_cert() { if [[ -f "$CERT_PEM" && -f "$KEY_PEM" ]]; then echo "🔐 Certificate exists, skipping." return fi echo "🔐 Generating self-signed certificate for ${MASQ_DOMAIN}..." openssl req -x509 -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 \ -keyout "$KEY_PEM" -out "$CERT_PEM" -subj "/CN=${MASQ_DOMAIN}" -days 365 -nodes >/dev/null 2>&1 chmod 600 "$KEY_PEM" chmod 644 "$CERT_PEM" } # ========== 下载 tuic-server ========== check_tuic_server() { if [[ -x "$TUIC_BIN" ]]; then echo "✅ tuic-server already exists." return fi echo "📥 Downloading tuic-server..." curl -L -o "$TUIC_BIN" "https://github.com/Itsusinn/tuic/releases/download/v1.4.5/tuic-server-x86_64-linux" chmod +x "$TUIC_BIN" } # ========== 生成配置 ========== generate_config() { cat > "$SERVER_TOML" < "$LINK_TXT" </dev/null 2>&1 || true echo "⚠️ TUIC crashed. Restarting in 5s..." sleep 5 done } # ========== 主流程 ========== main() { if ! load_existing_config; then read_port "$@" TUIC_UUID="$(cat /proc/sys/kernel/random/uuid 2>/dev/null || uuidgen)" TUIC_PASSWORD="$(openssl rand -hex 16)" generate_cert check_tuic_server generate_config else generate_cert check_tuic_server fi ip="$(get_server_ip)" generate_link "$ip" run_background_loop } main "$@" From df6c9bc6a9084237e4b7b5d54c3553cfc9eaed89 Mon Sep 17 00:00:00 2001 From: eishare Date: Tue, 11 Nov 2025 16:49:35 +0800 Subject: [PATCH 06/17] Update tuic.sh --- tuic.sh | 170 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 169 insertions(+), 1 deletion(-) diff --git a/tuic.sh b/tuic.sh index 9c6cafd..e08e030 100644 --- a/tuic.sh +++ b/tuic.sh @@ -1 +1,169 @@ -#!/bin/bash # ========================================= # TUIC v1.4.5 over QUIC 自动部署脚本(免 root) # 固定 SNI:www.bing.com, # ========================================= set -euo pipefail export LC_ALL=C IFS=$'\n\t' MASQ_DOMAIN="www.bing.com" SERVER_TOML="server.toml" CERT_PEM="tuic-cert.pem" KEY_PEM="tuic-key.pem" LINK_TXT="tuic_link.txt" TUIC_BIN="./tuic-server" # ========== 随机端口 ========== random_port() { echo $(( (RANDOM % 40000) + 20000 )) } # ========== 选择端口 ========== read_port() { if [[ $# -ge 1 && -n "${1:-}" ]]; then TUIC_PORT="$1" echo "✅ Using specified port: $TUIC_PORT" return fi if [[ -n "${SERVER_PORT:-}" ]]; then TUIC_PORT="$SERVER_PORT" echo "✅ Using environment port: $TUIC_PORT" return fi TUIC_PORT=$(random_port) echo "🎲 Random port selected: $TUIC_PORT" } # ========== 检查已有配置 ========== load_existing_config() { if [[ -f "$SERVER_TOML" ]]; then TUIC_PORT=$(grep '^server' "$SERVER_TOML" | grep -Eo '[0-9]+') TUIC_UUID=$(grep '^\[users\]' -A1 "$SERVER_TOML" | tail -n1 | awk '{print $1}') TUIC_PASSWORD=$(grep '^\[users\]' -A1 "$SERVER_TOML" | tail -n1 | awk -F'"' '{print $2}') echo "📂 Existing config detected. Loading..." return 0 fi return 1 } # ========== 生成证书 ========== generate_cert() { if [[ -f "$CERT_PEM" && -f "$KEY_PEM" ]]; then echo "🔐 Certificate exists, skipping." return fi echo "🔐 Generating self-signed certificate for ${MASQ_DOMAIN}..." openssl req -x509 -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 \ -keyout "$KEY_PEM" -out "$CERT_PEM" -subj "/CN=${MASQ_DOMAIN}" -days 365 -nodes >/dev/null 2>&1 chmod 600 "$KEY_PEM" chmod 644 "$CERT_PEM" } # ========== 下载 tuic-server ========== check_tuic_server() { if [[ -x "$TUIC_BIN" ]]; then echo "✅ tuic-server already exists." return fi echo "📥 Downloading tuic-server..." curl -L -o "$TUIC_BIN" "https://github.com/Itsusinn/tuic/releases/download/v1.4.5/tuic-server-x86_64-linux" chmod +x "$TUIC_BIN" } # ========== 生成配置 ========== generate_config() { cat > "$SERVER_TOML" < "$LINK_TXT" </dev/null 2>&1 || true echo "⚠️ TUIC crashed. Restarting in 5s..." sleep 5 done } # ========== 主流程 ========== main() { if ! load_existing_config; then read_port "$@" TUIC_UUID="$(cat /proc/sys/kernel/random/uuid 2>/dev/null || uuidgen)" TUIC_PASSWORD="$(openssl rand -hex 16)" generate_cert check_tuic_server generate_config else generate_cert check_tuic_server fi ip="$(get_server_ip)" generate_link "$ip" run_background_loop } main "$@" +#!/bin/bash +# ========================================= +# TUIC v1.4.5 over QUIC 自动部署脚本(免 root) +# 固定 SNI:www.bing.com +# ========================================= + +set -euo pipefail +export LC_ALL=C +IFS=$'\n\t' + +MASQ_DOMAIN="www.bing.com" +SERVER_TOML="server.toml" +CERT_PEM="tuic-cert.pem" +KEY_PEM="tuic-key.pem" +LINK_TXT="tuic_link.txt" +TUIC_BIN="./tuic-server" + +# ========== 随机端口 ========== +random_port() { + echo $(( (RANDOM % 40000) + 20000 )) +} + +# ========== 选择端口 ========== +read_port() { + if [[ $# -ge 1 && -n "${1:-}" ]]; then + TUIC_PORT="$1" + echo "✅ Using specified port: $TUIC_PORT" + return + fi + + if [[ -n "${SERVER_PORT:-}" ]]; then + TUIC_PORT="$SERVER_PORT" + echo "✅ Using environment port: $TUIC_PORT" + return + fi + + TUIC_PORT=$(random_port) + echo "🎲 Random port selected: $TUIC_PORT" +} + +# ========== 检查已有配置 ========== +load_existing_config() { + if [[ -f "$SERVER_TOML" ]]; then + TUIC_PORT=$(grep '^server' "$SERVER_TOML" | grep -Eo '[0-9]+') + TUIC_UUID=$(grep '^\[users\]' -A1 "$SERVER_TOML" | tail -n1 | awk '{print $1}') + TUIC_PASSWORD=$(grep '^\[users\]' -A1 "$SERVER_TOML" | tail -n1 | awk -F'"' '{print $2}') + echo "📂 Existing config detected. Loading..." + return 0 + fi + return 1 +} + +# ========== 生成证书 ========== +generate_cert() { + if [[ -f "$CERT_PEM" && -f "$KEY_PEM" ]]; then + echo "🔐 Certificate exists, skipping." + return + fi + + echo "🔐 Generating self-signed certificate for ${MASQ_DOMAIN}..." + openssl req -x509 -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 \ + -keyout "$KEY_PEM" -out "$CERT_PEM" -subj "/CN=${MASQ_DOMAIN}" -days 365 -nodes >/dev/null 2>&1 + + chmod 600 "$KEY_PEM" + chmod 644 "$CERT_PEM" +} + +# ========== 下载 tuic-server ========== +check_tuic_server() { + if [[ -x "$TUIC_BIN" ]]; then + echo "✅ tuic-server already exists." + return + fi + + echo "📥 Downloading tuic-server..." + curl -L -o "$TUIC_BIN" "https://github.com/Itsusinn/tuic/releases/download/v1.4.5/tuic-server-x86_64-linux" + chmod +x "$TUIC_BIN" +} + +# ========== 生成配置 ========== +generate_config() { + cat > "$SERVER_TOML" < "$LINK_TXT" </dev/null 2>&1 || true + echo "⚠️ TUIC crashed. Restarting in 5s..." + sleep 5 + done +} + +# ========== 主流程 ========== +main() { + if ! load_existing_config; then + read_port "$@" + TUIC_UUID="$(cat /proc/sys/kernel/random/uuid 2>/dev/null || uuidgen)" + TUIC_PASSWORD="$(openssl rand -hex 16)" + generate_cert + check_tuic_server + generate_config + else + generate_cert + check_tuic_server + fi + + ip="$(get_server_ip)" + generate_link "$ip" + run_background_loop +} + +main "$@" From 15bf90ec63e6cf6339c969d249fed45a4515d95f Mon Sep 17 00:00:00 2001 From: eishare Date: Tue, 11 Nov 2025 17:23:14 +0800 Subject: [PATCH 07/17] Update tuic.sh --- tuic.sh | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/tuic.sh b/tuic.sh index e08e030..cdf9cd7 100644 --- a/tuic.sh +++ b/tuic.sh @@ -1,9 +1,8 @@ #!/bin/bash # ========================================= # TUIC v1.4.5 over QUIC 自动部署脚本(免 root) -# 固定 SNI:www.bing.com +# 固定 SNI:www.bing.com, # ========================================= - set -euo pipefail export LC_ALL=C IFS=$'\n\t' @@ -56,11 +55,9 @@ generate_cert() { echo "🔐 Certificate exists, skipping." return fi - echo "🔐 Generating self-signed certificate for ${MASQ_DOMAIN}..." openssl req -x509 -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 \ -keyout "$KEY_PEM" -out "$CERT_PEM" -subj "/CN=${MASQ_DOMAIN}" -days 365 -nodes >/dev/null 2>&1 - chmod 600 "$KEY_PEM" chmod 644 "$CERT_PEM" } @@ -71,7 +68,6 @@ check_tuic_server() { echo "✅ tuic-server already exists." return fi - echo "📥 Downloading tuic-server..." curl -L -o "$TUIC_BIN" "https://github.com/Itsusinn/tuic/releases/download/v1.4.5/tuic-server-x86_64-linux" chmod +x "$TUIC_BIN" @@ -79,7 +75,7 @@ check_tuic_server() { # ========== 生成配置 ========== generate_config() { - cat > "$SERVER_TOML" < "$SERVER_TOML" < "$LINK_TXT" < Date: Wed, 12 Nov 2025 21:19:02 +0800 Subject: [PATCH 08/17] Update hy2.sh --- hy2.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/hy2.sh b/hy2.sh index 61ba4f0..eb5919c 100644 --- a/hy2.sh +++ b/hy2.sh @@ -118,8 +118,8 @@ print_connection_info() { echo " 🔌 端口: $SERVER_PORT" echo " 🔑 密码: $AUTH_PASSWORD" echo "" - echo "📱 节点链接(SNI=${SNI}, ALPN=${ALPN}):" - echo "hysteria2://${AUTH_PASSWORD}@${IP}:${SERVER_PORT}?sni=${SNI}&alpn=${ALPN}#Hy2-Bing" + echo "📱 节点链接(SNI=${SNI}, ALPN=${ALPN}), 跳过证书验证):" + echo "hysteria2://${AUTH_PASSWORD}@${IP}:${SERVER_PORT}?sni=${SNI}&alpn=${ALPN}#&insecure=1#Hy2-Bing" echo "" echo "📄 客户端配置文件:" echo "server: ${IP}:${SERVER_PORT}" @@ -149,3 +149,4 @@ main() { main "$@" + From 95ab6582b24cdd0bc2a08ba08827a5cf5ceeb32c Mon Sep 17 00:00:00 2001 From: eishare Date: Wed, 12 Nov 2025 21:23:39 +0800 Subject: [PATCH 09/17] Update hy2.sh --- hy2.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/hy2.sh b/hy2.sh index eb5919c..7a8bd15 100644 --- a/hy2.sh +++ b/hy2.sh @@ -118,8 +118,8 @@ print_connection_info() { echo " 🔌 端口: $SERVER_PORT" echo " 🔑 密码: $AUTH_PASSWORD" echo "" - echo "📱 节点链接(SNI=${SNI}, ALPN=${ALPN}), 跳过证书验证):" - echo "hysteria2://${AUTH_PASSWORD}@${IP}:${SERVER_PORT}?sni=${SNI}&alpn=${ALPN}#&insecure=1#Hy2-Bing" + echo "📱 节点链接(SNI=${SNI}, ALPN=${ALPN}, 跳过证书验证):" + echo "hysteria2://${AUTH_PASSWORD}@${IP}:${SERVER_PORT}?sni=${SNI}&alpn=${ALPN}&insecure=1#Hy2-Bing" echo "" echo "📄 客户端配置文件:" echo "server: ${IP}:${SERVER_PORT}" @@ -150,3 +150,4 @@ main "$@" + From 6409b9e7ddc42cf986169dc264b4a8127dd58684 Mon Sep 17 00:00:00 2001 From: eishare Date: Wed, 10 Dec 2025 00:04:52 +0800 Subject: [PATCH 10/17] Create reality.sh --- vless+tcp+reality/reality.sh | 1 + 1 file changed, 1 insertion(+) create mode 100644 vless+tcp+reality/reality.sh diff --git a/vless+tcp+reality/reality.sh b/vless+tcp+reality/reality.sh new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/vless+tcp+reality/reality.sh @@ -0,0 +1 @@ + From d877cdc2efabfdf67327d11df4f3ccc928bf7a07 Mon Sep 17 00:00:00 2001 From: eishare Date: Wed, 10 Dec 2025 00:05:24 +0800 Subject: [PATCH 11/17] Update reality.sh --- vless+tcp+reality/reality.sh | 126 +++++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) diff --git a/vless+tcp+reality/reality.sh b/vless+tcp+reality/reality.sh index 8b13789..13d0331 100644 --- a/vless+tcp+reality/reality.sh +++ b/vless+tcp+reality/reality.sh @@ -1 +1,127 @@ +#!/bin/bash +set -euo pipefail + +echo "==============================================" +echo " VLESS + TCP + Reality 一键部署脚本" +echo " 优化修复版(端口不再固定、无 -1)" +echo "==============================================" + +# ============================= +# 生成随机 UUID +# ============================= +UUID=$(cat /proc/sys/kernel/random/uuid) + +# ============================= +# 生成随机端口(避开 1–29999) +# ============================= +get_random_port() { + while true; do + PORT=$(shuf -i 30000-60000 -n 1) + ss -tulpn | grep -q ":$PORT " || break + done + echo "$PORT" +} +PORT=$(get_random_port) + +echo "已选择随机端口: $PORT" +echo "UUID: $UUID" + +# ============================= +# 下载最新 Xray +# ============================= +if [[ ! -f "./xray" ]]; then + echo "正在下载 Xray 最新版本..." + URL=$(curl -fsSL https://api.github.com/repos/XTLS/Xray-core/releases/latest | + grep browser_download_url | grep linux-64.zip | cut -d\" -f4) + + curl -L -o xray.zip "$URL" + unzip -j xray.zip xray -d . + rm -f xray.zip + chmod +x xray +fi + +# ============================= +# 生成 Reality Keys(正确格式) +# ============================= +KEYS=$(./xray x25519) +PRIV=$(echo "$KEYS" | grep PrivateKey | awk '{print $2}') +PUB=$(echo "$KEYS" | grep PublicKey | awk '{print $2}') +SHORT_ID=$(openssl rand -hex 8) +MASQ="www.cloudflare.com" + +echo "Reality PublicKey: $PUB" +echo "Reality ShortId: $SHORT_ID" + +# ============================= +# 写入 Xray 配置 +# ============================= +cat > reality.json </dev/null 2>&1; then + echo "检测到 firewalld,放行端口..." + firewall-cmd --add-port=$PORT/tcp --permanent || true + firewall-cmd --reload || true +elif command -v ufw >/dev/null 2>&1; then + echo "检测到 ufw,放行端口..." + ufw allow $PORT/tcp || true +fi + +# ============================= +# 结束旧进程 & 后台运行 +# ============================= +pkill -f "xray run" >/dev/null 2>&1 || true + +echo "启动 Xray Reality 服务..." +nohup ./xray run -c reality.json >/dev/null 2>&1 & + +sleep 1 + +# ============================= +# 获取出口 IP +# ============================= +IP=$(curl -s https://api64.ipify.org || echo "服务器IP获取失败") + +# ============================= +# 输出节点链接 +# ============================= +echo "" +echo "============== Reality 节点 ==============" +LINK="vless://$UUID@$IP:$PORT?encryption=none&flow=xtls-rprx-vision&security=reality&sni=$MASQ&fp=chrome&pbk=$PUB&sid=$SHORT_ID&type=tcp&spx=/#Reality-Vision" + +echo "$LINK" +echo "=========================================" +echo "部署完成!Reality 不需要反代 / CF 代理(需关闭)" From 377047066a945604f37d24b3abaffd9ad20bb3ac Mon Sep 17 00:00:00 2001 From: eishare Date: Wed, 10 Dec 2025 00:09:12 +0800 Subject: [PATCH 12/17] Update reality.sh --- vless+tcp+reality/reality.sh | 194 +++++++++++++++-------------------- 1 file changed, 85 insertions(+), 109 deletions(-) diff --git a/vless+tcp+reality/reality.sh b/vless+tcp+reality/reality.sh index 13d0331..428d8b4 100644 --- a/vless+tcp+reality/reality.sh +++ b/vless+tcp+reality/reality.sh @@ -1,127 +1,103 @@ #!/bin/bash -set -euo pipefail +set -e -echo "==============================================" -echo " VLESS + TCP + Reality 一键部署脚本" -echo " 优化修复版(端口不再固定、无 -1)" -echo "==============================================" +echo "============================================" +echo " Xray VLESS TCP Reality 一键部署" +echo "============================================" -# ============================= -# 生成随机 UUID -# ============================= -UUID=$(cat /proc/sys/kernel/random/uuid) - -# ============================= -# 生成随机端口(避开 1–29999) -# ============================= -get_random_port() { - while true; do - PORT=$(shuf -i 30000-60000 -n 1) - ss -tulpn | grep -q ":$PORT " || break - done - echo "$PORT" -} -PORT=$(get_random_port) +# 部署目录 +XRAY_DIR="/etc/xray" +mkdir -p $XRAY_DIR +cd $XRAY_DIR -echo "已选择随机端口: $PORT" -echo "UUID: $UUID" +echo "下载 Xray-core v1.8.23 ..." +curl -L -o xray.zip "https://github.com/XTLS/Xray-core/releases/download/v1.8.23/Xray-linux-64.zip" --fail --connect-timeout 15 +unzip -o xray.zip +chmod +x xray +rm -f xray.zip -# ============================= -# 下载最新 Xray -# ============================= -if [[ ! -f "./xray" ]]; then - echo "正在下载 Xray 最新版本..." - URL=$(curl -fsSL https://api.github.com/repos/XTLS/Xray-core/releases/latest | - grep browser_download_url | grep linux-64.zip | cut -d\" -f4) +# 生成 UUID +UUID=$(cat /proc/sys/kernel/random/uuid) - curl -L -o xray.zip "$URL" - unzip -j xray.zip xray -d . - rm -f xray.zip - chmod +x xray -fi +# Reality 默认端口 +PORT=443 -# ============================= -# 生成 Reality Keys(正确格式) -# ============================= -KEYS=$(./xray x25519) -PRIV=$(echo "$KEYS" | grep PrivateKey | awk '{print $2}') -PUB=$(echo "$KEYS" | grep PublicKey | awk '{print $2}') -SHORT_ID=$(openssl rand -hex 8) -MASQ="www.cloudflare.com" +# 生成 Reality 密钥 +echo "生成 Reality 私钥/公钥 ..." +KEY_OUTPUT=$(./xray x25519) +PRIVATE_KEY=$(echo "$KEY_OUTPUT" | grep Private | awk '{print $3}') +PUBLIC_KEY=$(echo "$KEY_OUTPUT" | grep Public | awk '{print $3}') -echo "Reality PublicKey: $PUB" -echo "Reality ShortId: $SHORT_ID" +# 设置回落 website +FALLBACK_DOMAIN="www.microsoft.com" -# ============================= -# 写入 Xray 配置 -# ============================= -cat > reality.json < config.json </dev/null 2>&1; then - echo "检测到 firewalld,放行端口..." - firewall-cmd --add-port=$PORT/tcp --permanent || true - firewall-cmd --reload || true -elif command -v ufw >/dev/null 2>&1; then - echo "检测到 ufw,放行端口..." - ufw allow $PORT/tcp || true -fi +# 创建 systemd 服务 +cat > /etc/systemd/system/xray.service </dev/null 2>&1 || true +[Service] +Type=simple +ExecStart=$XRAY_DIR/xray run -config $XRAY_DIR/config.json +Restart=on-failure -echo "启动 Xray Reality 服务..." -nohup ./xray run -c reality.json >/dev/null 2>&1 & - -sleep 1 - -# ============================= -# 获取出口 IP -# ============================= -IP=$(curl -s https://api64.ipify.org || echo "服务器IP获取失败") - -# ============================= -# 输出节点链接 -# ============================= -echo "" -echo "============== Reality 节点 ==============" -LINK="vless://$UUID@$IP:$PORT?encryption=none&flow=xtls-rprx-vision&security=reality&sni=$MASQ&fp=chrome&pbk=$PUB&sid=$SHORT_ID&type=tcp&spx=/#Reality-Vision" - -echo "$LINK" -echo "=========================================" -echo "部署完成!Reality 不需要反代 / CF 代理(需关闭)" +[Install] +WantedBy=multi-user.target +EOF +systemctl daemon-reload +systemctl enable xray +systemctl restart xray + +echo +echo "================ 部署完成 ================" +echo "Reality 公钥:$PUBLIC_KEY" +echo "Reality 私钥:$PRIVATE_KEY" +echo +echo "VLESS Reality 节点如下:" +echo +echo "vless://$UUID@$(hostname -I | awk '{print $1}'):$PORT?encryption=none&flow=xtls-rprx-vision&security=reality&pbk=$PUBLIC_KEY&fp=chrome&sid=6a96&sni=$FALLBACK_DOMAIN&type=tcp#Reality" +echo +echo "==========================================" +echo "节点已生成,可直接导入客户端使用" From f1e04a30a1ead09e8cf091bc8aea201103f46557 Mon Sep 17 00:00:00 2001 From: eishare Date: Wed, 10 Dec 2025 00:10:15 +0800 Subject: [PATCH 13/17] Update reality.sh --- vless+tcp+reality/reality.sh | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/vless+tcp+reality/reality.sh b/vless+tcp+reality/reality.sh index 428d8b4..d75d088 100644 --- a/vless+tcp+reality/reality.sh +++ b/vless+tcp+reality/reality.sh @@ -10,11 +10,16 @@ XRAY_DIR="/etc/xray" mkdir -p $XRAY_DIR cd $XRAY_DIR -echo "下载 Xray-core v1.8.23 ..." -curl -L -o xray.zip "https://github.com/XTLS/Xray-core/releases/download/v1.8.23/Xray-linux-64.zip" --fail --connect-timeout 15 -unzip -o xray.zip -chmod +x xray -rm -f xray.zip +# ========== 下载 Xray ========== +get_xray() { + if [[ ! -x "$VLESS_BIN" ]]; then + echo "Downloading Xray v1.8.23..." + curl -L -o xray.zip "https://github.com/XTLS/Xray-core/releases/download/v1.8.23/Xray-linux-64.zip" --fail --connect-timeout 15 + unzip -j xray.zip xray -d . >/dev/null 2>&1 + rm -f xray.zip + chmod +x "$VLESS_BIN" + fi +} # 生成 UUID UUID=$(cat /proc/sys/kernel/random/uuid) From 51da3c81d6c856f36cdf9dd7ffa4ab3513f53dc7 Mon Sep 17 00:00:00 2001 From: eishare Date: Thu, 18 Dec 2025 23:17:35 +0800 Subject: [PATCH 14/17] Create tuicbak --- tuicbak | 164 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 164 insertions(+) create mode 100644 tuicbak diff --git a/tuicbak b/tuicbak new file mode 100644 index 0000000..9e90702 --- /dev/null +++ b/tuicbak @@ -0,0 +1,164 @@ +#!/bin/bash +# ========================================= +# TUIC v1.4.5 over QUIC 自动部署脚本(免 root) +# 固定 SNI:www.bing.com, +# ========================================= +set -euo pipefail +export LC_ALL=C +IFS=$'\n\t' + +MASQ_DOMAIN="www.bing.com" +SERVER_TOML="server.toml" +CERT_PEM="tuic-cert.pem" +KEY_PEM="tuic-key.pem" +LINK_TXT="tuic_link.txt" +TUIC_BIN="./tuic-server" + +# ========== 随机端口 ========== +random_port() { + echo $(( (RANDOM % 40000) + 20000 )) +} + +# ========== 选择端口 ========== +read_port() { + if [[ $# -ge 1 && -n "${1:-}" ]]; then + TUIC_PORT="$1" + echo "✅ Using specified port: $TUIC_PORT" + return + fi + + if [[ -n "${SERVER_PORT:-}" ]]; then + TUIC_PORT="$SERVER_PORT" + echo "✅ Using environment port: $TUIC_PORT" + return + fi + + TUIC_PORT=$(random_port) + echo "🎲 Random port selected: $TUIC_PORT" +} + +# ========== 检查已有配置 ========== +load_existing_config() { + if [[ -f "$SERVER_TOML" ]]; then + TUIC_PORT=$(grep '^server' "$SERVER_TOML" | grep -Eo '[0-9]+') + TUIC_UUID=$(grep '^\[users\]' -A1 "$SERVER_TOML" | tail -n1 | awk '{print $1}') + TUIC_PASSWORD=$(grep '^\[users\]' -A1 "$SERVER_TOML" | tail -n1 | awk -F'"' '{print $2}') + echo "📂 Existing config detected. Loading..." + return 0 + fi + return 1 +} + +# ========== 生成证书 ========== +generate_cert() { + if [[ -f "$CERT_PEM" && -f "$KEY_PEM" ]]; then + echo "🔐 Certificate exists, skipping." + return + fi + echo "🔐 Generating self-signed certificate for ${MASQ_DOMAIN}..." + openssl req -x509 -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 \ + -keyout "$KEY_PEM" -out "$CERT_PEM" -subj "/CN=${MASQ_DOMAIN}" -days 365 -nodes >/dev/null 2>&1 + chmod 600 "$KEY_PEM" + chmod 644 "$CERT_PEM" +} + +# ========== 下载 tuic-server ========== +check_tuic_server() { + if [[ -x "$TUIC_BIN" ]]; then + echo "✅ tuic-server already exists." + return + fi + echo "📥 Downloading tuic-server..." + curl -L -o "$TUIC_BIN" "https://github.com/Itsusinn/tuic/releases/download/v1.4.5/tuic-server-x86_64-linux" + chmod +x "$TUIC_BIN" +} + +# ========== 生成配置 ========== +generate_config() { +cat > "$SERVER_TOML" < "$LINK_TXT" </dev/null 2>&1 || true + echo "⚠️ TUIC crashed. Restarting in 5s..." + sleep 5 + done +} + +# ========== 主流程 ========== +main() { + if ! load_existing_config; then + read_port "$@" + TUIC_UUID="$(cat /proc/sys/kernel/random/uuid 2>/dev/null || uuidgen)" + TUIC_PASSWORD="$(openssl rand -hex 16)" + generate_cert + check_tuic_server + generate_config + else + generate_cert + check_tuic_server + fi + + ip="$(get_server_ip)" + generate_link "$ip" + run_background_loop +} + +main "$@" From 4c9a55669f29cf2172882c5ca3e2a2d5c5927923 Mon Sep 17 00:00:00 2001 From: eishare Date: Thu, 18 Dec 2025 23:19:10 +0800 Subject: [PATCH 15/17] Update tuic.sh --- tuic.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tuic.sh b/tuic.sh index cdf9cd7..e48fa70 100644 --- a/tuic.sh +++ b/tuic.sh @@ -118,7 +118,7 @@ EOF # ========== 获取公网IP ========== get_server_ip() { - curl -s --connect-timeout 3 https://api64.ipify.org || echo "127.0.0.1" + echo "${MASQ_DOMAIN}" } # ========== 生成TUIC链接 ========== @@ -162,3 +162,4 @@ main() { } main "$@" + From cd3755076c9689fa0b5f2daee19a5444d7883948 Mon Sep 17 00:00:00 2001 From: eishare Date: Thu, 18 Dec 2025 23:21:07 +0800 Subject: [PATCH 16/17] Update tuic.sh --- tuic.sh | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/tuic.sh b/tuic.sh index e48fa70..2c6e49c 100644 --- a/tuic.sh +++ b/tuic.sh @@ -118,7 +118,17 @@ EOF # ========== 获取公网IP ========== get_server_ip() { - echo "${MASQ_DOMAIN}" + if [[ -n "${SERVER_IP:-}" ]]; then + echo "$SERVER_IP" + return + fi + + if [[ -n "${PTERODACTYL_SERVER_IP:-}" ]]; then + echo "$PTERODACTYL_SERVER_IP" + return + fi + + echo "127.0.0.1" } # ========== 生成TUIC链接 ========== @@ -163,3 +173,4 @@ main() { main "$@" + From 0bcf6c806aaae9cfce2b70ff31875a2c5e3b807b Mon Sep 17 00:00:00 2001 From: eishare Date: Thu, 18 Dec 2025 23:29:03 +0800 Subject: [PATCH 17/17] Delete tuicbak --- tuicbak | 164 -------------------------------------------------------- 1 file changed, 164 deletions(-) delete mode 100644 tuicbak diff --git a/tuicbak b/tuicbak deleted file mode 100644 index 9e90702..0000000 --- a/tuicbak +++ /dev/null @@ -1,164 +0,0 @@ -#!/bin/bash -# ========================================= -# TUIC v1.4.5 over QUIC 自动部署脚本(免 root) -# 固定 SNI:www.bing.com, -# ========================================= -set -euo pipefail -export LC_ALL=C -IFS=$'\n\t' - -MASQ_DOMAIN="www.bing.com" -SERVER_TOML="server.toml" -CERT_PEM="tuic-cert.pem" -KEY_PEM="tuic-key.pem" -LINK_TXT="tuic_link.txt" -TUIC_BIN="./tuic-server" - -# ========== 随机端口 ========== -random_port() { - echo $(( (RANDOM % 40000) + 20000 )) -} - -# ========== 选择端口 ========== -read_port() { - if [[ $# -ge 1 && -n "${1:-}" ]]; then - TUIC_PORT="$1" - echo "✅ Using specified port: $TUIC_PORT" - return - fi - - if [[ -n "${SERVER_PORT:-}" ]]; then - TUIC_PORT="$SERVER_PORT" - echo "✅ Using environment port: $TUIC_PORT" - return - fi - - TUIC_PORT=$(random_port) - echo "🎲 Random port selected: $TUIC_PORT" -} - -# ========== 检查已有配置 ========== -load_existing_config() { - if [[ -f "$SERVER_TOML" ]]; then - TUIC_PORT=$(grep '^server' "$SERVER_TOML" | grep -Eo '[0-9]+') - TUIC_UUID=$(grep '^\[users\]' -A1 "$SERVER_TOML" | tail -n1 | awk '{print $1}') - TUIC_PASSWORD=$(grep '^\[users\]' -A1 "$SERVER_TOML" | tail -n1 | awk -F'"' '{print $2}') - echo "📂 Existing config detected. Loading..." - return 0 - fi - return 1 -} - -# ========== 生成证书 ========== -generate_cert() { - if [[ -f "$CERT_PEM" && -f "$KEY_PEM" ]]; then - echo "🔐 Certificate exists, skipping." - return - fi - echo "🔐 Generating self-signed certificate for ${MASQ_DOMAIN}..." - openssl req -x509 -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 \ - -keyout "$KEY_PEM" -out "$CERT_PEM" -subj "/CN=${MASQ_DOMAIN}" -days 365 -nodes >/dev/null 2>&1 - chmod 600 "$KEY_PEM" - chmod 644 "$CERT_PEM" -} - -# ========== 下载 tuic-server ========== -check_tuic_server() { - if [[ -x "$TUIC_BIN" ]]; then - echo "✅ tuic-server already exists." - return - fi - echo "📥 Downloading tuic-server..." - curl -L -o "$TUIC_BIN" "https://github.com/Itsusinn/tuic/releases/download/v1.4.5/tuic-server-x86_64-linux" - chmod +x "$TUIC_BIN" -} - -# ========== 生成配置 ========== -generate_config() { -cat > "$SERVER_TOML" < "$LINK_TXT" </dev/null 2>&1 || true - echo "⚠️ TUIC crashed. Restarting in 5s..." - sleep 5 - done -} - -# ========== 主流程 ========== -main() { - if ! load_existing_config; then - read_port "$@" - TUIC_UUID="$(cat /proc/sys/kernel/random/uuid 2>/dev/null || uuidgen)" - TUIC_PASSWORD="$(openssl rand -hex 16)" - generate_cert - check_tuic_server - generate_config - else - generate_cert - check_tuic_server - fi - - ip="$(get_server_ip)" - generate_link "$ip" - run_background_loop -} - -main "$@"