|
SSH tunnelling - morfizm


| Apr. 13th, 2017 11:42 pm SSH tunnelling Подскажите, где доступным языком объясняется subj?
У меня есть, казалось бы, простой юс-кейс. Компьютер A: Windows. На самом компьютере открыт входящий TCP порт X, но сетка закрыта от входящих соединений извне (нет настоящего IP-адреса). Компьютер B: Windows, открыт исходящий TCP порт Y. Компьютер C: EC2 instance, открыт SSH. Если надо, могу открыть что-то ещё (но по логике вещей, это же не нужно?). Есть внешний IP и даже static DNS.
Нужно открыть соединение при помощи приложения Z с компьютера B на компьютер A. На каждом компьютере есть Putty/Plink, способные заходить на C с любыми настройками для tunnelling'а. Нужно так настроить, чтобы если в приложение Z вбиваешь localhost:Y, то на самом деле открывается соединение на A:X, гоняя трафик через C. С наскоку не получилось :(
Update:
Step 1. At computer "A": putty -R F:127.0.0.1:X -ssh user@C -i path-to-ppk Step 2. At computer "B": putty -L Y:127.0.0.1:F -ssh user@C -i path-to-ppk Step 3. At computer "B": try to connect with Z to 127.0.0.1:Y - doesn't work (connection quickly dropped, "Server unexpectedly closed network connection").
Also, if I SSH to "C" and type "netstat -an | grep F", I see nothing (I expected to have a listener on F after executing step 1.) Any ideas? 29 comments - Leave a comment  | |

 | From: | lyuden |
Date: | April 14th, 2017 06:54 am (UTC) |
---|
| | | (Link) |
|
Если бы это было три машины на Linux, то я бы подсказал.
А на Windows я не уверен, что ssh поддерживает туннелинг. Плюс насколько я понимаю для туннелей нужен ssh сервер клиента недостаточно.
Дальше ты на самом деле скорее всего не хочешь делать это с помощью ssh. Ибо там много геморроя с обрывом соединения на самом деле.
Я бы посоветовал сразу установить Open VPN на EC2 инстанс и создать виртуальную сеть из Windows машин, а дальше работать как в локальной сети.
 | From: | lyuden |
Date: | April 14th, 2017 07:13 am (UTC) |
---|
| | | (Link) |
|
 | From: | morfizm |
