Skip to main content

Обход блокировок через двойное проксирование и SSH туннель

GitHub проект панели 3x-ui https://github.com/MHSanaei/3x-ui/wiki/Installation

Для установки в один клик 

bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh)

Далее, если панель не доступна по порту, который указывали в процессе установки, то нужно настроить управление с 127.0.0.1, как здесь https://wiki.rich650.ru/books/murzilka-po-serveru/page/kak-podkliucitsia-k-3x-ui-paneli-cerez-ssh-tunnel

Все манипуляции проводились на Ubuntu Server 24.04.

Для сервера посредника создаем новый loopback адрес 127.0.0.100 для этого редактируем файл NetPlan

nano /etc/netplan/50-cloud-init.yaml

Добавляем

    lo:
      addresses:
        - 127.0.0.1/8
        - 127.0.0.100/8

Применяем политику NetPlan

sudo netplan apply

Проверяем интерфейс

ip addr show lo
ping -c 2 127.0.0.100

На локальном сервере создаем Unit Systemd

Создаем файл юнита и открываем его

sudo touch /etc/systemd/system/ssh-tunnel-proxy.service
sudo nano /etc/systemd/system/ssh-tunnel-proxy.service

Добавляем

[Unit]
Description=SSH Tunnel to Proxy Server 38.244.208.237
After=network.target

[Service]
User=root
ExecStart=/usr/bin/ssh -o ServerAliveInterval=30 -o ExitOnForwardFailure=yes -N -L 127.0.0.100:65086:127.0.0.1:65086 root@38.244.208.237 -i /root/.ssh/id_rsa
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

Генерируем ключи для авторизации SSH

Создаем папку .ssh если её нет

mkdir -p /root/.ssh

Назначаем права RW только для владельца

chmod 700 /root/.ssh

 Генерируем ключевую пару RSA (рекомендуется в 2024-2025), где

# Расшифровка параметров:
# -t rsa      - тип ключа RSA
# -b 4096     - длина 4096 бит (безопасно)
# -f          - путь к файлу ключа
# -N ""       - без парольной фразы (для автоматизации)
# -C "comment"- комментарий для идентификации

ssh-keygen -t rsa -b 4096 -f /root/.ssh/id_rsa -N "" -C "HomeServer2"

Копируем публичный ключ на Удаленный сервер

ssh-copy-id -i /root/.ssh/id_rsa.pub root@38.244.208.237

Вводим пароль от SSH удаленного сервера

Важно! Проверьте настройки SSH сервера:

На удаленном сервере отредактируем конфиг

sudo nano /etc/ssh/sshd_config

Убедитесь, что есть следующие настройки

PubkeyAuthentication yes          # Разрешить аутентификацию по ключам
AuthorizedKeysFile .ssh/authorized_keys  # Путь к файлу с ключами
PasswordAuthentication no         # Отключить пароль (после теста!)(НЕ СТАЛ ОТКЛЮЧАТЬ)
PermitRootLogin no               # Запретить root вход (рекомендуется)(НЕ СТАЛ ОТКЛЮЧАТЬ)

Перезапустите SSH сервер:

sudo systemctl restart ssh

Запускаем и добавляем в автозагрузку

sudo systemctl enable --now ssh-tunnel-proxy

Устанавливаем на локальном сервере прокси

sudo apt install tinyproxy

Открываем файл конфигурации

sudo nano /etc/tinyproxy/tinyproxy.conf

Добавляем 

Port 65080
Bind 0.0.0.0
Upstream http 127.0.0.100:65086
Allow 192.168.1.0/24

расшифровка того, что добавили

# Порт, который будет слушать tinyproxy на Сервере 192.168.1.200
Port 65080

# С какого адреса принимать подключения (0.0.0.0 = со всех, 127.0.0.1 = только локально)
Bind 0.0.0.0

# Кому разрешено подключаться. Настройте под свою сеть!
Allow 192.168.1.0/24 # Пример: вся локальная сеть
# Allow 127.0.0.1

# ОЧЕНЬ ВАЖНО: Указываем upstream-прокси.
# Весь трафик tinyproxy будет отправлен в наш SSH-туннель.
Upstream http 127.0.0.100:65086
# Если прокси на Сервере 1 - SOCKS5, строка будет:
# Upstream socks5 127.0.0.1:8888

Перезапускаем прокси

sudo systemctl restart tinyproxy

Теперь для локальных ресурсов достаточно ввести HTTP прокси сервер 192.168.1.200 с портом 65080 и все - без логина и пароля!!!

Теперь тюним схему. Уходим от Tinyproxy, для этого при создании SSH туннеля сразу поднимаем SOCKS5 прокси на Локальном сервере.

Создаем новый UNit

sudo touch /etc/systemd/system/ssh-tunnel-proxy-socks.service
sudo nano /etc/systemd/system/ssh-tunnel-proxy-socks.service

Добавляем

[Unit]
Description=SSH Tunnel with SOCKS to Proxy Server 38.244.208.237
After=network.target

