SSH Port forwarding
Особенности
Типичным сценарием использования SSH Port forwarding является доступ к внутренним ресурсам компании, которые находятся за NAT, без использования проброса портов на шлюзе и без использования VPN. Например:
- доступ к серверу удалённых рабочих столов (RDP);
- подключение к удалённым базам данным (Redis, PostgreSQL), или серверам (Proxmox VE);
SSH Port forwarding также можно использовать как резервный канал связи при падении VPN.
Поскольку SSH шифрует весь трафик, его можно безопасно использовать даже в публичных точках доступа (кафе, аэропорты, отели). Для авторизации предпочтительнее использовать SSH-Ключи, а не пароли: это надёжнее и удобнее. Подробнее: Используем ssh ключи на Linux.
SSH Port Forwarding работает только в одном направлении. То есть используя ваше подключение к удалённому серверу, к вам подключиться не получится. Для решения этой проблемы можно настроить обратный ssh туннель.
Ещё одной особенностью является то что он работает только с TCP-пакетами. Что не работает?
- UDP (DNS, VoIP);
- ICMP (ping).
Поднятие socs5
Вы можете подготовить ssh-proxy сервер на Linux. Пробросить только 1 порт из интернета на его ssh. В дальнейшем, через этот сервер будет возможно подключаться к другим серверам из интернета. Главное чтобы в локальной сети ssh-proxy имел доступ к этим серверам.

Для подключения к ssh-proxy с поднятием прокси выполним такую команду:
$ ssh -D 8080 <user>@<ip_ssh_proxy> -p <port_ssh_proxy>
Посмотрим что у нас получилось:
$ netstat -pan | grep 8080
tcp 0 0 127.0.0.1:8080 0.0.0.0:* LISTEN 8354/ssh
- Служба слушает localhost:8080.
Теперь вы можете настроить socs5 proxy для вашего браузера используя 127.0.0.1:8080. И удалённые ресурсы (например, web-админки расположенные в офисе) начнут открываться.
Чтобы служба вместо localhost слушала и другие интерфейсы можно воспользоваться такой командой:
$ ssh -D 0.0.0.0:8080 <user>@<ip_ssh_proxy> -p <port_ssh_proxy>
$ netstat -pan | grep 8080
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 10099/ssh
Проброс локального порта

Чтобы не настраивать socs5 proxy в браузере, можно осуществить проброс локального порта на удалённый сервер следующей командой:
$ ssh -L <local_port>:<remote_ip>:<remote_port> <user>@<ip_ssh_proxy> -p <port_ssh_proxy>
После чего сможете подключиться к удалённому серверу используя ip-адрес 127.0.0.1 и локальный порт. Подключиться вы сможете не только по http/https, но и например по rdp и другим протоколам работающим поверх TCP.
Обратный SSH туннель
Предполагается что к удаленному компьютеру нельзя подключиться по ssh через интернет. А к локальному удалённый компьютер подключиться может.

Вы просите, чтобы с удалённой стороны подключились к вам, используя следующую команду:
$ ssh -R 9999:127.0.0.1:22 <user>@<host> -p <port>
После этого на вашем компьютере запустится процесс, который будет слушать порт 9999 на localhost. И вы сможете подключиться к удалённому серверу используя команду:
$ ssh <user>@localhost -p 9999
Итог
Повторим используемые опции:
ssh -D— открывает локальный порт и выдает себя за прокси-сервер SOCKS5.ssh -L— открывает локальный порт. Все, что вы отправляете на этот порт, проходит через ssh-соединение и уходит на сервер.ssh -R— на удалённом сервере запускает обратный туннель, чтобы от туда стало возможно подключаться к локальному серверу.
Если понравилась статья, подпишись на мой канал в VK или Telegram.