Уменьшение пинга для Binance

Повысьте скорость работы с Binance Futures с помощью наших гайдов. Уменьшите пинг и торгуйте быстрее!

Ускорение пинга

Снижаем задержку до серверов Binance

Стабильность

Надёжные и проверенные методы

Готовые решения

Пошаговые инструкции с кодом

Полезные гайды

Прокси Хабаровск

Скрипт с интерактивным меню дает возможность установить прокси, переустановить прокси, проверить работу + Плюшка - возможность теста лучшего IP адреса Binance с лучшим пингом и заменой его одной кнопкой.

Инструкция по установке:

  1. Берем сервер Хабаровска например edgecenter.ru
  2. Создаём виртуальный сервер Россия, Хабаровск с ОС Ubuntu-20.04-amd64 или выше. Выбираем самый дешевый тариф. Оплачиваем.
  3. Скачиваем SSH клиент Putty с официального сайта.
  4. Запускаем Putty, вводим IP адрес сервера и жмем Open
  5. Вводим пароль
  6. Вводим команду: sudo nano 1.sh
  7. Копируем код ниже (весь скрипт)
  8. Вставляем его в редактор nano (правая кнопка мыши или Shift+Insert)
  9. Нажимаем CTRL+O, Enter, CTRL+X для сохранения
  10. Вводим команду: chmod +x 1.sh
  11. Запускаем скрипт: sudo ./1.sh

Скрипт для установки прокси

#!/bin/bash

# Проверка на запуск от root
if [ "$EUID" -ne 0 ]; then 
    echo "Пожалуйста, запустите скрипт с правами root (sudo $0)"
    exit 1
fi

# Цвета для вывода
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
PURPLE='\033[0;35m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color

# Функция для отображения меню
show_menu() {
    clear
    echo -e "${BLUE}╔════════════════════════════════════════╗${NC}"
    echo -e "${BLUE}║     Установка и настройка Shadowsocks   ║${NC}"
    echo -e "${BLUE}╚════════════════════════════════════════╝${NC}"
    echo ""
    echo "1. Полная установка Shadowsocks-libev"
    echo "2. Переустановить Shadowsocks"
    echo "3. Показать текущие настройки"
    echo "4. Проверить фаервол и порты"
    echo "5. Перезапустить сервис"
    echo "6. Проверить статус сервиса"
    echo "7. Показать логи"
    echo "8. Изменить пароль"
    echo "9. Открыть порт в фаерволе"
    echo "10. Проверить пинг до Binance"
    echo "11. Удалить Shadowsocks"
    echo "12. Наш Telegram канал"
    echo "13. Выход"
    echo ""
    read -p "Выберите действие [1-13]: " choice
}

# Функция для проверки и установки qrencode
install_qrencode() {
    if ! command -v qrencode &> /dev/null; then
        echo -e "${YELLOW}Установка qrencode для генерации QR-кода...${NC}"
        apt update && apt install -y qrencode
    fi
}

# Функция для генерации QR-кода
generate_qr_code() {
    local url="$1"
    if command -v qrencode &> /dev/null; then
        qrencode -t UTF8 "$url"
    else
        echo -e "${RED}Ошибка: qrencode не установлен. Установите: apt install qrencode${NC}"
        return 1
    fi
}

# Функция для отображения информации о Telegram канале
show_telegram_channel() {
    clear
    echo -e "${PURPLE}╔════════════════════════════════════════╗${NC}"
    echo -e "${PURPLE}║       Папа Стифлера X Binance          ║${NC}"
    echo -e "${PURPLE}╚════════════════════════════════════════╝${NC}"
    echo ""
    echo -e "${CYAN}🎯 Присоединяйтесь к нашему Telegram каналу!${NC}"
    echo ""
    echo -e "${GREEN}📢 Что вас ждет:${NC}"
    echo -e "  • ${YELLOW}Эксклюзивные материалы по Binance API${NC}"
    echo -e "  • ${YELLOW}Обход блокировок и настройка прокси${NC}"
    echo -e "  • ${YELLOW}Автоматизация торговли${NC}"
    echo -e "  • ${YELLOW}Советы по безопасности${NC}"
    echo -e "  • ${YELLOW}Обновления и новости${NC}"
    echo ""
    
    # Устанавливаем qrencode если нет
    install_qrencode
    
    # Генерируем QR-код
    echo -e "${GREEN}📲 QR-код для быстрого перехода:${NC}"
    echo ""
    if generate_qr_code "https://t.me/stiflersdad"; then
        echo ""
    fi
    
    echo -e "${GREEN}🔗 Ссылка на канал:${NC}"
    echo -e "  ${YELLOW}t.me/stiflersdad${NC}"
    echo ""
    echo -e "${GREEN}🌐 Прямая ссылка:${NC}"
    echo -e "  ${CYAN}https://t.me/stiflersdad${NC}"
    echo ""
    echo -e "${GREEN}💡 Для быстрого перехода:${NC}"
    echo -e "  ${YELLOW}1. Откройте Telegram${NC}"
    echo -e "  ${YELLOW}2. Нажмите на лупу (поиск)${NC}"
    echo -e "  ${YELLOW}3. Введите: @stiflersdad${NC}"
    echo -e "  ${YELLOW}4. Нажмите 'Присоединиться'${NC}"
    echo ""
    echo -e "${BLUE}🌟 Уже в канале?${NC}"
    echo "  Рекомендуйте нас друзьям!"
    echo ""
    echo -e "${YELLOW}⚠️  ВАЖНО: QR-код может некорректно отображаться в некоторых терминалах.${NC}"
    echo "  В этом случае используйте прямую ссылку выше."
    echo ""
    read -p "Нажмите Enter для возврата в меню..."
}

# Функция для получения данных из конфига
get_config_data() {
    CONFIG_FILE="/var/snap/shadowsocks-libev/common/etc/shadowsocks-libev/config.json"
    
    if [ -f "$CONFIG_FILE" ]; then
        ACTUAL_PORT=$(grep '"server_port"' "$CONFIG_FILE" | grep -o '[0-9]*' | head -1)
        ACTUAL_PASSWORD=$(grep '"password"' "$CONFIG_FILE" | cut -d'"' -f4)
        ACTUAL_METHOD=$(grep '"method"' "$CONFIG_FILE" | cut -d'"' -f4)
    fi
    
    ACTUAL_PORT=${ACTUAL_PORT:-8388}
    ACTUAL_PASSWORD=${ACTUAL_PASSWORD:-"не установлен"}
    ACTUAL_METHOD=${ACTUAL_METHOD:-aes-256-gcm}
}

