DarkMan 31.03.2009 15:05
How-to`s — Создание ssh-туннелей
Наверное многие попадали в ситуацию, когда доступ к необходимым ресурсам в интернете был ограничен. Например вы сидите на работе и у вас ограниченный доступ к интернету, запрещено все что не разрешено.Вы не можете поговить с друзьями по IRC, ограниченный доступ к сайтам, пароли летают в plain-text, или вы хотите поиграть в игрушки ;).
Сегодня я расскажу вам как быстро и просто соорудить туннель пробрасывающий необходимый вам траффик через ssh.
Описывать все действия я буду исключительно для Linux, под Windows можно использовать putty, но за этим в гугл.
Что же нам необходимо для данного финта ушами?
Поверьте совсем не много, всего-лишь удаленная машина на которую у нас есть доступ по ssh. Я использую свою домашнюю машину, но существуют сервисы, где нахалявую дают шелл пусть и с кучей ограничений, но для туннеля достаточно.
Теория
Для начала, чтобы вы не походили на обезьянок-космонавтов немного теории, вы же должны понимать как это все работает.
То что мы делаем это, так называемый, SOCKS-прокси в который мы будем заворачивать весь интересующий нас траффик. Сразу оговорюсь, что сокс поддерживают далеко не все программы, но и тут есть выход из положения, существуют так назваемые "соксификаторы" например tsocks, которые весь траффик генерируемый некоторыми приложениями заворачивает в сокс.
Ну ладно хватит теории, если вам будет интересно, на что я очень сильно надеюсь, то вы все узнаете в гугле.
Практика
В зависимости от того чего вы хотите добиться, я могу предложить вам два способа решения проблемы.
Способ первый
Если вы хотите получить доступ к какому-то определенному ресурсу через туннель, то принцип такой:
1 |
|
Давайте рассмотрим ключи которые я описал выше:
-N — этим ключем мы говорим, что мы не хотим получить интерактивную оболочку, то есть банально не хотим иметь возможности печатать комманты в этой сессии
-f — сворачивает сессию в бекграунд
-L — собственно сам туннель этим ключем мы говорим, что хотим чтобы соединения с <host>:<host_port> форвардились (передавались) на <local_port>
Пример 1:
1 |
|
Запустив эту сессию, мы можем в фаерфоксе прописать SOCKS прокси, с параметрами localhost и портом 8080, и принимать все данные передающиеся с 80 порта welinux.ru через организованный нами ssh-туннель.
Пример 2:
1 |
|
Таким образом мы пробрасываем еще POP3 и SMTP протоколы через наш туннель. Но тут есть одна проблемма, на привелигированные порты (<=1024) может форвардить только root, но на самом деле это не так и фатально, просто нужно форвардить на непривелигированные.
Способ второй
Второй способ будет вам наверное проще и понятнее, и именно поэтому я решил написать его вторым, используя его, через туннель вы можете передавать весь тарффик и принимать тоже.
1 |
|
Ключ -D фактически организует на вашей машине SOCKS-прокси.
Таким образом, весь интересующий вас траффик будет заворачиваться на 5555 порт в системе и передаваться через туннель (если вы соответсвующим образом настроили программы умеющие использовать SOCKS).
Вот и все, за большим советую лезть в гугл и маны, в частности man ssh
Удачного использования.

+ 0 -
Полезная это штука - туннели.
Хорошая статья. Но, имхо, для полноты картины стоит написать про -R, для проброса удалённого порта в локальный (тоже очень полезная штука), и, наверное, добавить, что можно биндить порт не только на localhost, но и на другие адреса, тоже иногда может пригодиться. Хотя, само собой, в мане это всё есть :)
Надо наоборот самое простое вверх писать. Если статья на новичков рассчитана.
Если самое простое, то есть вероятность не дочитать до конца. По поводу -R я бы отдельную статейку написал, по поводу ковыряния дырок в фаерволе. Ну а насчет биндинга на другие хосты это конечно хорошо и полезно, но новичкам нафиг не нужно, а если будет интересно и будет необходимость, то в гугле найдут =)
Есть рабочая машина, на которой доступ в интернет ограничен только 80 портом. И есть домашная машина без ограничений. Рабочая имеет внешний адрес и я могу подключаться к ней с домашней по SSH.
Как настроить туннель, чтобы с рабочей можно было бы обойти ограничение файрвола и подключатся на другие порты, например для CVS?
Как настроить туннель, чтобы с рабочей можно было бы обойти ограничение файрвола и подключатся на другие порты, например для CVS?
нужно забиндить домашний ссш-сервер на 80й порт и на него целиться своим туннелем ;)
з.ы. если не хочется трогать домашний вебсервер, можно попытать счастья на 443м порту (https), который также пропускается большинством корпоративных прокси.