Иногда нужно получить надёжный SSH-доступ к домашнему серверу (ноутбуку или мини-серверу на Ubuntu), который находится за NAT/CGNAT провайдера. Публичный IPv4 отсутствует, а использовать полноценный VPN или облачные туннели (ngrok, Cloudflare Tunnel и т.п.) не хочется. (Раньше пользовался Cloudflare Tunnel, но в последнее время с ним часто случались проблемы)
Способ reverse SSH tunnel с использованием autossh для поддержания постоянного соединения + ProxyCommand через существующий SOCKS-прокси: Xray socks inbound.
Сделаем reverse SSH tunnel через autossh с проксированием через Xray (VLESS + Reality) и пробросом нестандартного порта (2222)
Основная цель: Получить SSH-доступ с любого устройства (в данном случае с MacBook) к домашнему серверу на Ubuntu 22.04 (далее как homeLaptop)
Выбранный подход: Будем использовать односторонний reverse tunnel от homeLaptop к VPS: homeLaptop постоянно держит соединение к VPS и просит VPS слушать на порту 2222 и пересылать все подключения к этому порту на локальный порт homeLaptop (в моем случае sshd работает на 2222).
Требование для подключения по SSH через VPS:
Арендованный или личный VPS с белым IP
с MacBook должен быть доступен порт 2222 на VPS
с MacBook должен быть доступен порт 22 на VPS (чтобы autossh с homeLaptop мог установить reverse-туннель)
Схема получается кольцевая:

Настройка VPS
В файле /etc/ssh/sshd_config включаем нужные опции:
GatewayPorts clientspecified AllowTcpForwarding yes
Перезапускаем sshd:
systemctl restart ssh
Открываем порт 2222 в файрволе (пример для ufw):
ufw allow 2222/tcp ufw reload
Настройка homeLaptop (Ubuntu 22.04)
1. SOCKS5 inbound в Xray
Запустим Xray с socks inbound на 127.0.0.1:10808 (без авторизации, UDP отключен).
Для этого уже в настроенный Xray config.yaml, для настройки соединения с VPS, в массив inbounds добавляем следующий блок:
{ "listen": "127.0.0.1", "port": 10808, "protocol": "socks", "settings": { "auth": "noauth", "udp": false }, "tag": "socks-local-for-ssh" }
Выглядит так:
{ "dns": {...}, "fakedns": [...], "inbounds": [ { "listen": "127.0.0.1", "port": 10808, "protocol": "socks", "settings": { "auth": "noauth", "udp": false }, "tag": "socks-local-for-ssh" }, {...} ], "outbounds": [...], "routing": {...} }
2. Настраиваем sshd на нестандартный порт
В /etc/ssh/sshd_config:
Port 2222 ListenAddress 0.0.0.0
Перезапускаем:
systemctl restart sshd
Открываем порт:
ufw allow 2222/tcp
3. Установим autossh + netcat-openbsd
apt update apt install autossh netcat-openbsd
4. Запуск autossh (рабочая команда)
autossh -M 0 -f \ -o "ServerAliveInterval 30" \ -o "ServerAliveCountMax 3" \ -o "ProxyCommand=nc -x 127.0.0.1:10808 %h %p" \ -N -R *:2222:localhost:2222 \ <VPS_HOSTNAME>@<VPS_IP_ADDRESS> -p 22
Объяснение ключевых флагов:
-M 0— отключаем старый мониторинг портов, полагаемся на SSH keepalive-f— в фонеServerAliveInterval/ServerAliveCountMax— автоматический перезапуск при обрывеProxyCommand=nc -x …— весь SSH-трафик идёт через локальный socks5 от Xray-R *:2222:localhost:2222— просим VPS слушать 2222 на всех интерфейсах
Автозапуск через systemd
Создаём файл сервиса /etc/systemd/system/autossh-reverse.service:
[Unit] Description=AutoSSH reverse tunnel to VPS After=network-online.target xray.service Wants=network-online.target xray.service [Service] User=<HOME_USER> Environment="HOME=/home/<HOME_USER>" ExecStart=/usr/bin/autossh -M 0 \ -o "ServerAliveInterval 30" \ -o "ServerAliveCountMax 3" \ -o "ProxyCommand=nc -x 127.0.0.1:10808 %%h %%p" \ -N -R *:2222:localhost:2222 \ <VPS_USER>@<VPS_IP_ADDRESS> -p 22 Restart=always RestartSec=10 KillMode=process [Install] WantedBy=multi-user.target
Активируем:
systemctl daemon-reload systemctl enable autossh-reverse.service systemctl start autossh-reverse.service
Подключение с MacBook (или любого другого устройства)
Подключение осуществляется обычной командой:
ssh -p 2222 <HOME_USER>@<VPS_IP_ADDRESS>
Перед первым подключением необходимо настроить авторизацию по SSH-ключу :
Между homeLaptop и VPS
Между homeLaptop и MacBook
Итог
Получаем шифрованный и автоматически восстанавливающийся доступ к домашнему серверу без белого IP и без сторонних облачных сервисов. Всё управление — через уже работающий Xray, дополнительная нагрузка минимальна. (Мой VPSик на 1Gb RAM + 1 Cpu)
Если у вас уже есть Xray/V2Ray для обхода блокировок — этот способ добавляет reverse-доступ практически бесплатно.
Комментарии (16)

