(продолжение предыдущего поста)
SSH Remote Port Forwarding («удалённое перенаправление портов») позволяет открыть порт на удалённом SSH-сервере, а трафик с этого порта перенаправить на локальный компьютер (или другую указанную цель). Это создаёт защищённый SSH-туннель между клиентом и сервером.
SSH Remote Port Forwarding позволяет безопасно «опубликовать» локальные сервисы в интернете через защищённый туннель, управляя трафиком между клиентом, сервером и внешними пользователями.
2. Основные компоненты на схеме
- SSH Client (клиент SSH) — локальная машина (например, компьютер Джеймса), где запущен сервис (веб-сервер на
localhost:80).- Public SSH Server (публичный SSH-сервер) — сервер, к которому подключается клиент для создания туннеля. Служит «мостом» между клиентом и внешним миром.
- Remote Side Private Network (удалённая приватная сеть) — сторона, откуда идёт запрос к публичному SSH-серверу (например, пользователь Кей).
- SSH Tunnel (SSH-туннель) — зашифрованный канал передачи данных между клиентом и сервером.
3. Процесс работы
Шаг 1. Установка SSH-соединения с параметром `-R`
Клиент (Джеймс) инициирует SSH-сессию с публичным сервером, используя команду:
ssh -R 0.0.0.0:8080:localhost:80 user@pub-ssh-server
Где:
-
-R — флаг для удалённого перенаправления портов;-
0.0.0.0:8080 — адрес и порт на SSH-сервере, которые будут слушать трафик (0.0.0.0 означает «все интерфейсы»);-
localhost:80 — локальный адрес и порт, куда перенаправляется трафик (веб-сервер Джеймса);-
user@pub-ssh-server — учётная запись и адрес SSH-сервера.Шаг 2. Настройка GatewayPorts
По умолчанию SSH слушает только интерфейс
127.0.0.1 (loopback). Чтобы сервер принимал соединения со всех интерфейсов (0.0.0.0), нужно в файле sshd_config на SSH-сервере установить:GatewayPorts yes
Альтернативно можно использовать
GatewayPorts clientspecified, чтобы сервер использовал адрес из команды -R.Шаг 3. Перенаправление трафика
1. Пользователь (Кей) на удалённой стороне отправляет запрос на публичный SSH-сервер (
curl public-ssh-server:8080).2. SSH-сервер получает запрос на порт 8080 и перенаправляет его через туннель на локальный компьютер Джеймса (
localhost:80).3. Веб-сервер Джеймса обрабатывает запрос и возвращает ответ через тот же туннель.
4. Публичный SSH-сервер передаёт ответ пользователю (Кей).
4. Ключевые особенности
- Безопасность: весь трафик зашифрован благодаря SSH-туннелю.
- Доступность локальных сервисов: сервисы, доступные только локально (например, веб-сервер на
localhost:80), становятся доступны извне через публичный SSH-сервер.- Гибкость: можно пробрасывать любые порты (базы данных, API, RDP и т. д.).
- Контроль доступа: доступ к перенаправленным портам можно ограничить настройками SSH-сервера.
5. Пример из схемы
- Джеймс запускает веб-сервер на
localhost:80.- Создаёт SSH-туннель с публичным сервером, пробрасывая порт 8080 на свой веб-сервер.
- Кей может открыть
public-ssh-server:8080 в браузере и увидеть веб-страницу Джеймса, хотя сервер работает только в локальной сети.