[Service]
User=root
ExecStart=/usr/bin/ssh -N -D 0.0.0.0:65081 -c chacha20-poly1305@openssh.com -o Compression=no -o TCPKeepAlive=yes -o ServerAliveInterval=15 -o ExitOnForwardFailure=yes -i /root/.ssh/id_rsa root@38.244.208.237
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

Перезапустите SSH сервер:

sudo systemctl restart ssh

Запускаем и добавляем в автозагрузку

sudo systemctl enable --now ssh-tunnel-proxy-socks

Останавливаем и отключаем автозагрузку  локального форвардинга через SSH

sudo systemctl disable --now ssh-tunnel-proxy
sudo systemctl stop --now ssh-tunnel-proxy

Перезапускаем SSH 

sudo systemctl restart ssh

Теперь в NekoRay создаем подключение с протоколом SOCKS5 и вводим адрес сервера 192.168.1.200 порт 65081. Должно быть уже значительно быстрее.

Включаем BBR на обоих серверах.

Проверяем состояние BBR

sysctl net.ipv4.tcp_congestion_control

Если в конце не bbr, то включаем либо через скрипт 3x-ui панели, запустив 

x-ui

Далее Enable BBR (выбираем цифру) и т.д.

Или ручками

echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
sysctl -p

Проверяем состояние BBR

sysctl net.ipv4.tcp_congestion_control

Должно отображаться bbr

Увеличиваем TCP буферы на обоих серверах
sysctl -w net.core.rmem_max=16777216
sysctl -w net.core.wmem_max=16777216
sysctl -w net.ipv4.tcp_rmem="4096 87380 16777216"
sysctl -w net.ipv4.tcp_wmem="4096 65536 16777216"

Отключаем не нужный больше TinyProxy

systemctl stop tinyproxy.service
systemctl disable tinyproxy.service
Продолжаем Тюнить схему.

Пробуем использовать Hysteria2 для прямого доступа

Для этого на обоих сторонах ставим iperf , что бы протестировать открытость UDP портов

apt install -y iperf3

На удаленном сервере запускаем режим прослушивания (если конкретный порт то -p 443 )

iperf3 -s

А на клиенте (если конкретный порт то -p 443 -u(UDP))

iperf3 -c 38.244.208.237 -u -b 50M

Если передача успешная, то продолжаем

Устанавливаем на удаленном сервере Hysteria2

curl -fsSL https://get.hy2.sh | bash

Проверяем 

hysteria version

Бэкапим конфиг

cp /etc/hysteria/config.yaml /etc/hysteria/config_back.yaml

Редактируем конфиг

nano /etc/hysteria/config.yaml

Приводим к виду 

listen: :443

tls:
  cert: /etc/hysteria/server.crt
  key: /etc/hysteria/server.key

auth:
  type: password
  password: "MhFedTZX11kxtt"

bandwidth:
  up: 500 mbps
  down: 500 mbps

masquerade:
  type: proxy
  proxy:
    url: https://www.pinterest.com
    rewriteHost: true

udp:
  enable: true



Здесь

 MhFedTZX11kxtt

ЭТО ПАРОЛЬ К УЧЕТКЕ!!

Создаем SSl сертификаты на 10 лет, здесь очень важно указать правильное Common Name (CN) (либо IP адрес удаленного сервера, либо Доменное имя)

openssl req -x509 -newkey rsa:2048 -nodes -keyout /etc/hysteria/server.key -out /etc/hysteria/server.crt -days 3650

Устанавливаем правильные права 

sudo chown hysteria:hysteria /etc/hysteria/server.key /etc/hysteria/server.crt
sudo chmod 600 /etc/hysteria/server.key
sudo chmod 644 /etc/hysteria/server.crt

Далее редактируем файл юнита systemd

nano /etc/systemd/system/hysteria-server.service

Добавляем

Restart=always
LimitNOFILE=1048576

Должно получиться так


[Unit]
Description=Hysteria Server Service (config.yaml)
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/hysteria server --config /etc/hysteria/config.yaml
WorkingDirectory=~
User=hysteria
Group=hysteria
Environment=HYSTERIA_LOG_LEVEL=info
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW
NoNewPrivileges=true
Restart=always
LimitNOFILE=1048576

[Install]
WantedBy=multi-user.target

Запускаем и добавляем в автозагрузку

systemctl daemon-reload
systemctl enable hysteria-server
systemctl start hysteria-server

Если были ошибки, то после устранения перезапускаем (reset-failed уберет все ошибки)

sudo systemctl daemon-reload
sudo systemctl reset-failed
sudo systemctl start hysteria-server
sudo systemctl status hysteria-server

Проверяем

ss -lunp | grep 443

Далее в NekoRay вводит учетку, как на скриншоте

vpn.png

Продолжаем Тюнинг

Установка панели Blitz для конфигурирования Hysteria2

bash <(curl https://raw.githubusercontent.com/ReturnFI/Blitz/main/install.sh)

После установки можно запустить командой

hys2