# Функция для проверки пинга до Binance
check_binance_ping() {
    clear
    echo -e "${BLUE}╔════════════════════════════════════════╗${NC}"
    echo -e "${BLUE}║       Проверка пинга до Binance        ║${NC}"
    echo -e "${BLUE}╚════════════════════════════════════════╝${NC}"
    echo ""
    
    # Цвета для вывода
    local RED='\033[0;31m'
    local GREEN='\033[0;32m'
    local YELLOW='\033[0;33m'
    local BLUE='\033[1;34m'
    local CYAN='\033[0;36m'
    local NC='\033[0m'
    
    # Настройки
    local PING_COUNT=2
    local INTERVAL_MS=500
    local TIMEOUT_S=2
    local IPS=(
        "13.35.51.41"
        "13.35.55.41"
        "13.227.61.59"
        "13.225.173.96"
        "13.225.164.218"
        "18.65.193.131"
        "18.65.207.131"
        "18.65.212.131"
        "18.65.176.132"
        "54.240.188.143"
        "65.9.40.137"
        "99.84.58.138"
        "99.84.137.147"
        "99.84.140.147"
        "143.204.79.125"
        "143.204.127.42"
    )
    local HOSTS_FILE="/etc/hosts"
    local RESULT_TSV="/tmp/binance_results.tsv"
    local RESULT_SORTED="/tmp/binance_sorted.tsv"
    
    echo -e "${CYAN}Проверка пинга до серверов Binance...${NC}"
    echo ""
    
    # Проверка зависимостей
    echo -e "${BLUE}Проверка зависимостей...${NC}"
    
    local MISSING_DEPS=()
    for cmd in fping bc; do
        if ! command -v "$cmd" >/dev/null 2>&1; then
            MISSING_DEPS+=("$cmd")
        fi
    done
    
    # Проверка netcat
    if ! command -v nc >/dev/null 2>&1 && ! command -v netcat >/dev/null 2>&1; then
        MISSING_DEPS+=("netcat")
    fi
    
    if [ ${#MISSING_DEPS[@]} -ne 0 ]; then
        echo -e "${YELLOW}Установка недостающих пакетов...${NC}"
        
        # Обновление кэша пакетов
        apt-get update >/dev/null 2>&1
        
        # Установка пакетов
        for dep in "${MISSING_DEPS[@]}"; do
            case $dep in
                "fping")
                    echo "Установка fping..."
                    apt-get install -y fping >/dev/null 2>&1
                    ;;
                "bc")
                    echo "Установка bc..."
                    apt-get install -y bc >/dev/null 2>&1
                    ;;
                "netcat")
                    echo "Установка netcat..."
                    apt-get install -y netcat-openbsd >/dev/null 2>&1
                    ;;
            esac
        done
        
        echo -e "${GREEN}Все зависимости установлены${NC}"
    fi
    
    echo ""
    echo -e "${BLUE}Тестируем ${#IPS[@]} IP-адресов...${NC}"
    echo ""
    
    : > "$RESULT_TSV"
    local TOTAL=${#IPS[@]}
    local CURRENT=0
    
    for IP in "${IPS[@]}"; do
        CURRENT=$((CURRENT+1))
        
        # Запускаем fping
        ( fping -i "$INTERVAL_MS" -c "$PING_COUNT" -q "$IP" 2>&1 ) >"/tmp/fping_$IP.log"
        local LINE=$(grep 'xmt/rcv/%loss' "/tmp/fping_$IP.log")
        
        # Извлекаем данные из вывода fping
        local LOSS=$(echo "$LINE" | sed -nE 's/.*xmt\/rcv\/%loss = [0-9]+\/[0-9]+\/([0-9]+)%.*/\1/p')
        local MIN=$( echo "$LINE" | sed -nE 's/.*min\/avg\/max = ([0-9.]+)\/([0-9.]+)\/([0-9.]+).*/\1/p')
        local AVG=$( echo "$LINE" | sed -nE 's/.*min\/avg\/max = ([0-9.]+)\/([0-9.]+)\/([0-9.]+).*/\2/p')
        local MAX=$( echo "$LINE" | sed -nE 's/.*min\/avg\/max = ([0-9.]+)\/([0-9.]+)\/([0-9.]+).*/\3/p')
        
        [ -z "$LOSS" ] && LOSS=100
        [ -z "$MIN" ] && MIN=9999
        [ -z "$AVG" ] && AVG=9999
        [ -z "$MAX" ] && MAX=9999
        
        # Рассчитываем джиттер
        local JITTER=$(echo "scale=2; $MAX - $MIN" | bc -l 2>/dev/null || echo "9999")
        [ -z "$JITTER" ] && JITTER=9999
        
        # Проверяем порт 443
        if timeout "$TIMEOUT_S" bash -c "cat < /dev/null > /dev/tcp/$IP/443" 2>/dev/null; then
            local PORT_STATUS="OK"
        else
            local PORT_STATUS="FAIL"
        fi
        
        # Рассчитываем score
        if [ "$PORT_STATUS" = "FAIL" ]; then
            local SCORE=0
        else
            local SCORE=$(echo "scale=2; 100 - ($AVG/10) - ($LOSS*0.5) - ($JITTER/5)" | bc -l 2>/dev/null || echo "0")
            # Проверяем границы score
            if (( $(echo "$SCORE < 0" | bc -l 2>/dev/null) )); then
                SCORE=0
            elif (( $(echo "$SCORE > 100" | bc -l 2>/dev/null) )); then
                SCORE=100
            fi
        fi
        
        printf "%s\t%s\t%s\t%s\t%s\t%s\t%.2f\t%s\n" \
            "$IP" "$LOSS" "$MIN" "$AVG" "$MAX" "$JITTER" "$SCORE" "$PORT_STATUS" >> "$RESULT_TSV"
        
        # Прогресс
        local PROGRESS=$((CURRENT*100/TOTAL))
        printf "\rПрогресс: ["
        for ((i=0; i<20; i++)); do
            if [ $i -lt $((PROGRESS/5)) ]; then
                printf "#"
            else
                printf " "
            fi
        done
        printf "] %3d%% (%d/%d)" "$PROGRESS" "$CURRENT" "$TOTAL"
    done
    
    echo -e "\n${GREEN}✓ Тестирование завершено${NC}"
    
    # Сортировка
    sort -t $'\t' -k7,7nr "$RESULT_TSV" > "$RESULT_SORTED"
    
    # Текущий IP
    local CURRENT_IP=$(grep -E '[[:space:]]fapi\.binance\.com$' "$HOSTS_FILE" 2>/dev/null | awk '{print $1}' | tail -n1)
    
    # Вывод результатов
    echo ""
    echo -e "${BLUE}════════════════════════════ РЕЗУЛЬТАТЫ ════════════════════════════${NC}"
    printf "%-16s %-12s %-8s %-8s %-8s %-10s %-10s %-10s %-2s %-2s\n" \
        "IP-адрес" "Потери(%)" "min" "avg" "max" "Джиттер" "Score" "Порт443" "★" "✗"
    echo "────────────────────────────────────────────────────────────────────────────────"
    
    local line_no=0
    local BEST_IP=$(head -n1 "$RESULT_SORTED" | cut -f1)
    
    while IFS=$'\t' read -r ip loss min avg max jitter score port; do
        line_no=$((line_no+1))
        local star="" mark="" color="$NC"
        
        # Форматирование SCORE
        local score_fmt=$(printf "%.2f" "$score" 2>/dev/null)
        if [[ "$score_fmt" =~ ^\. ]]; then
            score_fmt="0$score_fmt"
        fi
        
        # Форматирование Джиттера
        local jitter_fmt=$(printf "%.2f" "$jitter" 2>/dev/null)
        if [[ "$jitter_fmt" =~ ^\. ]]; then
            jitter_fmt="0$jitter_fmt"
        fi
        
        if [ "$line_no" -eq 1 ]; then
            star="★"
            color="$GREEN"
        fi
        
        if [ -n "$CURRENT_IP" ] && [ "$ip" = "$CURRENT_IP" ]; then
            mark="✗"
            color="$YELLOW"
        fi
        
        if [ "$loss" -ge 20 ] 2>/dev/null; then
            color="$RED"
        fi
        
        printf "${color}%-16s %-12s %-8s %-8s %-8s %-10s %-10s %-10s %-2s %-2s${NC}\n" \
            "$ip" "$loss" "$min" "$avg" "$max" "$jitter_fmt" "$score_fmt" "$port" "$star" "$mark"
    done < "$RESULT_SORTED"
    
    echo "────────────────────────────────────────────────────────────────────────────────"
    echo -e "${CYAN}Лучший IP:${NC} ${GREEN}$BEST_IP${NC}"
    echo -e "${CYAN}Текущий IP:${NC} ${YELLOW}${CURRENT_IP:-не установлен}${NC}"
    
    # Предложение обновить hosts
    echo ""
    if [ -w "$HOSTS_FILE" ] || [ "$EUID" -eq 0 ]; then
        if [ -n "$BEST_IP" ] && [ "$BEST_IP" != "$CURRENT_IP" ]; then
            read -p "Обновить /etc/hosts на $BEST_IP? (y/N): " choice
            if [[ "$choice" =~ ^[Yy]$ ]]; then
                # Создаем backup
                local BACKUP_FILE="/etc/hosts.backup.$(date +%Y%m%d_%H%M%S)"
                cp "$HOSTS_FILE" "$BACKUP_FILE" 2>/dev/null
                echo -e "${YELLOW}Создан backup: $BACKUP_FILE${NC}"
                
                # Обновляем hosts
                sed -i '/[[:space:]]fapi\.binance\.com$/d' "$HOSTS_FILE"
                sed -i '/[[:space:]]api\.binance\.com$/d' "$HOSTS_FILE"
                echo "$BEST_IP fapi.binance.com" >> "$HOSTS_FILE"
                echo "$BEST_IP api.binance.com" >> "$HOSTS_FILE"
                
                echo -e "✅ ${GREEN}/etc/hosts обновлён.${NC}"
                echo -e "${YELLOW}Перезапустите приложение для применения изменений.${NC}"
            else
                echo "Отмена."
            fi
        elif [ "$BEST_IP" = "$CURRENT_IP" ]; then
            echo -e "${GREEN}✓ Текущий IP уже является лучшим.${NC}"
        fi
    else
        echo -e "${YELLOW}Внимание: Для обновления /etc/hosts требуются права root${NC}"
    fi
    
    # Очистка временных файлов
    rm -f "$RESULT_TSV" "$RESULT_SORTED" "/tmp/fping_"*.log 2>/dev/null
    
    echo ""
    read -p "Нажмите Enter для возврата в меню..."
}

