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. Итак, A-> B и C-> B работают нормально, но A -> 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?) чтобы я мог получить доступ к этому веб-приложению напрямую через A с помощью localhost:3344?
Я посмотрел на следующие вопросы, но не могу обернуть голову вокруг того, что нужно:
SSH как socks прокси через несколько хостов