Home » Перенаправление портов SSH: как настроить и использовать
Перенаправление портов SSH: как настроить и использовать

Перенаправление портов SSH: как настроить и использовать

В этой статье разберёмся, что такое перенаправление портов SSH (SSH port forwarding), зачем оно вообще нужно и как его быстро и без боли настроить. Если ты когда-нибудь сталкивался с задачей пробросить порт через туннель, обойти фаервол, подключиться к базе данных на удалённом сервере или просто хочешь сделать свою инфраструктуру чуть более гибкой и безопасной — добро пожаловать. Будет много практики, примеры из жизни, схемы, команды и даже немного магии. Всё, чтобы ты мог не только понять, но и сразу внедрить SSH port forwarding в свои проекты или на работе.

Как это работает? Простыми словами, но по-взрослому

SSH — это не только про безопасный доступ к серверу по консоли. Это ещё и про туннели, которые позволяют прокидывать трафик через защищённое соединение. Перенаправление портов (port forwarding) — это способ «протянуть» нужный тебе порт (или даже несколько) через SSH-сессию, чтобы получить доступ к сервисам, которые обычно недоступны извне. Например, к базе данных, веб-интерфейсу админки, внутреннему API или даже к рабочему столу через RDP.

Есть три основных типа SSH port forwarding:

  • Локальное перенаправление (Local Forwarding) — ты открываешь порт на своей машине, а трафик уходит через SSH на удалённый сервер и дальше к целевому сервису.
  • Удалённое перенаправление (Remote Forwarding) — наоборот: открываешь порт на удалённом сервере, а трафик уходит к тебе или куда скажешь.
  • Динамическое перенаправление (Dynamic Forwarding, SOCKS proxy) — превращаешь SSH в прокси-сервер (SOCKS5), и можешь гнать через него любой трафик, как через VPN.

Всё это работает благодаря тому, что SSH умеет не только шифровать трафик, но и «таскать» через себя любые данные, не только команды терминала.

Как быстро и просто всё настроить?

Давай сразу к делу. Вот базовые команды для каждого типа перенаправления. Все примеры — для Linux/macOS, но на Windows с PuTTY или MobaXterm всё аналогично (там просто кликаешь мышкой).

Локальное перенаправление (Local Forwarding)

Допустим, у тебя есть база данных PostgreSQL на сервере db.example.com, которая слушает только localhost:5432 (и снаружи не видна). Ты хочешь подключиться к ней со своего ноутбука.


ssh -L 15432:localhost:5432 [email protected]

Теперь на твоём ноуте порт 15432 будет прокинут через SSH на сервер, и там подключится к localhost:5432. В любой программе (например, pgAdmin) указываешь localhost:15432 — и ты в базе!

Удалённое перенаправление (Remote Forwarding)

Допустим, у тебя на локальной машине крутится веб-сервер на порту 8000, а ты хочешь, чтобы его увидели на сервере (например, для теста или демо).


ssh -R 18000:localhost:8000 [email protected]

Теперь на сервере remote-server.com порт 18000 будет прокинут к тебе на localhost:8000. Любой, кто на сервере откроет localhost:18000, попадёт на твой локальный веб-сервер.

Динамическое перенаправление (SOCKS proxy)

А вот если хочется, чтобы весь браузерный трафик (или любой другой) шёл через сервер (например, чтобы обойти блокировки или посмотреть, как сайт выглядит из другой страны):


ssh -D 1080 [email protected]

Теперь у тебя на локальной машине поднялся SOCKS5-прокси на порту 1080. В браузере прописываешь настройки прокси — и весь трафик идёт через сервер.

Примеры, схемы, практические советы

Давай разберём несколько реальных кейсов, где SSH port forwarding реально спасает.

Кейс Тип перенаправления Плюсы Минусы Рекомендации
Доступ к внутренней базе данных (MySQL, PostgreSQL) Локальное Безопасно, не надо открывать порт наружу, быстро Нужно держать SSH-сессию открытой Используй autossh для автоподключения
Демо локального сайта заказчику Удалённое Не надо деплоить, быстро показать результат Открываешь доступ наружу, если не ограничить bind Ограничивай bind на 127.0.0.1, используй пароль/ключи
Обход блокировок, тестирование гео-локации Динамическое (SOCKS) Весь трафик через сервер, гибко Не все приложения поддерживают SOCKS, возможны лаги Используй Proxifier или Privoxy для проксирования всего трафика
Доступ к внутреннему API между серверами Локальное/Удалённое Безопасно, не надо VPN, быстро Не масштабируется на много серверов Для сложных схем смотри в сторону WireGuard или OpenVPN

Положительные примеры

  • Разработчик подключается к staging-базе через SSH-туннель — база не светится наружу, безопасность +1.
  • Админ быстро показывает демо сайта заказчику, не выкладывая его в интернет — SSH-туннель рулит.
  • Тестировщик гоняет браузер через сервер в другой стране — смотрит, как сайт работает для зарубежных пользователей.