# Функция для отображения текущих настроек
show_current_settings() {
    get_config_data
    clear
    echo -e "${BLUE}╔════════════════════════════════════════╗${NC}"
    echo -e "${BLUE}║        Текущие настройки               ║${NC}"
    echo -e "${BLUE}╚════════════════════════════════════════╝${NC}"
    echo ""
    echo -e "${GREEN}Конфигурационный файл:${NC}"
    echo "  /var/snap/shadowsocks-libev/common/etc/shadowsocks-libev/config.json"
    echo ""
    echo -e "${GREEN}Параметры подключения:${NC}"
    echo -e "  Порт: ${YELLOW}${ACTUAL_PORT}${NC}"
    echo -e "  Пароль: ${YELLOW}${ACTUAL_PASSWORD}${NC}"
    echo -e "  Метод шифрования: ${YELLOW}${ACTUAL_METHOD}${NC}"
    echo -e "  Протокол: ${YELLOW}TCP и UDP${NC}"
    echo ""
    echo -e "${GREEN}Состояние сервиса:${NC}"
    systemctl status shadowsocks-libev-server@config --no-pager | grep -E "(Active:|Loaded:|Main PID:)" | head -3
    echo ""
    echo -e "${GREEN}Порт в фаерволе:${NC}"
    
    if command -v iptables &> /dev/null; then
        if iptables -L INPUT -n 2>/dev/null | grep -q ":${ACTUAL_PORT}\b" || \
           iptables-save 2>/dev/null | grep -q "dport ${ACTUAL_PORT}" || \
           iptables -L 2>/dev/null | grep -q "${ACTUAL_PORT}"; then
            echo -e "  ${GREEN}✓ Порт ${ACTUAL_PORT} открыт в iptables${NC}"
        else
            echo -e "  ${RED}✗ Порт ${ACTUAL_PORT} не открыт в iptables${NC}"
            echo -e "  ${YELLOW}  Чтобы открыть, выберите пункт 9 в меню${NC}"
        fi
    else
        echo "  iptables не установлен"
        echo "  Установите: apt install iptables"
    fi
    
    echo ""
    read -p "Нажмите Enter для продолжения..."
}

# Функция для полной установки
full_installation() {
    clear
    echo -e "${BLUE}╔════════════════════════════════════════╗${NC}"
    echo -e "${BLUE}║        Полная установка                ║${NC}"
    echo -e "${BLUE}╚════════════════════════════════════════╝${NC}"
    
    # Проверяем, не установлен ли уже сервис
    if systemctl is-active --quiet shadowsocks-libev-server@config 2>/dev/null; then
        echo -e "\n${YELLOW}⚠ Shadowsocks уже установлен и работает${NC}"
        read -p "Хотите переустановить? (y/N): " reinstall
        if [[ ! "$reinstall" =~ ^[Yy]$ ]]; then
            echo "Установка отменена"
            read -p "Нажмите Enter для возврата в меню..."
            return
        fi
        # Останавливаем сервис перед установкой
        systemctl stop shadowsocks-libev-server@config
        systemctl disable shadowsocks-libev-server@config
    fi
    
    # Запрос пароля
    echo ""
    read -sp "Введите пароль для Shadowsocks (по умолчанию: 123456): " PASSWORD
    echo ""
    PASSWORD=${PASSWORD:-123456}
    
    # Стандартные значения
    SERVER_PORT="8388"
    METHOD="aes-256-gcm"
    
    # 1. Обновление пакетов
    echo -e "\n${YELLOW}[1/9] Обновление пакетов...${NC}"
    apt update && apt upgrade -y
    
    # 2. Установка snapd и shadowsocks-libev
    echo -e "\n${YELLOW}[2/9] Установка snapd и shadowsocks-libev...${NC}"
    apt install -y snapd
    snap install shadowsocks-libev
    
    # 3. Создание директории для конфигурации
    echo -e "\n${YELLOW}[3/9] Создание директории для конфигурации...${NC}"
    mkdir -p /var/snap/shadowsocks-libev/common/etc/shadowsocks-libev
    
    # 4. Создание и настройка файла конфигурации
    echo -e "\n${YELLOW}[4/9] Создание файла конфигурации...${NC}"
    cat > /var/snap/shadowsocks-libev/common/etc/shadowsocks-libev/config.json << EOF
{
"server":["::0", "0.0.0.0"],
"mode":"tcp_and_udp",
"server_port":${SERVER_PORT},
"local_port":1080,
"password":"${PASSWORD}",
"timeout":60,
"fast_open":true,
"reuse_port": true,
"no_delay": true,
"method":"${METHOD}"
}
EOF
    echo -e "${GREEN}✓ Файл конфигурации создан${NC}"
    
    # 5. Создание сервиса автозапуска
    echo -e "\n${YELLOW}[5/9] Создание сервиса автозапуска...${NC}"
    cat > /etc/systemd/system/shadowsocks-libev-server@.service << EOF
[Unit]
Description=Shadowsocks-Libev Custom Server Service for %I
Documentation=man:ss-server(1)
After=network-online.target

[Service]
Type=simple
ExecStart=/usr/bin/snap run shadowsocks-libev.ss-server -c /var/snap/shadowsocks-libev/common/etc/shadowsocks-libev/%i.json

[Install]
WantedBy=multi-user.target
EOF
    
    # 6. Запуск сервиса
    echo -e "\n${YELLOW}[6/9] Запуск сервиса...${NC}"
    systemctl daemon-reload
    systemctl enable --now shadowsocks-libev-server@config
    
    # 7. Проверка статуса сервиса
    echo -e "\n${YELLOW}[7/9] Проверка статуса сервиса...${NC}"
    if systemctl is-active --quiet shadowsocks-libev-server@config; then
        echo -e "${GREEN}✓ Сервис успешно запущен${NC}"
    else
        echo -e "${RED}✗ Ошибка запуска сервиса${NC}"
        systemctl status shadowsocks-libev-server@config --no-pager
    fi
    
    # 8. Настройка фаервола
    echo -e "\n${YELLOW}[8/9] Настройка фаервола...${NC}"
    if command -v iptables &> /dev/null; then
        iptables -I INPUT -p tcp --dport ${SERVER_PORT} -j ACCEPT
        iptables -I INPUT -p udp --dport ${SERVER_PORT} -j ACCEPT
        echo -e "${GREEN}✓ Правила iptables добавлены для порта ${SERVER_PORT}${NC}"
    else
        echo -e "${YELLOW}⚠ iptables не найден${NC}"
        echo "Установите iptables: apt install iptables"
    fi
    
    # 9. Настройка файла hosts
    echo -e "\n${YELLOW}[9/9] Обновление файла /etc/hosts...${NC}"
    if ! grep -q "fapi.binance.com" /etc/hosts; then
        echo -e "\n# Binance API\n99.84.140.147 fapi.binance.com\n99.84.140.147 api.binance.com" >> /etc/hosts
        echo -e "${GREEN}✓ Записи добавлены в /etc/hosts${NC}"
    else
        echo -e "${YELLOW}⚠ Записи уже существуют в /etc/hosts${NC}"
    fi
    
    # Показываем итоговую информацию
    get_config_data
    echo -e "\n${GREEN}╔════════════════════════════════════════╗${NC}"
    echo -e "${GREEN}║    Установка успешно завершена!        ║${NC}"
    echo -e "${GREEN}╚════════════════════════════════════════╝${NC}"
    echo ""
    echo -e "${BLUE}Данные для подключения:${NC}"
    echo -e "  Порт: ${YELLOW}${ACTUAL_PORT}${NC}"
    echo -e "  Пароль: ${YELLOW}${ACTUAL_PASSWORD}${NC}"
    echo -e "  Метод: ${YELLOW}${ACTUAL_METHOD}${NC}"
    echo ""
    
    # Добавляем информацию о Telegram канале
    echo -e "${PURPLE}🎯 Присоединяйтесь к нашему Telegram каналу!${NC}"
    echo -e "${CYAN}Папа Стифлера X Binance${NC}"
    echo -e "${YELLOW}t.me/stiflersdad${NC}"
    
    echo ""
    read -p "Нажмите Enter для возврата в меню..."
}

