我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处理多个服务等。