Skip to content
Автор статьи
SimonSays2310

SSH-туннелирование

Через SSH можно не только подключаться к серверам, но и создавать через них туннели. Это полезно для получения доступа к тем или иным сервисам, которые доступны лишь в пределах локальной сети из соображений безопасности (локальное/удалённое туннелирование) и для обхода блокировок/прочих целей, где нужна передача IP вашего сервера на устройство (динамическое туннелирование).

Локальное туннелирование (параметр -L)

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

В этом случае при подключении используйте параметр -L вот таким образом: ssh -L ЛОКАЛЬНЫЙ_ПОРТ:127.0.0.1:ПОРТ_ВАШЕГО_ПО пользователь@адрес сервера.

После авторизации вы сможете зайти на тот или иной сервис, используя тот самый локальный порт, который вы указали (если указали 9999, то в клиент нужно писать 127.0.0.1:9999).

Удалённое туннелирование (параметр -R)

Представим совершенно другую ситуацию: на другом компьютере работает то или иное ПО, однако получить к нему доступ через обычное туннелирование невозможно по различным причинам (например, тот компьютер находится за NAT и вы не можете открыть порты).

В таком случае необходимо на том компьютере инициировать подключение к вашему серверу следующей командой: ssh -R ЛОКАЛЬНЫЙ_ПОРТ:127.0.0.1:ПОРТ_ВАШЕГО_ПО пользователь@адрес сервера.

После чего вы можете работать с тем ПО либо находясь в SSH вашего сервера, либо аналогично "пробросив" его на ваш компьютер параметром -L.

Динамическое туннелирование (параметр -D)

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

Для его использования вам нужен не параметр -L, а параметр -D, и используется он вот таким образом: ssh -D ПОРТ пользователь@адрес сервера. После авторизации укажите тот самый порт как SOCKS прокси в том клиенте, который вы используете (браузер/прочее ПО).

💡 Подсказка

Если вам не нужна терминальная сессия, добавьте параметр -N:

ssh -N -L ЛОКАЛЬНЫЙ_ПОРТ:127.0.0.1:ПОРТ_ВАШЕГО_ПО пользователь@адрес сервера

ssh -N -R ЛОКАЛЬНЫЙ_ПОРТ:127.0.0.1:ПОРТ_ВАШЕГО_ПО пользователь@адрес сервера

ssh -N -D ПОРТ пользователь@адрес сервера

PuTTY

В PuTTY туннелирование настраивается в Connections -> SSH -> Tunnels:

Если вам также не нужна терминальная сессия, то в Connections -> SSH поставьте галочку у "Don't start shell or command at all":

После выполнения настройки подключайтесь как обычно нажатием кнопки "Open".