# Функция для переустановки
reinstall_shadowsocks() {
    clear
    echo -e "${BLUE}╔════════════════════════════════════════╗${NC}"
    echo -e "${BLUE}║        Переустановка Shadowsocks       ║${NC}"
    echo -e "${BLUE}╚════════════════════════════════════════╝${NC}"
    
    # Проверяем, установлен ли сервис
    if ! systemctl is-active --quiet shadowsocks-libev-server@config 2>/dev/null && \
       [ ! -f "/var/snap/shadowsocks-libev/common/etc/shadowsocks-libev/config.json" ]; then
        echo -e "\n${RED}✗ Shadowsocks не установлен${NC}"
        echo "Сначала выполните полную установку"
        echo ""
        read -p "Нажмите Enter для возврата в меню..."
        return
    fi
    
    # Получаем текущий пароль для предложения по умолчанию
    OLD_PASSWORD="123456"
    if [ -f "/var/snap/shadowsocks-libev/common/etc/shadowsocks-libev/config.json" ]; then
        OLD_PASSWORD=$(grep '"password"' "/var/snap/shadowsocks-libev/common/etc/shadowsocks-libev/config.json" | cut -d'"' -f4)
    fi
    
    echo ""
    read -sp "Введите новый пароль (по умолчанию: $OLD_PASSWORD): " NEW_PASSWORD
    echo ""
    NEW_PASSWORD=${NEW_PASSWORD:-$OLD_PASSWORD}
    
    echo -e "\n${YELLOW}Начинаем переустановку...${NC}"
    
    # 1. Останавливаем сервис
    echo -e "\n${YELLOW}[1/7] Остановка сервиса...${NC}"
    systemctl stop shadowsocks-libev-server@config 2>/dev/null
    systemctl disable shadowsocks-libev-server@config 2>/dev/null
    echo -e "${GREEN}✓ Сервис остановлен${NC}"
    
    # 2. Удаляем старый конфиг
    echo -e "\n${YELLOW}[2/7] Удаление старой конфигурации...${NC}"
    rm -f /var/snap/shadowsocks-libev/common/etc/shadowsocks-libev/config.json
    echo -e "${GREEN}✓ Старый конфиг удален${NC}"
    
    # 3. Создаем новый конфиг
    echo -e "\n${YELLOW}[3/7] Создание новой конфигурации...${NC}"
    cat > /var/snap/shadowsocks-libev/common/etc/shadowsocks-libev/config.json << EOF
{
"server":["::0", "0.0.0.0"],
"mode":"tcp_and_udp",
"server_port":8388,
"local_port":1080,
"password":"${NEW_PASSWORD}",
"timeout":60,
"fast_open":true,
"reuse_port": true,
"no_delay": true,
"method":"aes-256-gcm"
}
EOF
    echo -e "${GREEN}✓ Новый конфиг создан${NC}"
    
    # 4. Пересоздаем сервис (на случай изменений)
    echo -e "\n${YELLOW}[4/7] Обновление сервиса...${NC}"
    cat > /etc/systemd/system/shadowsocks-libev-server@.service << EOF
[Unit]
Description=Shadowsocks-Libev Custom Server Service for %I
Documentation=man:ss-server(1)
After=network-online.target

[Service]
Type=simple
ExecStart=/usr/bin/snap run shadowsocks-libev.ss-server -c /var/snap/shadowsocks-libev/common/etc/shadowsocks-libev/%i.json

[Install]
WantedBy=multi-user.target
EOF
    echo -e "${GREEN}✓ Сервис обновлен${NC}"
    
    # 5. Перезагружаем демон и запускаем сервис
    echo -e "\n${YELLOW}[5/7] Перезапуск демона systemd...${NC}"
    systemctl daemon-reload
    echo -e "${GREEN}✓ Демон перезагружен${NC}"
    
    echo -e "\n${YELLOW}[6/7] Запуск сервиса...${NC}"
    systemctl enable --now shadowsocks-libev-server@config
    sleep 2
    
    # 6. Проверка статуса
    echo -e "\n${YELLOW}[7/7] Проверка статуса...${NC}"
    if systemctl is-active --quiet shadowsocks-libev-server@config; then
        echo -e "${GREEN}✓ Сервис успешно переустановлен и запущен${NC}"
    else
        echo -e "${RED}✗ Ошибка запуска сервиса${NC}"
        systemctl status shadowsocks-libev-server@config --no-pager
    fi
    
    # Показываем итоговую информацию
    get_config_data
    echo -e "\n${GREEN}╔════════════════════════════════════════╗${NC}"
    echo -e "${GREEN}║   Переустановка успешно завершена!     ║${NC}"
    echo -e "${GREEN}╚════════════════════════════════════════╝${NC}"
    echo ""
    echo -e "${BLUE}Новые данные для подключения:${NC}"
    echo -e "  Порт: ${YELLOW}${ACTUAL_PORT}${NC}"
    echo -e "  Пароль: ${YELLOW}${ACTUAL_PASSWORD}${NC}"
    echo -e "  Метод: ${YELLOW}${ACTUAL_METHOD}${NC}"
    echo ""
    
    # Добавляем информацию о Telegram канале
    echo -e "${PURPLE}🎯 Присоединяйтесь к нашему Telegram каналу!${NC}"
    echo -e "${CYAN}Папа Стифлера X Binance${NC}"
    echo -e "${YELLOW}t.me/stiflersdad${NC}"
    
    echo ""
    read -p "Нажмите Enter для возврата в меню..."
}

# Функция для удаления Shadowsocks
uninstall_shadowsocks() {
    clear
    echo -e "${BLUE}╔════════════════════════════════════════╗${NC}"
    echo -e "${BLUE}║        Удаление Shadowsocks            ║${NC}"
    echo -e "${BLUE}╚════════════════════════════════════════╝${NC}"
    
    echo -e "\n${RED}ВНИМАНИЕ: Это действие удалит Shadowsocks с вашего сервера!${NC}"
    echo ""
    read -p "Вы уверены, что хотите удалить Shadowsocks? (y/N): " confirm
    
    if [[ ! "$confirm" =~ ^[Yy]$ ]]; then
        echo "Удаление отменено"
        read -p "Нажмите Enter для возврата в меню..."
        return
    fi
    
    echo -e "\n${YELLOW}Начинаем удаление...${NC}"
    
    # 1. Останавливаем сервис
    echo -e "\n${YELLOW}[1/5] Остановка сервиса...${NC}"
    systemctl stop shadowsocks-libev-server@config 2>/dev/null
    systemctl disable shadowsocks-libev-server@config 2>/dev/null
    echo -e "${GREEN}✓ Сервис остановлен${NC}"
    
    # 2. Удаляем сервис
    echo -e "\n${YELLOW}[2/5] Удаление сервиса...${NC}"
    rm -f /etc/systemd/system/shadowsocks-libev-server@.service
    systemctl daemon-reload
    echo -e "${GREEN}✓ Сервис удален${NC}"
    
    # 3. Удаляем конфигурацию
    echo -e "\n${YELLOW}[3/5] Удаление конфигурации...${NC}"
    rm -rf /var/snap/shadowsocks-libev/common/etc/shadowsocks-libev
    echo -e "${GREEN}✓ Конфигурация удалена${NC}"
    
    # 4. Удаляем snap пакет
    echo -e "\n${YELLOW}[4/5] Удаление snap пакета...${NC}"
    snap remove shadowsocks-libev 2>/dev/null
    echo -e "${GREEN}✓ Snap пакет удален${NC}"
    
    # 5. Удаляем правила iptables
    echo -e "\n${YELLOW}[5/5] Удаление правил фаервола...${NC}"
    if command -v iptables &> /dev/null; then
        iptables -D INPUT -p tcp --dport 8388 -j ACCEPT 2>/dev/null
        iptables -D INPUT -p udp --dport 8388 -j ACCEPT 2>/dev/null
        echo -e "${GREEN}✓ Правила фаервола удалены${NC}"
    fi
    
    echo -e "\n${GREEN}╔════════════════════════════════════════╗${NC}"
    echo -e "${GREEN}║     Удаление успешно завершено!        ║${NC}"
    echo -e "${GREEN}╚════════════════════════════════════════╝${NC}"
    echo ""
    echo "Shadowsocks полностью удален с вашего сервера."
    echo ""
    
    # Добавляем информацию о Telegram канале
    echo -e "${PURPLE}🎯 Остались вопросы? Присоединяйтесь к нашему Telegram каналу!${NC}"
    echo -e "${CYAN}Папа Стифлера X Binance${NC}"
    echo -e "${YELLOW}t.me/stiflersdad${NC}"
    
    echo ""
    read -p "Нажмите Enter для возврата в меню..."
}

