尝试通过多跳 ssh 隧道传输 http/socks 时连接重置

尝试通过多跳 ssh 隧道传输 http/socks 时连接重置

涉及机器:(客户端)A -- B -- C(退出)
A/B 是 cygwin ssh/sshd,C 是 linux

我想要的是:

  1. A 的 http(s)袜子流量通过 B、C 隧道传输。
    目的地是任何IP,因此单独使用 -L 不起作用。

  2. A -- B、B -- C 流量必须加密。(因此我尝试使用 ssh)

我所做的设置:

  1. 代理服务器(3proxy)在 C 上运行:http(s)在 3998,socks5 在 3999。
    我测试了代理服务器。适用于 127.0.0.1 和外部 IP。

  2. A 上的 ssh 命令:(我想将本地:3998 转发到 C:3998,将本地:3999 转发到 C:3999)
    ssh -At -L 3998:B:6998 userB@B ssh -At -L 6998:C:3998 userC@C
    ssh -At -L 3999:B:6999 userB@B ssh -At -L 6999:C:3999 userC@C
    我测试了多跳登录:有效。

  3. 使用 127.0.0.1:3998 作为 http(s) 代理。使用 127.0.0.1:3999 作为 socks 代理。

问题:
Firefox 无法使用 http 或 socks,并提示连接已重置。
(cygwin)wget 无法使用 http

C 的 ssh 控制台上显示“通道 8:打开失败:连接失败:连接被拒绝”之类的错误消息。

使用 -vvv 的详细信息:

on A:
   $ export http_proxy=http://127.0.0.1:3998; wget www.bing.com
   --2014-04-13 08:54:14--  http://www.bing.com/
   Connecting to 127.0.0.1:3998... connected.
   Proxy request sent, awaiting response... Read error (Connection reset by peer) in        headers.
   Retrying.

on C:
   root@C:~# debug1: Connection to port 3998 forwarding to B port 6998 requested.
   debug2: fd 9 setting TCP_NODELAY
   debug3: fd 9 is O_NONBLOCK
   debug3: fd 9 is O_NONBLOCK
   debug1: channel 3: new [direct-tcpip]
   channel 3: open failed: connect failed: Connection refused
   debug2: channel 3: zombie
   debug2: channel 3: garbage collecting
   debug1: channel 3: free: direct-tcpip: listening port 3998 for B port 6998, connect
    from 127.0.0.1 port 65460 to 127.0.0.1 port 3998, nchannels 4
   debug3: channel 3: status: The following connections are open:
     #2 client-session (t4 r0 i0/0 o0/0 fd 6/7 cc -1)

我也尝试过单独用 C 语言进行转发:

(one tty) ssh -vvv -L 127.0.0.1:1234:127.0.0.1:3998 [email protected]
(another tty) export http_proxy=http://127.0.0.1:3998; wget www.bing.com

它起作用了,我甚至很困惑为什么它在我的设置中不起作用。

======================================================================================
如果我使用这个命令,那么它会起作用吗?!

ssh -At -L 3998:127.0.0.1:6998 userB@B ssh -At -L 6998:127.0.0.1:3998 userC@C

但这些都不起作用

ssh -At -L 3998:ip_of_B:6998 userB@B ssh -At -L 6998:ip_of_C:3998 userC@C
ssh -At -L 3998:ip_of_B:6998 userB@B ssh -At -L 6998:127.0.0.1:3998 userC@C

有人能给我解释一下吗?

我不知道 openssh 如何实现 -L,以致于它的行为如此奇怪。

相关内容