通过 SSH SOCKS 隧道将流量转发到特定 IP

Posted

技术标签:

【中文标题】通过 SSH SOCKS 隧道将流量转发到特定 IP【英文标题】:Forward traffic to specific IP via SSH SOCKS tunnel 【发布时间】:2017-01-04 15:37:41 【问题描述】:

我能够通过 SSH 连接到 223.32.11.43 并 cURL 其本地网络上的其他服务器。

当我通过 SSH 进入时,此方法有效:

curl -d 'my: parameter' -H "Content-Type: application/json" 10.0.30.10
code:200

在远程服务器上,我设置了一个 SOCKS 隧道:

ssh -f -N -D 9090 MyUser@223.32.11.43

我尝试设置 iptables,以便可以在与远程服务器相同的网络上 cURL 内部服务器:

iptables -t nat -A OUTPUT -s 10.0.30.10 -p tcp --dport 80 -j DNAT --to-destination 223.32.11.43

但它似乎失败了,至少我尝试 cURL 时它超时了:

curl -d 'my: parameter' -H "Content-Type: application/json" 10.0.30.10
...timeout

做什么,所以我可以在远程服务器上执行相同的 cURL?

【问题讨论】:

在第二个 curl 请求中,您可能需要添加 --socks5-hostname 223.32.11.43:9090 来告诉它使用 socks 代理。不需要 iptables 规则。应用程序需要使用 iptables 规则不会发生的袜子说话。它只会转发到目的地的 80 端口。另外,我不认为 SSH 命令设置的是 SOCKS 隧道,只是设置了 SSH 隧道。 仍然超时。远程服务器是否需要在其 iptables 中添加更多规则,或者是否所有内容都通过已允许的 SOCKS 隧道进行隧道传输? 【参考方案1】:

这对我有用:

从您的远程计算机,设置到远程服务器的 SOCKS SSH 隧道:

ssh -D 9090 -f -C -q -N MyUser@remote.ip

从远程计算机,通过隧道发出请求:

curl -d 'my: parameter' -H "Content-Type: application/json" \
--socks5-hostname remote.ip:9090 10.0.30.10

【讨论】:

仍然超时:My-Lenovo:~ micniel$ ssh -D 9090 -f -C -q -N MyUser@remote.ip My-Lenovo:~ micniel$ curl 10.0.30.10 --socks5 -hostname remote.ip:9090 curl: (7) 连接remote.ip 9090端口失败:操作超时 只是为了澄清原始帖子中是否解释得不够好。本地 IP 10.0.30.10 不是我的远程服务器本地 IP。这是我的远程服务器可以访问的本地 IP。

以上是关于通过 SSH SOCKS 隧道将流量转发到特定 IP的主要内容,如果未能解决你的问题,请参考以下文章

CobaltStrike使用-第八篇-隧道技术(socks转发ssh隧道CS转发监听器)

使用 SSH 隧道实现端口转发SOCKS 代理

使用 JSch 创建一个通过 SSH 隧道化的 SOCKS 代理

Java:SSH 隧道 - 将本地 SOCKS 设置为侦听器

红蓝对抗之隧道技术第二篇(reGeorg内网穿透SSH隧道本地Socks代理SSH远程转发Earthworm Socks5代理Tunna正向代理ICMP隧道DNS隧道Frp穿透)

红蓝对抗之隧道技术第二篇(reGeorg内网穿透SSH隧道本地Socks代理SSH远程转发Earthworm Socks5代理Tunna正向代理ICMP隧道DNS隧道Frp穿透)