# Функция для перезапуска сервиса
restart_service() {
    clear
    echo -e "${BLUE}╔════════════════════════════════════════╗${NC}"
    echo -e "${BLUE}║        Перезапуск сервиса              ║${NC}"
    echo -e "${BLUE}╚════════════════════════════════════════╝${NC}"
    echo ""
    
    if systemctl restart shadowsocks-libev-server@config; then
        echo -e "${GREEN}✓ Сервис успешно перезапущен${NC}"
    else
        echo -e "${RED}✗ Ошибка перезапуска сервиса${NC}"
    fi
    
    echo ""
    systemctl status shadowsocks-libev-server@config --no-pager
    echo ""
    read -p "Нажмите Enter для продолжения..."
}

# Функция для проверки статуса сервиса
check_service_status() {
    clear
    echo -e "${BLUE}╔════════════════════════════════════════╗${NC}"
    echo -e "${BLUE}║        Статус сервиса                  ║${NC}"
    echo -e "${BLUE}╚════════════════════════════════════════╝${NC}"
    echo ""
    systemctl status shadowsocks-libev-server@config --no-pager
    echo ""
    read -p "Нажмите Enter для продолжения..."
}

# Функция для показа логов
show_logs() {
    clear
    echo -e "${BLUE}╔════════════════════════════════════════╗${NC}"
    echo -e "${BLUE}║        Логи сервиса                    ║${NC}"
    echo -e "${BLUE}╚════════════════════════════════════════╝${NC}"
    echo ""
    echo "Последние 50 строк логов:"
    echo "--------------------------------------------------"
    journalctl -u shadowsocks-libev-server@config -n 50 --no-pager
    echo ""
    echo "Для просмотра логов в реальном времени:"
    echo "journalctl -u shadowsocks-libev-server@config -f"
    echo ""
    read -p "Нажмите Enter для продолжения..."
}

# Функция для изменения пароля
change_password() {
    clear
    echo -e "${BLUE}╔════════════════════════════════════════╗${NC}"
    echo -e "${BLUE}║        Изменение пароля                ║${NC}"
    echo -e "${BLUE}╚════════════════════════════════════════╝${NC}"
    echo ""
    
    CONFIG_FILE="/var/snap/shadowsocks-libev/common/etc/shadowsocks-libev/config.json"
    
    if [ ! -f "$CONFIG_FILE" ]; then
        echo -e "${RED}✗ Файл конфигурации не найден${NC}"
        echo "Выполните полную установку сначала"
        echo ""
        read -p "Нажмите Enter для продолжения..."
        return
    fi
    
    # Получаем текущий пароль
    CURRENT_PASS=$(grep '"password"' "$CONFIG_FILE" | cut -d'"' -f4)
    echo -e "Текущий пароль: ${YELLOW}${CURRENT_PASS}${NC}"
    echo ""
    
    read -sp "Введите новый пароль: " NEW_PASS
    echo ""
    
    if [ -z "$NEW_PASS" ]; then
        echo -e "${RED}✗ Пароль не может быть пустым${NC}"
        read -p "Нажмите Enter для продолжения..."
        return
    fi
    
    # Сохраняем старый конфиг и заменяем пароль
    TEMP_FILE=$(mktemp)
    sed "s/\"password\":\"${CURRENT_PASS}\"/\"password\":\"${NEW_PASS}\"/" "$CONFIG_FILE" > "$TEMP_FILE"
    
    if mv "$TEMP_FILE" "$CONFIG_FILE"; then
        echo -e "${GREEN}✓ Пароль успешно изменен${NC}"
        
        # Перезапускаем сервис
        if systemctl restart shadowsocks-libev-server@config; then
            echo -e "${GREEN}✓ Сервис перезапущен с новым паролем${NC}"
        else
            echo -e "${YELLOW}⚠ Ошибка при перезапуске сервиса${NC}"
        fi
        
        echo ""
        echo -e "Новый пароль: ${YELLOW}${NEW_PASS}${NC}"
    else
        echo -e "${RED}✗ Ошибка при изменении пароля${NC}"
    fi
    
    echo ""
    read -p "Нажмите Enter для продолжения..."
}

# Функция для открытия порта в фаерволе
open_firewall_port() {
    clear
    echo -e "${BLUE}╔════════════════════════════════════════╗${NC}"
    echo -e "${BLUE}║        Открытие порта в фаерволе       ║${NC}"
    echo -e "${BLUE}╚════════════════════════════════════════╝${NC}"
    echo ""
    
    if ! command -v iptables &> /dev/null; then
        echo -e "${RED}✗ iptables не установлен${NC}"
        read -p "Установить iptables? (y/N): " install_iptables
        if [[ "$install_iptables" =~ ^[Yy]$ ]]; then
            apt install -y iptables
        else
            echo "Пропускаем настройку фаервола"
            read -p "Нажмите Enter для продолжения..."
            return
        fi
    fi
    
    get_config_data
    
    echo -e "Текущий порт в конфигурации: ${YELLOW}${ACTUAL_PORT}${NC}"
    echo ""
    
    # Проверяем, открыт ли уже порт
    PORT_OPEN=false
    if iptables -L INPUT -n 2>/dev/null | grep -q ":${ACTUAL_PORT}\b"; then
        PORT_OPEN=true
        echo -e "${YELLOW}⚠ Порт ${ACTUAL_PORT} уже открыт в iptables${NC}"
    fi
    
    if [ "$PORT_OPEN" = false ]; then
        read -p "Открыть порт ${ACTUAL_PORT} в фаерволе? (y/N): " confirm
        if [[ "$confirm" =~ ^[Yy]$ ]]; then
            # Добавляем правила для TCP и UDP
            iptables -A INPUT -p tcp --dport ${ACTUAL_PORT} -j ACCEPT
            iptables -A INPUT -p udp --dport ${ACTUAL_PORT} -j ACCEPT
            
            # Также добавляем через -I для двойной гарантии
            iptables -I INPUT -p tcp --dport ${ACTUAL_PORT} -j ACCEPT
            iptables -I INPUT -p udp --dport ${ACTUAL_PORT} -j ACCEPT
            
            echo -e "${GREEN}✓ Порт ${ACTUAL_PORT} открыт в iptables${NC}"
            
            # Сохраняем правила если установлен iptables-persistent
            if command -v netfilter-persistent &> /dev/null; then
                netfilter-persistent save
                echo -e "${GREEN}✓ Правила сохранены для перезагрузки${NC}"
            elif command -v iptables-save &> /dev/null && [ -d /etc/iptables ]; then
                iptables-save > /etc/iptables/rules.v4
                echo -e "${GREEN}✓ Правила сохранены в /etc/iptables/rules.v4${NC}"
            fi
        fi
    fi
    
    echo ""
    echo "Текущие правила iptables для порта ${ACTUAL_PORT}:"
    echo "--------------------------------------------------"
    iptables -L INPUT -n 2>/dev/null | grep -E "(${ACTUAL_PORT}|dpt:${ACTUAL_PORT})" || echo "Правила не найдены"
    
    echo ""
    echo -e "${YELLOW}Примечание:${NC}"
    echo "Если вы используете cloud-сервер (AWS, GCP, DigitalOcean, etc.),"
    echo "вам также нужно открыть порт в настройках безопасности облачного провайдера."
    echo ""
    read -p "Нажмите Enter для продолжения..."
}