Date: | April 14th, 2017 07:50 am (UTC) |
---|
| | | (Link) |
|
Не работает :( Обновил пост.
 | From: | lyuden |
Date: | April 14th, 2017 08:07 am (UTC) |
---|
| | | (Link) |
|
Сейчас попробую.
 | From: | morfizm |
Date: | April 14th, 2017 08:12 am (UTC) |
---|
| | | (Link) |
|
Спасибо. Я даже открыл F for all inbound на EC2 instance (не уверен, что это надо, выглядит как overkill), а также добавил GatewayPorts yes в /etc/ssh/sshd_config и рестартанул sshd. Опять же, не уверен, что это надо, но это не помогло.
 | From: | lyuden |
Date: | April 14th, 2017 08:44 am (UTC) |
---|
| | | (Link) |
|
Я запустил на виндовс машине python -m SimpleHTTPServer он отвечает на 8000 порту
после (порядок вроде важен) этого
putty.exe -R 20000:127.0.0.1:8000 -ssh ec2user@10.0.0.1 -i .\private.ppk
где 10.0.0.1 - адрес EC2 инстанса хотя в моем случае это digital ocean
Дальше поскольку второй вин машины у меня нет я из-под линукса
ssh -L 8000:127.0.0.1:20000 ec2user@10.0.0.1
После чего
wget localhost:8000 мне позволяет сделать запрос к моему python -m SimpleHTTPServer
Не знаю то ли это что тебе нужно, впрочем.
 | From: | morfizm |
Date: | April 14th, 2017 08:48 am (UTC) |
---|
| | | (Link) |
|
Спасибо! Мне это не очень помогает, т.к. я практически то же самое-то и делаю, и оно не работает. Вопрос: виден ли на EC2 инстанце какой-то эффект от первой команды? Говорят, что если сделаешь там:
netstat -an | grep 20000 то увидишь LISTEN на этот порт. У меня выдаёт пустоту.
 | From: | lyuden |
Date: | April 14th, 2017 08:50 am (UTC) |
---|
| | | (Link) |
|
root@lydeninstance:~# netstat -an | grep 20000 tcp 0 0 127.0.0.1:20000 0.0.0.0:* LISTEN tcp6 0 0 ::1:20000 :::* LISTEN
 | From: | morfizm |
Date: | April 14th, 2017 08:52 am (UTC) |
---|
| | | (Link) |
|
Понял. Да, значит, затык на самой первой команде, она не срабатывает как надо.
 | From: | morfizm |
Date: | April 14th, 2017 08:52 am (UTC) |
---|
| | | (Link) |
|
Я пойду спать, завтра перечитаю и буду пробовать дальше. Thanks for help!
 | From: | lyuden |
Date: | April 14th, 2017 08:48 am (UTC) |
---|
| | | (Link) |
|
Нда. Ты это в общем то и делал. Попробуй с порядком запуска туннелей поиграться.
Дальше если у тебя работают соединения по ssh с EC2 машиной то она ничего дропать не должна.
Дальше порты X,F,Y и какой то непонятный Z должны быть > 1024
Аналог ssh -vv для Putty ?
 | From: | morfizm |
Date: | April 14th, 2017 08:51 am (UTC) |
---|
| | | (Link) |
|
Спасибо, много полезных идей!
> Дальше порты X,F,Y и какой то непонятный Z должны быть > 1024
О... а почему это важно? У меня все три < 1024. Причём все три я не могу сделать < 1024. Могу только F и, при желании, X. Y должен быть < 1024. Я прошу слишком многого? Почему?
 | From: | lyuden |
Date: | April 14th, 2017 08:59 am (UTC) |
---|
| | | (Link) |
|
 | From: | morfizm |
Date: | April 14th, 2017 08:51 am (UTC) |
---|
| | | (Link) |
|
Z это не порт, это название приложения...
 | From: | morfizm |
Date: | April 14th, 2017 08:50 am (UTC) |
---|
| | | (Link) |
|
Ещё - мне бы очень помогли два файла с твоего EC2:
1. /etc/ssh/sshd_config 2. ~/.ssh/config
и настройки security группы.
Я сравню со своими.
 | From: | lyuden |
Date: | April 14th, 2017 08:54 am (UTC) |
---|
| | | (Link) |
|
Я знал это примерно в 2002-2003, но уже забыл ... Мысль lyuden насчёт Open VPN весьма здравая.
Неужто гугл всемогущий не помогает ?
В UNIX/Linux это делается вот так : 1) At host A execute : ssh -R Y:localhost:X user@C 2) At host B : use connection to C:Y
При помощи Putty аналогично.
Edited at 2017-04-14 07:31 am (UTC)
 | From: | morfizm |
Date: | April 14th, 2017 07:51 am (UTC) |
---|
| | | (Link) |
|
Не работает. Обновил пост.
Я думаю не нужен step 2. Кроме того какие-то излишества наблидаются в твоих командах. Попробуй как я написал : 1) At host A execute : ssh -R Y:localhost:X user@C 2) At host B : use connection to C:Y
 | From: | morfizm |
Date: | April 14th, 2017 08:10 am (UTC) |
---|
| | | (Link) |
|
host A is Windows host. There is no "ssh". There is "putty" or "plink". Choose one.
 | From: | morfizm |
Date: | April 14th, 2017 08:21 am (UTC) |
---|
| | | (Link) |
|
Ты бы ещё гугл посоветовал. Впрочем, ты его там выше посоветовал.
Ну ты блин лентяй. Я конечно не прав был насчёт putty, затупилось копьё :) Но ты бы мог на основе приведенной инфы сам догадаться. Попробуй так : 1) At host A execute : plink -R Y:localhost:X user@C 2) At host B : use connection to C:Y
На хосте C должен быть открыт порт Y I think.
 | From: | morfizm |
Date: | April 14th, 2017 08:40 am (UTC) |
---|
| | | (Link) |
|
Блин лентяй это ты, потому что в Update к посту я написал, что попробовал эквивалентную вещь тому, что ты только что предложил (и через plink конечно тоже).
Я написал этот пост после 1.5 часа тщетных попыток найти и попробовать всё, что я смог найти. Конечно, я читал по твоей ссылке.
Я подозреваю, что тут либо на стороне EC2 недосконфигурировано, либо firewall на B что-то режет лишнее, каким-то странным образом. Причём склоняюсь к первому, т.к. иначе бы netstat -an показывал слушающее соединение, правильно?
Короче, там всё сложнее, чем тривиально, поэтому я и обратился за помощью к залу.
Какие требования на стороне C я не знаю. Обычно это полностью открытый хост. Попробуй открыть на нём порт X на вход и на выход и порт Y на вход и на выход.
На портах меньше 1024 только root может слушать. Извини, если это знаешь уже.
На Линукс или юникс, имею в виду. Про Винду не знаю.
|
|