SSH 反向袜子隧道

SSH 反向袜子隧道

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

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

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

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

答案1

通过-D&,-L您就可以在两台机器之间进行通信。

所以...

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

我“认为”填写以下内容即可使其起作用......

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

上面的‘ remotehost’、‘ remoteport’和‘ ’需要更改。9050 上将形成一个 socks 代理。localport

答案2

local$ ssh -R 1080 remote
remote$ curl --socks5 localhost https://example.com

自 OpenSSH 7.6 起

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

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

答案3

可以通过 ~/.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

细节

我们想要一个反向的 DynamicForward。这可以通过两个 ssh 命令实现:

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

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

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

答案4

较新OpenSSH 版本(>= 7.6)原生支持反向动态 TCP 转发。从(当前)手册中的-R选项:

...如果没有明确目的地[] 指定,ssh 将充当 SOCKS 4/5 代理,并将连接转发到远程 SOCKS 客户端请求的目的地。

请参阅友好的手册页了解详情。

就是这样!

相关内容