# Функция для проверки фаервола
check_firewall() {
    clear
    echo -e "${BLUE}╔════════════════════════════════════════╗${NC}"
    echo -e "${BLUE}║        Проверка фаервола               ║${NC}"
    echo -e "${BLUE}╚════════════════════════════════════════╝${NC}"
    echo ""
    
    get_config_data
    
    echo -e "${YELLOW}Проверка порта ${ACTUAL_PORT} в фаерволе:${NC}"
    echo ""
    
    # Проверка iptables
    echo "1. Проверка iptables:"
    if command -v iptables &> /dev/null; then
        echo "   Статус: Установлен"
        echo ""
        echo "   Правила для порта ${ACTUAL_PORT}:"
        iptables -L INPUT -n 2>/dev/null | grep -E "(${ACTUAL_PORT}|dpt:${ACTUAL_PORT})" | while read line; do
            echo "   - $line"
        done
        
        if iptables -L INPUT -n 2>/dev/null | grep -q ":${ACTUAL_PORT}\b"; then
            echo -e "   ${GREEN}✓ Порт открыт в iptables${NC}"
        else
            echo -e "   ${RED}✗ Порт не найден в iptables${NC}"
        fi
    else
        echo -e "   ${RED}✗ iptables не установлен${NC}"
    fi
    
    echo ""
    echo "2. Проверка ufw (если используется):"
    if command -v ufw &> /dev/null; then
        echo "   Статус: Установлен"
        ufw status | grep ${ACTUAL_PORT}
    else
        echo "   ufw не установлен"
    fi
    
    echo ""
    echo "3. Проверка netstat/ss:"
    if command -v ss &> /dev/null; then
        echo "   Прослушиваемые порты:"
        ss -tulpn 2>/dev/null | grep ":${ACTUAL_PORT}" || echo "   Порт не слушается"
    fi
    
    echo ""
    echo "4. Быстрая проверка доступности:"
    echo "   Локально:"
    if timeout 2 bash -c "echo > /dev/tcp/localhost/${ACTUAL_PORT}" 2>/dev/null; then
        echo -e "   ${GREEN}✓ Порт доступен локально${NC}"
    else
        echo -e "   ${RED}✗ Порт недоступен локально${NC}"
    fi
    
    echo ""
    echo -e "${YELLOW}Рекомендации:${NC}"
    echo "- Если порт не открыт в iptables, используйте пункт 9 в меню"
    echo "- Если используете облачный сервер, проверьте Security Groups/Firewall rules"
    echo "- Для проверки извне: nc -zv ваш_публичный_IP ${ACTUAL_PORT}"
    
    echo ""
    read -p "Нажмите Enter для продолжения..."
}

# Главный цикл меню
while true; do
    show_menu
    case $choice in
        1)
            full_installation
            ;;
        2)
            reinstall_shadowsocks
            ;;
        3)
            show_current_settings
            ;;
        4)
            check_firewall
            ;;
        5)
            restart_service
            ;;
        6)
            check_service_status
            ;;
        7)
            show_logs
            ;;
        8)
            change_password
            ;;
        9)
            open_firewall_port
            ;;
        10)
            check_binance_ping
            ;;
        11)
            uninstall_shadowsocks
            ;;
        12)
            show_telegram_channel
            ;;
        13)
            clear
            echo -e "${GREEN}До свидания!${NC}"
            echo -e "${CYAN}Присоединяйтесь к нашему Telegram каналу: t.me/stiflersdad${NC}"
            exit 0
            ;;
        *)
            echo -e "${RED}Неверный выбор. Попробуйте снова.${NC}"
            sleep 2
            ;;
    esac
done

Примечание: Скопируйте весь скрипт выше и вставьте его в файл 1.sh на вашем сервере.

Связка Хабаровск + Токио

Настройка двух серверов для максимального уменьшения пинга. Сначала настраиваем сервер в Токио, затем сервер в Хабаровске.

Сначала Токио сервер

  1. Запускаем Putty, вводим IP адрес сервера и жмем Open
  2. Вводим пароль
  3. Вводим команду: sudo nano 1.sh
  4. Копируем код ниже (сверни его под спойлер и помень мне место, а я сам вставлю код)
  5. Вставляем его в редактор nano (правая кнопка мыши или Shift+Insert)
  6. Нажимаем CTRL+O, Enter, CTRL+X для сохранения
  7. Вводим команду: chmod +x 1.sh
  8. Запускаем скрипт: sudo ./1.sh и следуем пунктам - ничего сложного

Скрипт для сервера в Токио

#!/bin/bash
# shadowsocks-interactive.sh - Интерактивное управление Shadowsocks-libev

set -e

# Конфигурация
PORT="8388"
PASSWORD="427566"
CONFIG_FILE="/etc/shadowsocks-libev/config.json"
SERVICE_NAME="shadowsocks-libev"

# Функции
install_shadowsocks() {
    echo "🔧 Устанавливаем Shadowsocks-libev..."
    echo "═══════════════════════════════════════════"
    
    sudo apt update -qq && sudo apt upgrade -y -qq
    sudo apt install -y shadowsocks-libev iptables-persistent > /dev/null
    
    # Проверяем и освобождаем порт
    echo "🔍 Проверяем порт $PORT..."
    if sudo ss -tulpn | grep ":$PORT" > /dev/null; then
        echo "⚠️  Порт $PORT занят, освобождаем..."
        sudo systemctl stop $SERVICE_NAME 2>/dev/null || true
        sudo fuser -k $PORT/tcp 2>/dev/null || true
        sudo fuser -k $PORT/udp 2>/dev/null || true
        sleep 2
    fi
    
    # Создаем конфиг
    echo "📁 Создаем конфигурационный файл..."
    sudo mkdir -p /etc/shadowsocks-libev
    sudo bash -c "cat > $CONFIG_FILE" </dev/null || true
    sudo iptables -D INPUT -p udp --dport $PORT -j ACCEPT 2>/dev/null || true
    
    sudo iptables -I INPUT -p tcp --dport $PORT -j ACCEPT
    sudo iptables -I INPUT -p udp --dport $PORT -j ACCEPT
    sudo netfilter-persistent save > /dev/null 2>&1
    
    # Запускаем сервис
    echo "🚀 Запускаем сервис..."
    sudo systemctl daemon-reload
    sudo systemctl enable --now $SERVICE_NAME > /dev/null
    
    sleep 2
    echo "✅ Установка завершена!"
    
    # Показываем статус
    check_status
    read -p "Нажмите Enter для продолжения..."
}