Отрицательные примеры

  • Открыли удалённый порт на 0.0.0.0 — теперь любой может подключиться к вашему локальному сервису. Не делай так!
  • Забыли закрыть туннель — кто-то случайно получил доступ к внутренней базе.
  • Использовали динамический прокси для всего трафика, а потом удивились, что половина приложений не работает — не все умеют в SOCKS.

Команды и утилиты для автоматизации

Вот набор must-have команд и тулзов для работы с SSH port forwarding:

  • ssh — стандартный клиент, всё умеет из коробки.
  • autossh — автоматически восстанавливает туннель, если соединение упало. Официальный сайт.
  • sshuttle — гибрид VPN и SSH-туннеля, прокидывает весь трафик через SSH. GitHub.
  • ProxyCommand и ProxyJump — для сложных схем с несколькими хопами (jump hosts).
  • ssh-config — файл ~/.ssh/config для хранения настроек туннелей и алиасов.

Примеры команд


# Локальное перенаправление
ssh -L 8888:localhost:80 [email protected]

# Удалённое перенаправление
ssh -R 9000:localhost:3000 [email protected]

# Динамическое перенаправление (SOCKS5)
ssh -D 1080 [email protected]

# Использование autossh для автоподнятия туннеля
autossh -M 20000 -L 15432:localhost:5432 [email protected]

# Пример записи в ~/.ssh/config
Host mydb
HostName db.example.com
User user
LocalForward 15432 localhost:5432

Похожие решения и сравнение

SSH port forwarding — это не единственный способ пробросить трафик. Вот краткое сравнение с другими популярными решениями:

Решение Безопасность Гибкость Сложность Когда использовать
SSH port forwarding Высокая Средняя Низкая Точка-в-точку, быстро, без VPN
VPN (WireGuard, OpenVPN) Высокая Высокая Средняя/Высокая Много серверов, постоянные соединения
ngrok, localtunnel Средняя Высокая Очень низкая Быстро показать демо, не для продакшена
SOCKS/HTTP proxy Средняя Средняя Средняя Обход блокировок, проксирование браузера

Интересные факты и нестандартные способы использования

  • Через SSH-туннель можно прокидывать не только TCP, но и X11 (графические приложения на удалённом сервере — привет, ssh -X).
  • Можно делать цепочки туннелей через несколько серверов (ProxyJump или ProxyCommand) — например, если у тебя есть только «бастион» (jump host).
  • Некоторые используют SSH-туннели для обхода корпоративных фаерволов (но не злоупотребляй — могут уволить).
  • SSH-туннель можно поднять в обратную сторону — например, если у тебя дома динамический IP, а надо подключиться извне (reverse tunnel).
  • Можно автоматизировать поднятие туннелей через systemd unit или cron — и они всегда будут работать после перезагрузки.

Новые возможности: автоматизация и скрипты

SSH port forwarding отлично ложится в автоматизацию. Например:

  • Скрипты для резервного копирования баз данных через туннель (без открытия портов наружу).
  • CI/CD пайплайны, которые деплоят на сервер через туннель (без VPN).
  • Мониторинг внутренних сервисов через туннель (Prometheus, Grafana, Zabbix).
  • Автоматическое поднятие туннелей через systemd или autossh — и не надо держать терминал открытым.

Пример systemd unit для автозапуска туннеля:


[Unit]
Description=SSH Tunnel for DB
After=network.target

[Service]
User=youruser
ExecStart=/usr/bin/autossh -M 20000 -N -L 15432:localhost:5432 [email protected]
Restart=always

[Install]
WantedBy=multi-user.target

Выводы и рекомендации

SSH port forwarding — это простой, мощный и безопасный инструмент для доступа к внутренним сервисам, обхода ограничений и автоматизации. Он отлично подходит для быстрого решения задач: подключиться к базе, показать демо, прокинуть API, обойти блокировки. Не требует отдельного VPN, легко автоматизируется, работает из коробки почти везде.

Рекомендации:

  • Используй локальное перенаправление для доступа к внутренним сервисам (базы, админки, API).
  • Удалённое — для публикации локальных сервисов наружу (демо, тесты).
  • Динамическое — для проксирования трафика (обход блокировок, тесты гео-локации).
  • Не забывай про безопасность: не открывай порты на 0.0.0.0 без необходимости, используй ключи, ограничивай доступ.
  • Для постоянных туннелей используй autossh или systemd.
  • Для сложных схем с множеством серверов — смотри в сторону VPN (WireGuard, OpenVPN).

Если тебе нужен VPS или выделенный сервер для экспериментов с SSH port forwarding — можешь заказать VPS или выделенный сервер прямо здесь на блоге.

SSH port forwarding — это тот самый швейцарский нож для админа и девопса. Освой его — и многие задачи станут проще, быстрее и безопаснее.


В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.

Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.

Leave a reply

Your email address will not be published. Required fields are marked