- PVSM.RU - https://www.pvsm.ru -
Иногда нужно получить надёжный 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 к : homeLaptop постоянно держит соединение к
Требование для подключения по SSH через
Арендованный или личный
с MacBook должен быть доступен порт 2222 на
с MacBook должен быть доступен порт 22 на
Схема получается кольцевая:
В файле /etc/ssh/sshd_config включаем нужные опции:
GatewayPorts clientspecified
AllowTcpForwarding yes
Перезапускаем sshd:
systemctl restart ssh
Открываем порт 2222 в файрволе (пример для ufw):
ufw allow 2222/tcp
ufw reload
Запустим Xray с socks inbound на 127.0.0.1:10808 (без авторизации, UDP отключен).
Для этого уже в настроенный Xray config.yaml, для настройки соединения с
{
"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": {...}
}
В /etc/ssh/sshd_config:
Port 2222
ListenAddress 0.0.0.0
Перезапускаем:
systemctl restart sshd
Открываем порт:
ufw allow 2222/tcp
apt update
apt install autossh netcat-openbsd
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 — просим
Создаём файл сервиса /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
Подключение осуществляется обычной командой:
ssh -p 2222 <HOME_USER>@<VPS_IP_ADDRESS>
Перед первым подключением необходимо настроить авторизацию по SSH-ключу :
Между homeLaptop и
Между homeLaptop и MacBook
Получаем шифрованный и автоматически восстанавливающийся доступ к домашнему серверу без белого IP и без сторонних облачных сервисов. Всё управление — через уже работающий Xray, дополнительная нагрузка минимальна. (Мой VPSик на 1Gb RAM + 1 Cpu)
Если у вас уже есть Xray/V2Ray для обхода блокировок — этот способ добавляет reverse-доступ практически бесплатно.
Автор: xcillx
Источник [2]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/vps/446674
Ссылки в тексте:
[1] VPS: https://www.reg.ru/?rlink=reflink-717
[2] Источник: https://habr.com/ru/articles/1010310/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1010310
Нажмите здесь для печати.