SSH-туннели в примерах

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

Рассмотрим создание и настройку по нескольким вариантам.

И так, у нас имеется сервер, назовём его host-1. К нему у нас есть полный доступ только по SSH — но нам необходимо открыть Tomcat, работающий на порту 8082 — к которому нас никак пропустить не могут.

Рассматривать вариант будем с настройкой Windows и Putty.

Открываем SSH-соединение к нужному серверу, логинимся.

Далее — правой кнопкой клацаем на заголовке окна Putty, выбираем Change settings, переходим в SSH > Tunnels.

Указываем такие параметры:

Source port: любой неиспользуемый порт в вашей системе;
Destination port: 127.0.0.1:8082

uat_tun_1

Жмём Add, потом Apply.

Переходим в настройки браузера, и устанавливаем параметры прокси:

uat_tun_3

Теперь остаётся в браузере открыть страницу http://localhost:3002 — и попадаем на страницу Tomcat на сервере host-1.

Ещё один пример — у нас есть тот же внешний сервер, с которого есть нормальный доступ к любым ресурсам в Сети. А вот с рабочего места у нас доступ к http://youtube.com и http://facebook.com закрыт.

Выполняем похожие действия, но с небольшими отличиями. Настройки в Putty:

uat_tun_4

Source port — оставляем прежний, но вместо Local — выбираем Dynamic. Нажимаем Add, Apply.

Переходим к настройкам браузера:

uat_tun_5

Обратите внимание, что тип прокси тут не HTTP — а SOCKS.

Наслаждаемся доступом к любимым сайтам.

И более интересный случай.

Имеем прежний host-1. Кроме него — второй сервер, назовём его host-2. Кроме этого — у нас есть машина с Windows, которой необходимо предоставить доступ к ресурсу TeamCity на сервере host-1 на порту 8111. При этом — доступ с Windows-машины у нас есть только к серверу host-2, и только на 22-ой порт.

Для начала — поднимаем туннель между host-1 и host-2. Выполняем на host-1:

$ ssh -f -N -R host-2:8082:localhost:8111 username@host-2

Так мы открываем туннель, который локально (на host-1) смотрит на порт 8111, а с другой стороны — машина host-2, на которой открывается порт 8082, и ждёт входящих соединений. При получении пакетов на порт 8082 (при чём — только по интерфейсу lo0! это важно) — он будет их перенаправлять на машину host-1 порт 8111.

Что касается интерфейса lo0. При установлении SSH-туннеля, даже при указании внешнего IP машины — соединение поднимается только с localhost, т.е. 127.0.0.1.

Посмотрим на host-2:

$ netstat -anp | grep 8082
tcp        0      0 127.0.0.1:8082          0.0.0.0:*               LISTEN      -

Что бы изменить это — необходимо отредактировать файл конфигурации демона sshd/etc/ssh/sshd_config и изменить параметр:

#GatewayPorts no

Но сейчас мы этого делать не будем, это просто заметка.

Продолжим. Переходим к настройке Putty на нашей Windows-машине. Тут всё просто — пользуемся примером 1 из этой статьи, только меняем порт на нужный (в скриншоте, кстати, он и есть). Подключаемся Putty к хосту host-2, настраиваем tunnel. В браузере меняем настройки proxy — и получаем необходимое, указываем адрес http://localhost:3002:

uat_tun_6

SSH довольно чувствителен к потерям пакетов, поэтому туннели могут часто обрываться.

Что бы избежать этого — можно либо поиграться с параметрами в файле настроек sshd/etc/ssh/sshd_config:

#TCPKeepAlive yes
#ServerAliveInterval#ServerAliveCountMax

Либо — воспользоваться утилитой autossh:

# yum -y install autossh

Источник http://rtfm.co.ua/ssh-tunneli-v-primerax/

Запись опубликована в рубрике *Unix,*Linux, *Сети, FreeBSD. Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Я не спамер This plugin created by Alexei91