我已经在 Google 上搜索过了,但还是没有找到问题的答案。请帮帮我。有两个服务器:
serverA with public IP 12.0.0.10 and an private IP 10.0.0.5
serverB with public IP 20.0.0.11
我已经在服务器B上设置了到服务器A的SOCKS代理:
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(服务器 A 私有 IP)它也是可访问的。这就是我所需要的。我想让服务器s A private IP to be available through server
B 在某些端口上成为公共 IP,但不在浏览器中指定 SOCKS。
我可以使用 ssh 端口转发,但问题是 - 我需要转发许多端口但不知道具体是哪些 - 我只知道范围。
因此,当我连接到 20.0.0.11 的任何端口(例如,从 3000:4000 范围)时,我希望该流量被重定向到同一端口上的 10.0.0.5。这就是为什么我决定也许通过 SSH 和 iptables REDIRECT 的 SOCKS 代理可以帮助我。
客户端 -> serverBPublicIP(3000:4000 范围内的任何端口)-> serverAPublicIP -> serverAPrivateIP(在 serverBPublicIP 上请求端口)
在服务器B上我这样做:
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 时,我没有看到 serverA 上有任何代理流量。我还应该做什么?我试过这样的 tcpsocks(例如,我正在远程登录 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
但我不知道如何处理服务器 A 上的流量。如何将其路由到其私有 IP。请帮帮我。我知道,VPN 消除了我试图创建的所有麻烦,但我无法使用 tun/tap 设备。它已被禁用。
答案1
另一种方法是做类似的事情:
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
这将为每个端口设置一千零一个单独的 ssh 隧道。我从未尝试过同时设置一千多个 ssh 隧道,所以我不知道性能会如何,或者它是否会起作用,或者您是否必须设置多个并行 ssh 进程。
这将是一个相当长的命令行,我建议编写某种脚本来实际调用该命令。
总而言之,如果可能的话,我不会推荐这种做法,请设置 VPN。
您的用户无法直接连接到 12.0.0.10 的原因是什么?或者这些端口没有通过防火墙公开?如果不是,您不能从选定的 IP 地址打开防火墙中的端口吗?或者您出于安全考虑不允许您这样做?
答案2
我知道,VPN 可以消除我试图创建的所有麻烦,但我无法使用 tun/tap 设备。它已被禁用。
这听起来有点奇怪,但 tun/tap(据我所知)仅用于 SSL VPN(例如 openVPN)。
这意味着你使用像 strongswan 这样的 IPSEC VPN 可能会更好一些(https://strongswan.org/) 不使用 tun/tap 设备。
正如您所说,并排运行 10 或 100 个 SSH 隧道有点费力且不稳定。
如果 IPSEC VPN 也不起作用,那么您可能需要尝试在服务器 A 上放置 haproxy,并创建单个 SSH 转发 ( -L
) 而不是 SOCKS ( -D
) 隧道。这样,您可以在 B 上配置 (web) 服务器以使用该转发器作为上游,并在 A 上使用 haproxy 来处理多个服务等。