Mephistofx
15.03.2026 02:20Зачем так усложнять? Можно же сервисы проброса использовать, тот же fxtun.ru - fxtun tcp 2222 даёт fxtun.ru:port запустить можно в фоне или как демон

leshakk
15.03.2026 02:20Слишком всё переусложнено.
Для реверсного ssh-туннеля Xray не нужен, ssh это умеет из коробки:ssh -R [remote-port]:[local-host]:[local-port] [user]@[remote-server-ip]
-R: Specifies remote port forwarding.
[remote-port]: The port on the public [remote-server-ip] that you will connect to later.
[local-host]:[local-port]: The destination within the local network (e.g., localhost:22 to access the local machine's SSH server).
[user]@[remote-server-ip]: remote serverСвязки ssh + autossh вполне достаточно.
Вот мой stunnel@.service:Скрытый текст
[Unit] Description=Setup a secure tunnel to %I After=network.target [Service] Environment="LOCAL_ADDR=localhost" #Environment="REMOTE_ADDR=0.0.0.0" Environment="SSH_TARGET_PORT=22" EnvironmentFile=/etc/ssh/stunnel/%i Environment="AUTOSSH_GATETIME=0" ExecStart=/usr/bin/autossh -M 0 -o "ExitOnForwardFailure=yes" -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" \ -NR ${REMOTE_ADDR}:${REMOTE_PORT}:${LOCAL_ADDR}:${LOCAL_PORT} -p ${SSH_TARGET_PORT} ${USERNAME}@${TARGET} RestartSec=5 Restart=always [Install] WantedBy=multi-user.targetНе забудьте только на сервере в конфиге sshd прописать:
GatewayPorts clientspecified
Кстати, ssh из коробки умеет и в SOCS-proxy:
ssh -D 8080 -C -N user@remote_server_ip

digrobot
15.03.2026 02:20Проще поднять виртуальную частную сеть (которые для этого и были придуманы, а не для обхода блокировок), и будет полноценный доступ для любого траффика, а не только ssh.

kujoro
15.03.2026 02:20>как подключиться по ssh без белого айпи
>для этого нам потребуется белый айпи
я то думал будет какой нибудь р2р или на худой конец ygg

jidckii
15.03.2026 02:20Для чего тут Xray ваще не понятно..
Ну и конечно же есть https://tuna.am , с sshd туннелями.

newt76
15.03.2026 02:20Что-то никто в комментах не понимает кажется для чего xray. Сам раньше просто прокидывал порты по ssh. Последнее время такой способ был не стабильный. Было ощущение что ssh разрывает провайдер. Тоже думал через xray гонять, но показалось слишком грамоздко. В итоге сдался и купил белый айпи за 100 рублей.

leshakk
15.03.2026 02:20Возможно потому, что автор даже не попытался объяснить, зачем в классической схеме с пробросом туннеля по ssh нужен X-ray. И судя по отсутствию его комментариев, возможно он сам это не понимает.

Frew
15.03.2026 02:20Если через Xray, то нужно добавить на сервер конфиг sshd, чтобы не было дисконнектов
ClientAliveInterval 60 ClientAliveCountMax 3

xam2002
15.03.2026 02:20Уже несколько лет использую zerotier, собрал все свои сервера в сеть. Шифрование конечно не такое сильное, но скорость одна из самых высоких.
Bankir_ka
По заголовку думал что-то новое увижу, а тут классическая схема с VPN на VPS с белым ipv4.