?

Log in

No account? Create an account
   Journal    Friends    Archive    Profile    Memories
 

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 commentPrevious Entry Share Next Entry

Comments:

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)
Очевидный stackexchange. Сам не проверял, но вроде похоже на то что я делал в таком случае.

https://superuser.com/questions/315523/ssh-connection-between-two-behind-nat-computers-through-third-public-ip-computer
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)
А оказывается это только для *nix актуально. Но хрен знает насколько там злобно имплементировали авторы putty.

https://unix.stackexchange.com/questions/16564/why-are-the-first-1024-ports-restricted-to-the-root-user-only


В общем я бы потренировался на кошках с тем же python -m SimpleHTTPServer чтобы отсеять проблему с этим.
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)
/etc/ssh/sshd_config
https://pastebin.com/gPD9SiPG

~/.ssh/config у меня там нет.
From:metaller
Date:April 14th, 2017 07:18 am (UTC)
(Link)
Я знал это примерно в 2002-2003, но уже забыл ...
Мысль lyuden насчёт Open VPN весьма здравая.
From:metaller
Date:April 14th, 2017 07:20 am (UTC)
(Link)
Неужто гугл всемогущий не помогает ?
From:metaller
Date:April 14th, 2017 07:30 am (UTC)
(Link)
В 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)
Не работает. Обновил пост.
From:metaller
Date:April 14th, 2017 07:59 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:metaller
Date:April 14th, 2017 08:18 am (UTC)
(Link)
Putty.
Check this out https://anotheritblog.net/2012/11/26/ssh-tunneling-on-windows-with-putty/
You are interested in section "Remote port forwarding". There are pictures for you there as well ;)
From:morfizm
Date:April 14th, 2017 08:21 am (UTC)
(Link)
Ты бы ещё гугл посоветовал. Впрочем, ты его там выше посоветовал.
From:metaller
Date:April 14th, 2017 08:32 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 показывал слушающее соединение, правильно?

Короче, там всё сложнее, чем тривиально, поэтому я и обратился за помощью к залу.
From:metaller
Date:April 14th, 2017 08:46 am (UTC)
(Link)
Какие требования на стороне C я не знаю. Обычно это полностью открытый хост. Попробуй открыть на нём порт X на вход и на выход и порт Y на вход и на выход.
From:soloviewoff
Date:April 14th, 2017 09:47 pm (UTC)
(Link)

На портах меньше 1024 только root может слушать. Извини, если это знаешь уже.

From:soloviewoff
Date:April 14th, 2017 09:48 pm (UTC)
(Link)

На Линукс или юникс, имею в виду. Про Винду не знаю.