tl;dr: A -> B и C -> B работает. Как заставить A - >C работать?
у меня 3 узла
A. A local machine
B. A middle-man
C. A phone with a webapp running on port 333
A и C можно по SSH к Б. Таким образом, А->B и C->B работает нормально, но А -> C не работает.
На B, я могу получить доступ к этому веб-приложение на http://localhost:3344
после создания туннеля из C:
machine-c$ /usr/bin/ssh -f -N -T -R 3344:localhost:333 user@machine-b
Я бы подумал, что с вышеуказанным туннелем работает все, что мне нужно, это туннель из A - >B вот так:
machine-a$ /usr/bin/ssh -f -N -T -L 9999:machine-b:3344 user@machine-b
Я вижу следующее сообщение:
Local connections to LOCALHOST:9999 forwarded to remote address machine-b:3344
но доступ к localhost: 9999 зависает со следующим набором повторяющихся сообщений:
debug2: channel 3: zombie
debug2: channel 3: garbage collecting
debug1: channel 3: free: direct-tcpip: listening port 9999 for machine-b port 3344, connect from ::1 port 24626 to ::1 port 9999, nchannels 4
debug1: Connection to port 9999 forwarding to machine-b port 3344 requested.
debug2: fd 10 setting TCP_NODELAY
debug1: channel 3: new [direct-tcpip]
channel 3: open failed: connect failed: Operation timed out
не уверен, что это актуально, но поскольку A - > B работает, я также настроил обратный туннель, чтобы B - > A тоже работал. То же самое для B - > C. Итак, в целом следующие работы:
A - > B
machine-a$ ssh user@machine-b
B - > A (сначала требуется обратный туннель SSH от A - >B)
machine-a$ ssh -f -N -T user@machine-b -R1234:localhost:22
machine-b$ ssh -p 1234 user@machine-a
то же самое было сделано для C->B
как настроить SSH-туннель от A до C (через B?) так что я могу открыть это приложение на С помощью localhost:3344 ?
Я посмотрел на следующие вопросы, но не могу обернуть голову вокруг того, что нужно:
SSH как socks прокси через несколько хостов