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:
23
install.sh
23
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
|
||||
|
||||
Reference in New Issue
Block a user