SSH反向袜子隧道

Ber*_*rry 32 networking ssh tunnel ssh-tunnel socks

ssh -D 可以在本地机器上创建一个socks端口,将流量传递到远程,然后到其他地方。

ssh -L port:host:hostport, 在本地机器上监听端口,从远程机器的角度将流量传递给“host:hostport”。

ssh -R port:host:hostport是 的对应物ssh -L,它在远程机器上监听端口,并从本地机器的角度将流量传递给“host:hostport”。

但是什么是对应的ssh -D,即如何在远程机器上打开一个socks端口,它将流量传递到本地,然后到其他地方?

小智 19

可以使用 ~/.ssh/config 中的此代码段透明地实现:

Host sockstunnel
    ProxyCommand ssh -D 3128 localhost nc -q 1 localhost 22

Host target
    RemoteForward 3128 localhost:3128
    ProxyCommand ssh -W target:22 sockstunnel
Run Code Online (Sandbox Code Playgroud)

细节

我们想要一个反向 DynamicForward。这是使用两个 ssh 命令实现的:

  • ssh -D 3128 localhost
  • ssh -R 3128:localhost:3128 target

这样,目标就有一个到 SSH 客户端的 SOCKS 隧道。

我所做的是使用链接 ssh 的经典方式通过中间主机到达远程目标,以便在登录目标时透明地处理 SOCKS 隧道创建。第一个 ProxyCommand + nc 技巧是强制性的,因为 -W 意味着 ClearAllForwardings。

  • 你能更详细地解释你的命令的作用吗? (2认同)

Pri*_*cey 14

使用-D&-L您可以在两台机器之间以任何一种方式进行通信。

所以...

  • 在本地机器上,用于-R在远程机器上创建一个指向本地机器 sshd 的侦听端口。
  • -D在远程机器上使用,指向您在上面创建的端口。

我“认为”填写下面的内容会使它起作用......

ssh remotehost -R remoteport:localhost:localport "ssh -D 9050 localhost -p remoteport"

' remotehost', ' remoteport' & ' localport' 在上面需要改变。一个socks代理将在9050上形成。

  • -1 你没有费心去测试它,你的命令是完全错误的。你试图让它像另一个 SO 答案一样,但你没有做到。从 A 到 B 的 SSH 连接,您链接到的那个有 ssh -D 监听 A。你的那个监听 B。你的那个是错误的。您有 SOCKS 代理在监听的一侧监听。 (5认同)

zmx*_*zmx 10

local$ ssh -R 1080 remote
remote$ curl --socks5 localhost https://example.com
Run Code Online (Sandbox Code Playgroud)

自 OpenSSH 7.6

ssh(1):添加对反向动态转发的支持。在这种模式下,ssh 将充当 SOCKS4/5 代理并将连接转发到远程 SOCKS 客户端请求的目的地。使用 -R 和 RemoteForward 选项的扩展语法请求此模式,并且因为它仅在客户端实现,不需要更新服务器以支持。

https://www.openssh.com/txt/release-7.6

  • 这应该是答案 (2认同)