infra/@proxy.service/src/SSH_TUNNEL_PROJECT.md

YouTube через SSH туннели (умный proxy)

Версия: 2.0
Дата: 2026-02-11
Статус: Working


Что это

Утилита для обхода блокировок через SSH SOCKS5 туннели с умной маршрутизацией.

Принцип: Разные сайты идут через разные серверы в зависимости от геолокации.


Архитектура

┌─────────────────────────────────────────────────────────────┐
│  Компьютер пользователя (Россия)                           │
│  Chrome + PAC файл                                          │
└─────────────────────────────────────────────────────────────┘
         │
         ├─→ Русские сайты (.ru, vk.com) → DIRECT (напрямую)
         │
         ├─→ YouTube → SSH туннель → 155.212.223.80 (🇷🇺 Россия)
         │                           │
         │                           └─→ Beget LLC, Санкт-Петербург
         │                               YouTube работает!
         │
         └─→ Остальные (claude.com) → SSH туннель → 91.218.142.168 (🇱🇻 Латвия)
                                                    │
                                                    └─→ RETN Limited, Рига
                                                        Нет блокировок

Серверы

155.212.223.80 (Россия)

91.218.142.168 (Латвия)


Маршрутизация (PAC файл)

Правила

Домен Маршрут Причина
.ru, .рф, .su, .moscow, .москва DIRECT Русские домены - быстро напрямую
vk.com, yandex.*, habr.com, dzen.com DIRECT Русские сервисы на .com
youtube.com, googlevideo.com, ytimg.com SOCKS5 127.0.0.1:8080 Через Россию (Beget)
claude.com, google.com, остальные SOCKS5 127.0.0.1:8081 Через Латвию
localhost, 192.168., 10. DIRECT Локальные сети

Логика PAC

function FindProxyForURL(url, host) {
    // 1. Российские домены → DIRECT
    if (host.endsWith('.ru') || host.endsWith('.рф')) return "DIRECT";

    // 2. Российские сервисы → DIRECT
    if (host === 'vk.com' || host.includes('yandex')) return "DIRECT";

    // 3. YouTube → через Россию (порт 8080)
    if (host.includes('youtube.com')) return "SOCKS5 127.0.0.1:8080";

    // 4. Остальные → через Латвию (порт 8081)
    return "SOCKS5 127.0.0.1:8081; DIRECT";
}

Файлы проекта

На сервере 91.218.142.168

Файл Путь Назначение
Launcher /var/www/html/files/youtube-via-ssh.sh Основной скрипт запуска
PAC файл /var/www/html/files/youtube-proxy.pac Правила маршрутизации
Installer /var/www/html/files/install-youtube-button.sh Установка кнопки на рабочий стол
Диагностика /var/www/html/files/test-tunnels.sh Проверка туннелей

На компьютере пользователя (после установки)

Файл Путь Назначение
Launcher ~/.local/bin/youtube-launcher Локальный запускатель
Desktop ~/.local/share/applications/youtube.desktop Кнопка на рабочем столе
PAC (кеш) /tmp/youtube-proxy.pac Скачанный PAC файл

Как работает

Шаг 1: Запуск скрипта

Пользователь запускает:

