SSH的袜子代理与iptables的REDIRECT

我GOOGLE了,没有find我的问题的答案。 请帮帮我。 有两个服务器:

serverA with public IP 12.0.0.10 and an private IP 10.0.0.5 serverB with public IP 20.0.0.11 

我已经在serverB上设置SOCKS代理到serverA:

 ssh -D20.0.0.11:2222 [email protected] 

所以当我在我的本地机在浏览器中指定SOCKS代理20.0.0.11:2222(serverB:2222)作为外部IP,而浏览时,我得到12.0.0.10(serverA IP)。 那没问题。

以及如果我去http://10.0.0.5 (serverA私有IP)它也是可及的。 那是我需要的。 我想让服务器s A private IP to be available through server的B公共IP在某些端口,但没有指定我的浏览器中的SOCKS。

我可以使用ssh端口,但问题是 – 我需要转发很多端口,不知道究竟是哪一个 – 我只知道范围。

所以当我连接到20.0.0.11到任何端口,例如,从3000:4000范围,我希望该stream量redirect到10.0.0.5在同一端口。 这就是为什么我决定可能通过SSH的SOCKS代理和iptables的REDIRECT可以帮助我。

客户端 – > serverBPublicIP(3000:4000范围内的任何端口) – > serverAPublicIP – > serverAPrivateIP(在serverBPublicIP上请求端口)

在serverB我做:

 ssh -D20.0.0.11:2222 [email protected] iptables -t nat -A PREROUTING -d 20.0.0.11 -p tcp --dport 3000:4000 -j REDIRECT --to-port 2222 

但是,这是行不通的 – 当我在20.0.0.11:3001 telnet例如我没有看到serverA上的任何代理stream量。 我该怎么做呢? 我已经尝试过像这样的tcpsocks(例如我正在telnet到20.0.0.11:3001)

 Client -> 20.0.0.11:3001 -> iptables REDIRECT from 3001 --to-port 1111 -> tcpsocks from 1111 to 2222 -> SOCKS proxy from serverB to serverA on port 2222 -> serverA 

但我不知道如何处理serverA上的stream量。 如何将其路由到其私有IP。 请帮帮我。 我知道,VPN删除所有我想创build的地狱,但我没有能力使用tun / tap设备。 它被禁用。

另一种方法是做类似的事情:

ssh -L 3000:10.0.0.5:3000 -L 3001:10.0.0.5:3001 .... -L 4000:10.0.0.5:4000 12.0.0.10

这将为每个港口build立一千个和一个单独的ssh隧道。 我从来没有试过设置超过一千个同步ssh隧道,所以我不知道会是什么样的performance,或者如果它甚至可以工作,或者如果你将不得不设置多个平行SSH进程。

这将是一个相当长的命令行,我会build议编写某种脚本来实际调用该命令。

总之,我不会推荐这个,如果可能的话,build立一个VPN。

您的用户是否有任何理由不能直接连接到12.0.0.10? 还是端口没有通过防火墙暴露? 如果没有,你不能只是从选定的IP地址打开防火墙的端口,或者你有安全考虑,不让你这样做?

我知道,VPN删除所有我想创build的地狱,但我没有能力使用tun / tap设备。 它被禁用。

这听起来有些奇怪,但tun / tap会(AFAIK)只用于SSL VPN(例如openVPN)。

这意味着你可能会用像strongswan这样的IPSEC VPN( https://strongswan.org/ ),它不会使用tun / tap设备。

正如你所说,并行运行10s或100s的SSH隧道是一个小问题,而且是脆弱的。

如果一个IPSEC VPN也不能工作,那么你可能想尝试在服务器A上放置haproxy,并创build一个单一的SSH转发( -L )而不是SOCKS( -D )隧道。 这样,您可以在B上configuration一个(networking)服务器,将该转发器作为上游使用,并使用haproxy处理多个服务等。