Обход блокировок через двойное проксирование и 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 вводит учетку, как на скриншоте
Продолжаем Тюнинг
Установка панели Blitz для конфигурирования Hysteria2
bash <(curl https://raw.githubusercontent.com/ReturnFI/Blitz/main/install.sh)
После установки можно запустить командой
hys2