bash <(curl -s http://91.218.142.168/files/youtube-via-ssh.sh)

Шаг 2: Создание туннелей

Скрипт создаёт два SSH SOCKS5 туннеля:

# Туннель #1: YouTube → Россия
ssh -D 8080 -N -f root@155.212.223.80

# Туннель #2: Остальные → Латвия
ssh -D 8081 -N -f root@91.218.142.168

Шаг 3: Скачивание PAC файла

curl http://91.218.142.168/files/youtube-proxy.pac -o /tmp/youtube-proxy.pac

Шаг 4: Запуск Chrome с PAC

google-chrome --proxy-pac-url="file:///tmp/youtube-proxy.pac" https://www.youtube.com

Шаг 5: Маршрутизация

Chrome читает PAC файл и для каждого запроса:
- Проверяет домен по правилам
- Направляет через нужный туннель или напрямую


Установка на компьютер пользователя

Быстрый запуск (разовый)

bash <(curl -s http://91.218.142.168/files/youtube-via-ssh.sh)

Установка кнопки на рабочий стол

bash <(curl -s http://91.218.142.168/files/install-youtube-button.sh)

После установки появится кнопка "YouTube" в меню приложений.


Диагностика

Проверка туннелей

# На компьютере пользователя
bash <(curl -s http://91.218.142.168/files/test-tunnels.sh)

Ручная проверка

# Проверить запущены ли туннели
ps aux | grep ssh | grep -E "8080|8081"

# Проверить порты
netstat -tln | grep -E "8080|8081"

# Проверить IP через каждый туннель
curl --socks5 127.0.0.1:8080 ifconfig.me  # → 155.212.223.80
curl --socks5 127.0.0.1:8081 ifconfig.me  # → 91.218.142.168

# Проверить маршрутизацию в Chrome
# Открыть: chrome://net-internals/#proxy

Проблемы и решения

YouTube не работает

Причина: Туннель 8080 не создался

Решение:

# Убить старые туннели
pkill -f "ssh.*8080"

# Создать заново
sshpass -p 'q&R4X3Mjf8Nc' ssh -D 8080 -N -f root@155.212.223.80

# Проверить
curl --socks5 127.0.0.1:8080 ifconfig.me

Claude.com показывает русский IP

Причина: Туннель 8081 не работает

Проверка:

curl --socks5 127.0.0.1:8081 ifconfig.me
# Должно быть: 91.218.142.168

Решение:

# Убедиться что на 91.218.142.168 включен парольный вход
ssh root@91.218.142.168 "grep PasswordAuthentication /etc/ssh/sshd_config"
# Должно быть: PasswordAuthentication yes

Permission denied для 91.218.142.168

Причина: Отключена парольная аутентификация

Решение (на сервере 91.218.142.168):

# Включить парольный вход
sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config

# Установить пароль
echo "root:q&R4X3Mjf8Nc" | chpasswd

# Перезапустить SSH
systemctl restart sshd

PAC файл не применяется

Причина: Chrome кеширует настройки

Решение:

# Перезапустить Chrome
killall chrome
google-chrome --proxy-pac-url="file:///tmp/youtube-proxy.pac" https://www.youtube.com

Безопасность

Пароли

SSH конфигурация

# На 91.218.142.168 включен парольный вход для туннелей
PasswordAuthentication yes
PermitRootLogin yes

# Рекомендация: ограничить доступ по IP
AllowUsers root@<IP_пользователя>

Обслуживание

Обновление скрипта

# На сервере 91.218.142.168
vim /var/www/html/files/youtube-via-ssh.sh
chmod +x /var/www/html/files/youtube-via-ssh.sh

Обновление PAC файла

# На сервере 91.218.142.168
vim /var/www/html/files/youtube-proxy.pac

# Пользователь получит обновление при следующем запуске

Добавление новых доменов в "русские"

Редактировать /var/www/html/files/youtube-proxy.pac:

// Добавить в блок российских сервисов
if (dnsDomainIs(host, "новый-сайт.com") ||
    dnsDomainIs(host, ".новый-сайт.com")) {
    return "DIRECT";
}

Альтернативные схемы

Вариант 1: Всё через Россию

Простая схема - один туннель для всех заблокированных сайтов:

# Только YouTube и заблокированные → через Россию
# Остальные → напрямую

ssh -D 8080 -N -f root@155.212.223.80
google-chrome --proxy-server="socks5://127.0.0.1:8080"

Минус: Claude.com будет видеть русский IP

Вариант 2: Всё через Латвию

# Всё иностранное → через Латвию
# Русские сайты → напрямую

ssh -D 8080 -N -f root@91.218.142.168
# PAC: русские → DIRECT, остальные → 8080

Минус: YouTube может работать медленнее

Вариант 3: Текущая (оптимальная)


Мониторинг

Логи SSH туннелей

# На компьютере пользователя
journalctl -f | grep ssh

Проверка доступности серверов

# Проверить доступность
ping -c 3 155.212.223.80
ping -c 3 91.218.142.168

# Проверить SSH
ssh -o ConnectTimeout=5 root@155.212.223.80 "echo OK"
ssh -o ConnectTimeout=5 root@91.218.142.168 "echo OK"

Ссылки


История версий

v2.0 (2026-02-11)

v1.0 (2026-02-10)


Версия документа: 1.0
Обновлено: 2026-02-11 23:15