From 272e712eaa3f3c0c30dbdfc6e4a4b0a89a808df4 Mon Sep 17 00:00:00 2001 From: kobaltgit Date: Sun, 5 Apr 2026 23:29:13 +0300 Subject: [PATCH] fix: Resolve proxy connectivity and port selection issues - Fixed port variable pollution by redirecting info messages to stderr. - Switched Docker to --network host for maximum compatibility. - Improved UDP/IPv6 accessibility by binding to all interfaces (::). - Verified compatibility with existing server panels (Hiddify/Nginx). --- install.sh | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/install.sh b/install.sh index cb7eb4e..5b2b981 100644 --- a/install.sh +++ b/install.sh @@ -117,11 +117,9 @@ analyze_best_domain() { local min_time=999 for d in "${test_domains[@]}"; do - # Пингуем 1 раз, ждем максимум 1 секунду local t=$(ping -c 1 -W 1 "$d" 2>/dev/null | grep 'time=' | awk -F'time=' '{print $2}' | awk '{print $1}') if [ -z "$t" ]; then t=999; fi - # Сравнение через bc (если есть) или целочисленное if (( $(echo "$t < $min_time" | bc -l 2>/dev/null || [ ${t%.*} -lt ${min_time%.*} ]) )); then min_time=$t best_domain=$d @@ -132,7 +130,7 @@ analyze_best_domain() { echo "$best_domain" } -# ── Умный поиск порта ──────────────────────────────────────────────────────── +# ── Умный поиск порта (ИСПРАВЛЕНО: вывод сообщений в stderr) ────────────────── find_smart_port() { local port=443 if ss -tlnp | grep -qE ":${port}\b"; then @@ -183,7 +181,7 @@ menu_install() { optimize_system - local DOMAIN=$(analyze_best_domain) + local DOMAIN=$(analyze_best_domain) local PORT=$(find_smart_port) echo -e " ${GREEN}✓${NC} Итоговый порт: ${WHITE}$PORT${NC}" @@ -197,13 +195,13 @@ menu_install() { docker stop "$CONTAINER_NAME" &>/dev/null docker rm "$CONTAINER_NAME" &>/dev/null - # Запуск: слушаем 0.0.0.0 (все IPv4) и [::] (все IPv6) + # Используем --network host для 100% совместимости с IPv6 и UDP (звонки) + # Слушаем на [::], что охватывает и IPv4, и IPv6 интерфейсы docker run -d --name "$CONTAINER_NAME" --restart always \ - -p "$PORT":"$PORT"/tcp \ - -p "$PORT":"$PORT"/udp \ + --network host \ nineseconds/mtg:2 simple-run \ -n 1.1.1.1 -t 1.0.0.1 -i prefer-ipv4 \ - 0.0.0.0:"$PORT" "$SECRET" > /dev/null 2>&1 + "::$PORT" "$SECRET" > /dev/null 2>&1 sleep 2 spinner_stop @@ -211,7 +209,7 @@ menu_install() { if docker ps --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then mkdir -p "$BOT_DIR" echo "{\"domain\": \"$DOMAIN\", \"port\": \"$PORT\", \"secret\": \"$SECRET\"}" > "$BOT_DIR/proxy.json" - echo -e "\n${GREEN}✓ Прокси успешно запущен на порту $PORT!${NC}" + echo -e "\n${GREEN}✓ SwiftGram успешно запущен на порту $PORT!${NC}" show_config else echo -e "\n${RED}✗ Ошибка запуска. Проверьте: docker logs $CONTAINER_NAME${NC}" @@ -248,7 +246,6 @@ menu_setup_bot() { echo -e "${CYAN}║ НАСТРОЙКА TELEGRAM БОТА ║${NC}" echo -e "${CYAN}╚══════════════════════════════════════════════════════════════╝${NC}" - # 1. Установка Python if ! command -v python3 &>/dev/null; then run_with_progress "Установка Python3" install_pkg python3 python3-pip python3-venv fi @@ -256,13 +253,11 @@ menu_setup_bot() { mkdir -p "$BOT_DIR" cd "$BOT_DIR" - # 2. Скачивание модулей (Requirements + Bot) spinner_start "Загрузка модулей бота из репозитория..." curl -sL "$REPO_RAW_URL/requirements.txt" -o "requirements.txt" curl -sL "$REPO_RAW_URL/bot.py" -o "bot.py" spinner_stop - # 3. Venv и зависимости if [ ! -d "venv" ]; then spinner_start "Создание виртуального окружения..." python3 -m venv venv >/dev/null 2>&1 @@ -273,7 +268,6 @@ menu_setup_bot() { ./venv/bin/pip install -r requirements.txt -q spinner_stop - # 4. Конфиг .env echo -e "\n${YELLOW}Введите BOT_TOKEN от @BotFather:${NC}" read -r TOKEN echo -e "${YELLOW}Введите ваш Telegram ID (админ):${NC}" @@ -287,7 +281,6 @@ menu_setup_bot() { } > .env chmod 600 .env - # 5. Systemd сервис cat > "/etc/systemd/system/${SERVICE_NAME}.service" << EOF [Unit] Description=SwiftGram Bot Service @@ -354,7 +347,7 @@ fi while true; do clear echo -e "${MAGENTA}╔══════════════════════════════════════════════════════════════╗${NC}" - echo -e "${MAGENTA}║ SWIFTGRAM MANAGER (No Ads) ║${NC}" + echo -e "${MAGENTA}║ SWIFTGRAM MANAGER (Professional) ║${NC}" echo -e "${MAGENTA}╚══════════════════════════════════════════════════════════════╝${NC}" if docker ps --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then