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).
This commit is contained in:
kobaltgit
2026-04-05 23:29:13 +03:00
parent 89825de812
commit 272e712eaa

View File

@@ -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
@@ -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