فهرست منبع

增加udp-relay-only

Gogs 1 هفته پیش
والد
کامیت
b81a140b6f
2فایلهای تغییر یافته به همراه70 افزوده شده و 0 حذف شده
  1. 1 0
      scripts/install.sh
  2. 69 0
      scripts/start-relay-udp.sh

+ 1 - 0
scripts/install.sh

@@ -37,6 +37,7 @@ chmod +x "$BIN_PATH"
 
 chmod +x "$PREFIX/scripts/start-transparent.sh" "$PREFIX/scripts/stop-transparent.sh" "$PREFIX/scripts/install.sh" "$PREFIX/scripts/start_only_udp.sh"
 [[ -f "$PREFIX/scripts/start-relay.sh" ]] && chmod +x "$PREFIX/scripts/start-relay.sh"
+[[ -f "$PREFIX/scripts/start-relay-udp.sh" ]] && chmod +x "$PREFIX/scripts/start-relay-udp.sh"
 [[ -f "$PREFIX/scripts/stop-relay.sh" ]] && chmod +x "$PREFIX/scripts/stop-relay.sh"
 
 echo "installed to $PREFIX"

+ 69 - 0
scripts/start-relay-udp.sh

@@ -0,0 +1,69 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+usage() {
+  cat <<'EOF'
+Usage: start-relay-udp.sh <token>
+
+Options via env:
+  MYNETSPEEDER_RELAY_HOST   relay 监听地址,默认 0.0.0.0
+  MYNETSPEEDER_RELAY_PORT   relay 监听端口,默认 9009
+  MYNETSPEEDER_INSTALL_DIR  安装目录,默认 /opt/mynetspeeder
+  MYNETSPEEDER_USER         运行用户,默认 mynetspeeder
+EOF
+}
+
+LISTEN_HOST="${MYNETSPEEDER_RELAY_HOST:-0.0.0.0}"
+LISTEN_PORT="${MYNETSPEEDER_RELAY_PORT:-9009}"
+TOKEN="${MYNETSPEEDER_RELAY_TOKEN:-${1:-}}"
+INSTALL_DIR="${MYNETSPEEDER_INSTALL_DIR:-/opt/mynetspeeder}"
+INSTALL_PARENT="$(dirname "$INSTALL_DIR")"
+PACKAGE_NAME="$(basename "$INSTALL_DIR")"
+RUNTIME_USER="${MYNETSPEEDER_USER:-mynetspeeder}"
+PID_FILE="/var/run/mynetspeeder-relay-udp.pid"
+LOG_FILE="/var/log/mynetspeeder-relay-udp.log"
+LOG_MAX_MB="${MYNETSPEEDER_LOG_MAX_MB:-50}"
+LOG_BACKUPS="${MYNETSPEEDER_LOG_BACKUPS:-3}"
+
+if [[ $EUID -ne 0 ]]; then
+  echo "need root"
+  exit 1
+fi
+
+if [[ -z "$TOKEN" ]]; then
+  usage
+  exit 1
+fi
+
+if [[ ! -d "$INSTALL_DIR" ]]; then
+  echo "install dir not found: $INSTALL_DIR"
+  exit 1
+fi
+
+id -u "$RUNTIME_USER" >/dev/null 2>&1 || useradd --system --no-create-home --shell /usr/sbin/nologin "$RUNTIME_USER"
+mkdir -p /var/log
+touch "$LOG_FILE"
+chown "$RUNTIME_USER":"$RUNTIME_USER" "$LOG_FILE"
+if ! [[ "$LOG_MAX_MB" =~ ^[0-9]+$ ]] || ! [[ "$LOG_BACKUPS" =~ ^[0-9]+$ ]]; then
+  echo "log limits must be numeric"
+  exit 1
+fi
+LOG_MAX_BYTES=$((LOG_MAX_MB * 1024 * 1024))
+
+pkill -f 'python3 -m mynetspeeder relay --udp-only' || true
+
+runuser -u "$RUNTIME_USER" -- bash -lc "export PYTHONUNBUFFERED=1; export PYTHONPATH=${INSTALL_PARENT}; cd ${INSTALL_PARENT} && exec nohup python3 -m ${PACKAGE_NAME} relay --listen-host ${LISTEN_HOST} --listen-port ${LISTEN_PORT} --token ${TOKEN} --udp-only 2>&1 | python3 ${INSTALL_DIR}/scripts/rotate-log.py ${LOG_FILE} ${LOG_MAX_BYTES} ${LOG_BACKUPS}" &
+RELAY_PID=$!
+echo "$RELAY_PID" > "$PID_FILE"
+
+sleep 1
+if ! ss -ln | grep -qE "[:.]${LISTEN_PORT}( |$)"; then
+  echo "relay failed to listen on ${LISTEN_HOST}:${LISTEN_PORT}"
+  tail -n 50 "$LOG_FILE" || true
+  exit 1
+fi
+
+echo "relay udp-only started on ${LISTEN_HOST}:${LISTEN_PORT}"
+echo "pid file: $PID_FILE"
+echo "log file: $LOG_FILE"
+echo "log max: ${LOG_MAX_MB}MB x ${LOG_BACKUPS}"