check_status() {
    echo "🔍 Проверяем состояние Shadowsocks..."
    echo "═══════════════════════════════════════════"
    
    # Проверяем сервис
    if systemctl is-active --quiet $SERVICE_NAME; then
        echo "✅ Сервис $SERVICE_NAME запущен"
        echo "📊 Статус:"
        sudo systemctl status $SERVICE_NAME --no-pager | grep -A 2 "Active:"
    else
        echo "❌ Сервис $SERVICE_NAME не запущен"
    fi
    
    echo ""
    echo "📡 Проверяем порт $PORT:"
    if sudo ss -tulpn | grep ":$PORT" > /dev/null; then
        sudo ss -tulpn | grep ":$PORT"
        echo "✅ Порт $PORT слушается"
    else
        echo "⚠️  Порт $PORT не слушается"
    fi
    
    # Проверяем конфиг
    echo ""
    echo "📄 Проверяем конфигурацию:"
    if [ -f "$CONFIG_FILE" ]; then
        echo "✅ Конфиг найден: $CONFIG_FILE"
        echo "   Порт: $(sudo grep -o '"server_port": [0-9]*' $CONFIG_FILE | grep -o '[0-9]*')"
        echo "   Метод: $(sudo grep -o '"method": "[^"]*"' $CONFIG_FILE | cut -d'"' -f4)"
    else
        echo "❌ Конфиг не найден"
    fi
}

show_status() {
    check_status
    read -p "Нажмите Enter для продолжения..."
}

restart_shadowsocks() {
    echo "🔄 Перезапускаем Shadowsocks..."
    echo "═══════════════════════════════════════════"
    
    # Проверяем порт
    echo "🔍 Проверяем порт $PORT..."
    if sudo ss -tulpn | grep ":$PORT" > /dev/null; then
        echo "⚠️  Порт $PORT занят, освобождаем..."
        sudo fuser -k $PORT/tcp 2>/dev/null || true
        sudo fuser -k $PORT/udp 2>/dev/null || true
        sleep 2
    fi
    
    # Перезапускаем сервис
    sudo systemctl stop $SERVICE_NAME 2>/dev/null || true
    sleep 1
    sudo systemctl start $SERVICE_NAME
    sleep 2
    
    echo "✅ Перезапуск завершен"
    check_status
    read -p "Нажмите Enter для продолжения..."
}

stop_shadowsocks() {
    echo "🛑 Останавливаем Shadowsocks..."
    echo "═══════════════════════════════════════════"
    
    sudo systemctl stop $SERVICE_NAME
    echo "✅ Сервис остановлен"
    
    echo "🔒 Закрываем порт $PORT в фаерволе..."
    sudo iptables -D INPUT -p tcp --dport $PORT -j ACCEPT 2>/dev/null || true
    sudo iptables -D INPUT -p udp --dport $PORT -j ACCEPT 2>/dev/null || true
    sudo netfilter-persistent save > /dev/null 2>&1
    
    read -p "Нажмите Enter для продолжения..."
}

show_logs() {
    echo "📋 Логи Shadowsocks (последние 20 строк):"
    echo "═══════════════════════════════════════════"
    sudo journalctl -u $SERVICE_NAME --no-pager --lines=20
    echo "═══════════════════════════════════════════"
    echo ""
    echo "Для просмотра логов в реальном времени:"
    echo "  sudo journalctl -u $SERVICE_NAME -f"
    read -p "Нажмите Enter для продолжения..."
}

repair_shadowsocks() {
    echo "🔧 Исправление проблем с Shadowsocks..."
    echo "═══════════════════════════════════════════"
    
    echo "1. Останавливаем сервис..."
    sudo systemctl stop $SERVICE_NAME 2>/dev/null || true
    
    echo "2. Освобождаем порт $PORT..."
    sudo fuser -k $PORT/tcp 2>/dev/null || true
    sudo fuser -k $PORT/udp 2>/dev/null || true
    sleep 2
    
    echo "3. Проверяем конфигурацию..."
    if [ -f "$CONFIG_FILE" ]; then
        echo "✅ Конфиг существует"
    else
        echo "❌ Конфиг не найден, создаем..."
        install_shadowsocks
        return
    fi
    
    echo "4. Пересоздаем правила фаервола..."
    sudo iptables -D INPUT -p tcp --dport $PORT -j ACCEPT 2>/dev/null || true
    sudo iptables -D INPUT -p udp --dport $PORT -j ACCEPT 2>/dev/null || true
    sudo iptables -I INPUT -p tcp --dport $PORT -j ACCEPT
    sudo iptables -I INPUT -p udp --dport $PORT -j ACCEPT
    sudo netfilter-persistent save > /dev/null 2>&1
    
    echo "5. Запускаем сервис..."
    sudo systemctl daemon-reload
    sudo systemctl start $SERVICE_NAME
    sleep 2
    
    echo "✅ Исправление завершено"
    check_status
    read -p "Нажмите Enter для продолжения..."
}

show_info() {
    echo "📊 Информация о Shadowsocks:"
    echo "═══════════════════════════════════════════"
    echo "Сервис: $SERVICE_NAME"
    echo "Порт: $PORT"
    echo "Конфиг: $CONFIG_FILE"
    echo "Метод: aes-256-gcm"
    echo ""
    echo "IP адреса сервера:"
    hostname -I
    echo ""
    
    if [ -f "$CONFIG_FILE" ]; then
        echo "📄 Содержимое конфига:"
        echo "═══════════════════════════════════════════"
        sudo cat $CONFIG_FILE 2>/dev/null | python3 -m json.tool 2>/dev/null || sudo cat $CONFIG_FILE
    fi
    read -p "Нажмите Enter для продолжения..."
}

change_config() {
    echo "⚙️  Изменение конфигурации..."
    echo "═══════════════════════════════════════════"
    
    if [ ! -f "$CONFIG_FILE" ]; then
        echo "❌ Конфиг не найден. Сначала установите Shadowsocks."
        read -p "Нажмите Enter для продолжения..."
        return
    fi
    
    echo "Текущие настройки:"
    echo "1. Порт: $PORT"
    echo "2. Пароль: $PASSWORD"
    echo ""
    echo "Что хотите изменить?"
    echo "1. Изменить порт"
    echo "2. Изменить пароль"
    echo "3. Отмена"
    
    read -p "Выберите (1-3): " config_choice
    
    case $config_choice in
        1)
            read -p "Введите новый порт (текущий: $PORT): " new_port
            if [[ "$new_port" =~ ^[0-9]+$ ]] && [ "$new_port" -ge 1024 ] && [ "$new_port" -le 65535 ]; then
                echo "🔄 Изменяем порт с $PORT на $new_port..."
                
                # Останавливаем сервис
                sudo systemctl stop $SERVICE_NAME
                
                # Обновляем порт в конфиге
                sudo sed -i "s/\"server_port\": $PORT/\"server_port\": $new_port/" $CONFIG_FILE
                
                # Обновляем переменную
                PORT="$new_port"
                
                # Обновляем правила фаервола
                sudo iptables -D INPUT -p tcp --dport $PORT -j ACCEPT 2>/dev/null || true
                sudo iptables -D INPUT -p udp --dport $PORT -j ACCEPT 2>/dev/null || true
                sudo iptables -I INPUT -p tcp --dport $new_port -j ACCEPT
                sudo iptables -I INPUT -p udp --dport $new_port -j ACCEPT
                sudo netfilter-persistent save > /dev/null 2>&1
                
                # Запускаем сервис
                sudo systemctl start $SERVICE_NAME
                
                echo "✅ Порт изменен на $new_port"
            else
                echo "❌ Неверный порт. Используйте порт от 1024 до 65535."
            fi
            ;;
        2)
            read -p "Введите новый пароль: " new_password
            if [ -n "$new_password" ]; then
                echo "🔄 Изменяем пароль..."
                
                # Останавливаем сервис
                sudo systemctl stop $SERVICE_NAME
                
                # Обновляем пароль в конфиге
                sudo sed -i "s/\"password\": \"$PASSWORD\"/\"password\": \"$new_password\"/" $CONFIG_FILE
                
                # Обновляем переменную
                PASSWORD="$new_password"
                
                # Запускаем сервис
                sudo systemctl start $SERVICE_NAME
                
                echo "✅ Пароль изменен"
            else
                echo "❌ Пароль не может быть пустым."
            fi
            ;;
        3)
            echo "Отмена."
            ;;
        *)
            echo "❌ Неверный выбор."
            ;;
    esac
    
    sleep 2
    check_status
    read -p "Нажмите Enter для продолжения..."
}

