#!/usr/bin/env bash # ============================================================================= # MasterHttpRelayVPN — VPS Exit Node Installer # ============================================================================= set -euo pipefail GITHUB_RAW="https://raw.githubusercontent.com/masterking32/MasterHttpRelayVPN/python_testing/apps_script" # ── Colours ────────────────────────────────────────────────────────────────── RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m' CYAN='\033[0;36m'; BOLD='\033[1m'; NC='\033[0m' info() { echo -e "${GREEN}[INFO]${NC} $*"; } warn() { echo -e "${YELLOW}[WARN]${NC} $*"; } error() { echo -e "${RED}[ERROR]${NC} $*" >&2; } header() { echo -e "\n${BOLD}${CYAN}$*${NC}"; } # ── Platform check ──────────────────────────────────────────────────────────── if [[ "$(uname -s)" != "Linux" ]]; then error "This installer only supports Linux. Detected: $(uname -s)" exit 1 fi # ── Root / sudo check ───────────────────────────────────────────────────────── if [[ $EUID -ne 0 ]]; then error "Please run as root or with sudo:" echo " sudo bash $0" exit 1 fi # ── Download vps_exit_node.py from GitHub ──────────────────────────────────── PYTHON_SCRIPT="/tmp/vps_exit_node.py" info "Fetching vps_exit_node.py from GitHub..." if command -v curl &>/dev/null; then curl -fsSL "$GITHUB_RAW/vps_exit_node.py" -o "$PYTHON_SCRIPT" elif command -v wget &>/dev/null; then wget -qO "$PYTHON_SCRIPT" "$GITHUB_RAW/vps_exit_node.py" else error "Neither curl nor wget is available. Install one and retry." exit 1 fi info "Downloaded vps_exit_node.py to $PYTHON_SCRIPT" # ───────────────────────────────────────────────────────────────────────────── header "Step 1/7 — Checking Python 3" # ───────────────────────────────────────────────────────────────────────────── PYTHON_BIN="" for candidate in python3 python3.12 python3.11 python3.10; do if command -v "$candidate" &>/dev/null; then VER=$("$candidate" -c 'import sys; print("%d%d" % sys.version_info[:2])') if [[ "$VER" -ge 310 ]]; then PYTHON_BIN=$(command -v "$candidate") info "Found $PYTHON_BIN ($($PYTHON_BIN --version 2>&1))" break fi fi done if [[ -z "$PYTHON_BIN" ]]; then info "Python 3.10+ not found — attempting install..." if command -v apt-get &>/dev/null; then apt-get update -qq apt-get install -y python3 python3-minimal elif command -v dnf &>/dev/null; then dnf install -y python3 elif command -v yum &>/dev/null; then yum install -y python3 elif command -v pacman &>/dev/null; then pacman -Sy --noconfirm python else error "Cannot determine package manager. Please install Python 3.10+ manually." exit 1 fi PYTHON_BIN=$(command -v python3) info "Installed: $PYTHON_BIN" fi # ───────────────────────────────────────────────────────────────────────────── header "Step 2/7 — Collecting configuration" # ───────────────────────────────────────────────────────────────────────────── # Port echo "" read -rp "Listen port [default: 8181]: " INPUT_PORT "$ENV_FILE" < "$SERVICE_FILE" </dev/null; then ufw allow "$PORT"/tcp comment "exit-node" || true info "ufw rule added for port $PORT/tcp" elif command -v firewall-cmd &>/dev/null; then firewall-cmd --permanent --add-port="$PORT"/tcp || true firewall-cmd --reload || true info "firewalld rule added for port $PORT/tcp" else warn "No ufw or firewalld found. Make sure port $PORT/tcp is open in your VPS firewall panel." fi # ───────────────────────────────────────────────────────────────────────────── header "Step 7/7 — Health check" # ───────────────────────────────────────────────────────────────────────────── HEALTH_URL="http://127.0.0.1:${PORT}/" if command -v curl &>/dev/null; then HEALTH=$(curl -sf --max-time 5 "$HEALTH_URL" 2>/dev/null || echo "") if echo "$HEALTH" | grep -q '"ok"'; then info "Health check OK: $HEALTH" else warn "Health check returned unexpected response. Check: journalctl -u exit-node -n 30" fi else warn "curl not found — skipping health check. You can test manually:" echo " curl http://127.0.0.1:${PORT}/" fi # ───────────────────────────────────────────────────────────────────────────── PUBLIC_IP=$(curl -sf --max-time 5 https://ifconfig.me 2>/dev/null || echo "YOUR-VPS-IP") echo "" echo -e "${BOLD}${GREEN}============================================================${NC}" echo -e "${BOLD} Installation complete!${NC}" echo -e "${BOLD}${GREEN}============================================================${NC}" echo "" echo -e " Service status : ${CYAN}systemctl status exit-node${NC}" echo -e " Live logs : ${CYAN}journalctl -fu exit-node${NC}" echo -e " Uninstall : ${CYAN}systemctl disable --now exit-node && rm $SERVICE_FILE $ENV_FILE${NC}" echo "" echo -e "${BOLD}Add this to config.json on your client machine:${NC}" echo "" echo -e "${CYAN}" cat <