仅使用 SSH:通过 ssh SOCKS 代理反向隧道网络访问

Kai*_*aii 22 ssh-tunnel

偶尔我必须连接到访问受到严格限制的服务器。
DMZ 防火墙仅允许通过 VPN 的入站 SSH。
出站 HTTP 连接被阻止。

我正在寻找一种通过 SSH 会话建立网络访问隧道的简单方法,因此我可以通过 yum / apt-get 安装更新和软件。理想情况下,我希望避免在保护区内安装额外的软件/服务。

在这种情况下你会怎么做?

SSH 具有-D <port>SOCKS 代理选项。但不幸的是,它只是从客户端到服务器的一种方式,并且没有反向选项。

Kai*_*aii 31

我终于设法做到了这一点ssh

  1. 在您的客户端机器上启动本地 SOCKS 代理(使用ssh -D) 编辑:SSH>7.6 不需要
  2. 连接到远程服务器并设置反向端口转发 ( ssh -R) 到您的本地 SOCKS 代理
  3. 配置服务器软件以使用转发代理

1.在后台启动本地socks代理

编辑SSH>7.6 允许使用更简单的语法来启动代理。跳过这一步,继续第 2 步!

通过 SSH 连接到 localhost 并在端口 54321 上打开 SOCKS 代理。

$ ssh -f -N -D 54321 localhost
Run Code Online (Sandbox Code Playgroud)

-f 在后台运行 SSH。

注意:如果关闭启动命令的终端,代理进程将被杀死。还记得在完成后关闭终端窗口或自己杀死进程来清理自己!

2.连接到远程服务器并设置反向端口转发

将远程端口 6666 绑定到本地端口 54321。这使您的本地袜子代理可用于端口 6666 上的远程站点。

$ ssh root@target -R6666:localhost:54321
Run Code Online (Sandbox Code Playgroud)

编辑SSH>7.6 允许使用更简单的语法来启动代理!则不需要步骤 1:

$ ssh root@target -R6666:localhost
Run Code Online (Sandbox Code Playgroud)

3.配置服务器软件使用转发代理

只需配置 yum、apt、curl、wget 或任何其他支持 SOCKS 的工具即可使用代理127.0.0.1:6666

瞧!挖隧道快乐!


4. 可选:安装代理链让事情变得简单

proxychains安装在目标服务器上使任何软件都可以使用转发的 SOCKS 代理(甚至telnet)。它使用一种LD_PRELOAD技巧将来自任意命令的 TCP 和 DNS 请求重定向到代理,并且非常方便。

设置/etc/proxychains.conf以使用转发的袜子代理:

[ProxyList]
# SSH reverse proxy
socks5  127.0.0.1 6666
Run Code Online (Sandbox Code Playgroud)

隧道任意工具(使用 TCP)与proxychains

$ proxychains telnet google.com 80
$ proxychains yum update
$ proxychains apt-get update
Run Code Online (Sandbox Code Playgroud)


小智 6

较新版本的 SSH 允许使用非常简单的ssh-R <[bind_address:]port>. 仅使用主机上的端口和绑定地址,但不指定客户端端口将创建反向 SOCKS 代理。

这也在较新 SSH 版本的手册页中说明:

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

您可以使用 curl 连接到一个简单的“给我我的 IP”-API(如http://ifconfig.io )来测试这一点。

$ curl ifconfig.io

对比

$ curl --socks5 localhost:<PORT> ifconfig.io

  • 提及在哪个版本号中引入了该功能会很有用。 (2认同)
  • @kasperd:[OpenSSH 7.6](https://www.openssh.com/txt/release-7.6),于 2017 年 10 月 3 日发布。检查_新功能_下的第三个要点 (2认同)