# Главное меню
while true; do
    clear
    echo "╔══════════════════════════════════════════╗"
    echo "║       SHADOWSOCKS УПРАВЛЕНИЕ            ║"
    echo "╠══════════════════════════════════════════╣"
    echo "║  1. 🚀 Установить Shadowsocks           ║"
    echo "║  2. 📊 Проверить статус                 ║"
    echo "║  3. 🔄 Перезапустить                    ║"
    echo "║  4. 🛑 Остановить                       ║"
    echo "║  5. 📋 Показать логи                    ║"
    echo "║  6. 🔧 Исправить/Восстановить           ║"
    echo "║  7. ⚙️  Изменить конфигурацию           ║"
    echo "║  8. ℹ️  Информация о системе            ║"
    echo "║  9. ❌ Выход                            ║"
    echo "╚══════════════════════════════════════════╝"
    echo ""
    echo "📌 Текущие настройки:"
    echo "   Порт: $PORT | Пароль: $PASSWORD"
    echo ""
    
    read -p "Выберите действие (1-9): " choice
    
    case $choice in
        1)
            install_shadowsocks
            ;;
        2)
            show_status
            ;;
        3)
            restart_shadowsocks
            ;;
        4)
            stop_shadowsocks
            ;;
        5)
            show_logs
            ;;
        6)
            repair_shadowsocks
            ;;
        7)
            change_config
            ;;
        8)
            show_info
            ;;
        9)
            echo "👋 Выход..."
            exit 0
            ;;
        *)
            echo "❌ Неверный выбор. Попробуйте снова."
            sleep 2
            ;;
    esac
done

Теперь Хабаровск

  1. Запускаем Putty, вводим IP адрес сервера и жмем Open
  2. Вводим пароль
  3. Вводим команду: sudo nano 1.sh
  4. Копируем код ниже (сверни его под спойлер и помень мне место, а я сам вставлю код)
  5. Вставляем его в редактор nano (правая кнопка мыши или Shift+Insert)
  6. Нажимаем CTRL+O, Enter, CTRL+X для сохранения
  7. Вводим команду: chmod +x 1.sh
  8. Запускаем скрипт: sudo ./1.sh и следуем пунктам - ничего сложного

Скрипт для сервера в Хабаровске

#!/bin/bash
# glider-interactive.sh - Интерактивное управление glider

set -e

# Конфигурация
CONFIG_DIR="$HOME/glider"
PASSWORD="427566"
PORT=8388
TOKYO_SERVER_IP="45.77.23.2"
TOKYO_SERVER_PORT=8388

# Функции
install_glider() {
    echo "🔧 Устанавливаем зависимости..."
    sudo apt update && sudo apt install -y docker.io docker-compose iptables
    
    echo "📁 Создаем docker-compose.yml для glider..."
    mkdir -p "$CONFIG_DIR" && cd "$CONFIG_DIR"
    
    cat > docker-compose.yml <
      -verbose
      -listen ss://AEAD_AES_256_GCM:$PASSWORD@0.0.0.0:$PORT
      -forward ss://AEAD_AES_256_GCM:$PASSWORD@$TOKYO_SERVER_IP:$TOKYO_SERVER_PORT
EOF
    
    echo "🚀 Запускаем glider в Docker..."
    sudo docker-compose up -d
    
    echo "🔓 Открываем порты $PORT/tcp и $PORT/udp..."
    sudo iptables -I INPUT -p tcp --dport $PORT -j ACCEPT
    sudo iptables -I INPUT -p udp --dport $PORT -j ACCEPT
    
    echo "✅ Установка завершена."
    read -p "Нажмите Enter для продолжения..."
}

check_status() {
    if [ -f "$CONFIG_DIR/docker-compose.yml" ]; then
        cd "$CONFIG_DIR"
        echo "🔍 Проверяем состояние glider..."
        echo "═══════════════════════════════════════════"
        sudo docker-compose ps
        echo "═══════════════════════════════════════════"
        echo ""
        echo "📡 Проверяем порт $PORT:"
        sudo ss -tulpn | grep ":$PORT" || echo "⚠️  Порт не слушается"
    else
        echo "❌ Glider не установлен."
    fi
    read -p "Нажмите Enter для продолжения..."
}

restart_glider() {
    if [ -f "$CONFIG_DIR/docker-compose.yml" ]; then
        cd "$CONFIG_DIR"
        echo "🔄 Перезапускаем glider..."
        
        # Проверяем порт
        if sudo ss -tulpn | grep ":$PORT" > /dev/null; then
            echo "⚠️  Порт $PORT занят, освобождаем..."
            sudo fuser -k $PORT/tcp 2>/dev/null || true
            sudo fuser -k $PORT/udp 2>/dev/null || true
            sleep 2
        fi
        
        sudo docker-compose down
        sleep 2
        sudo docker-compose up -d
        sleep 3
        
        echo "✅ Glider перезапущен"
        sudo docker-compose ps
    else
        echo "❌ Glider не установлен."
    fi
    read -p "Нажмите Enter для продолжения..."
}

show_logs() {
    if [ -f "$CONFIG_DIR/docker-compose.yml" ]; then
        cd "$CONFIG_DIR"
        echo "📋 Логи glider (последние 20 строк):"
        echo "═══════════════════════════════════════════"
        sudo docker-compose logs --tail=20
        echo "═══════════════════════════════════════════"
        echo ""
        echo "Для просмотра логов в реальном времени:"
        echo "  sudo docker-compose logs -f"
    else
        echo "❌ Glider не установлен."
    fi
    read -p "Нажмите Enter для продолжения..."
}

stop_glider() {
    if [ -f "$CONFIG_DIR/docker-compose.yml" ]; then
        cd "$CONFIG_DIR"
        echo "🛑 Останавливаем glider..."
        sudo docker-compose down
        echo "✅ Glider остановлен"
    else
        echo "❌ Glider не установлен."
    fi
    read -p "Нажмите Enter для продолжения..."
}

repair_glider() {
    echo "🔧 Исправление проблем с glider..."
    
    # Останавливаем все контейнеры glider
    sudo docker ps -a | grep glider | awk '{print $1}' | xargs -r sudo docker rm -f 2>/dev/null
    
    # Освобождаем порт
    sudo fuser -k $PORT/tcp 2>/dev/null || true
    sudo fuser -k $PORT/udp 2>/dev/null || true
    
    # Пересоздаем конфиг
    if [ -f "$CONFIG_DIR/docker-compose.yml" ]; then
        cd "$CONFIG_DIR"
        sudo docker-compose up -d
        echo "✅ Glider восстановлен"
    else
        echo "❌ Файл конфигурации не найден. Запустите установку."
    fi
    read -p "Нажмите Enter для продолжения..."
}

show_info() {
    echo "📊 Информация о системе:"
    echo "═══════════════════════════════════════════"
    echo "IP адрес: $(hostname -I | awk '{print $1}')"
    echo "Порт: $PORT"
    echo "Директория конфига: $CONFIG_DIR"
    echo "Контейнер: glider_proxy"
    echo "═══════════════════════════════════════════"
    
    if [ -f "$CONFIG_DIR/docker-compose.yml" ]; then
        echo "📄 Содержимое docker-compose.yml:"
        echo "═══════════════════════════════════════════"
        cat "$CONFIG_DIR/docker-compose.yml"
    fi
    read -p "Нажмите Enter для продолжения..."
}

# Главное меню
while true; do
    clear
    echo "╔══════════════════════════════════════════╗"
    echo "║          GLIDER УПРАВЛЕНИЕ               ║"
    echo "╠══════════════════════════════════════════╣"
    echo "║  1. 🚀 Установить glider                 ║"
    echo "║  2. 📊 Проверить статус                  ║"
    echo "║  3. 🔄 Перезапустить                     ║"
    echo "║  4. 🛑 Остановить                        ║"
    echo "║  5. 📋 Показать логи                     ║"
    echo "║  6. 🔧 Исправить/Восстановить            ║"
    echo "║  7. ℹ️  Информация о системе             ║"
    echo "║  8. ❌ Выход                             ║"
    echo "╚══════════════════════════════════════════╝"
    echo ""
    
    read -p "Выберите действие (1-8): " choice
    
    case $choice in
        1)
            install_glider
            ;;
        2)
            check_status
            ;;
        3)
            restart_glider
            ;;
        4)
            stop_glider
            ;;
        5)
            show_logs
            ;;
        6)
            repair_glider
            ;;
        7)
            show_info
            ;;
        8)
            echo "👋 Выход..."
            exit 0
            ;;
        *)
            echo "❌ Неверный выбор. Попробуйте снова."
            sleep 2
            ;;
    esac
done

Готово, подключаемся и юзаем!

После настройки обоих серверов, настройте клиент на подключение через цепочку серверов для максимальной скорости.