沙箱允许多个进程打开同一个端口

Sandboxing to allow multiple processes open the same port


背景

我有一个命令行应用程序,用于连接到端口 1234 上的远程设备。我无法更改端口号,也无法访问源代码来重建此工具。我目前在实验室工作,除了 SSH 之外的所有端口都被阻止。为了解决这个问题,我创建了一个隧道,即:

ssh -L 1234:remotehost:1234 sshuser@remotehost

现在,我只需将我的 CLI 程序指向 localhost:1234 即可使用我的 CLI 工具连接到所需的主机。


问题

此 CLI 工具需要连续 运行 大约一个小时,我有大约 200 台远程主机要用它进行测试。我想并行执行此任务。不幸的是,我只能使用端口 1234.

在我的本地计算机上创建一个隧道

问题

是否有 (trivial/simple/automated) 方法 jail/sandbox 我的 CLI 工具,以便我可以并行启动 100 个实例(即通过 shell 脚本),以便每个实例“认为”它正在与端口 1234 通话?例如,Docker 或 KVM 是否提供某种我可以快速设置的 anonymous/on-demand 计算节点功能?我宁愿不必通过 .

手动部署和管理大量 VirtulBox 主机

简单的答案是您可以在本地使用多个 IP 地址。客户端上的每个本地 IP 地址都将允许您创建另一个隧道。当前,您正在使用本地主机。但是您的客户端也有一个 IP 地址。您可以通过尝试以下语法来证明我的观点:

ssh -f -N -L 127.0.0.1:1234:remotehost1:1234 sshuser@remotehost1     # this is default 
ssh -f -N -L <local-IP1>:1234:remotehost2:1234 sshuser@remotehost2  # specifying non-default value <local-IP1>

现在,您只需要弄清楚如何为您的客户端提供多个 IP 地址(辅助地址)。然后您可以将其扩展到 2 个并行会话之外。

我还在您的 ssh 语法中添加了 -f 和 -N 以将 ssh 置于后台 (-f) 并且不发出任何命令。

过去使用 -R 隧道,我发现我需要在服务器上启用 GatewayPorts (/etc/ssh/sshd_config)。对于 -L ,我认为没有必要。但是,ssh 手册页明确提到了与 -L 函数关联的 GatewayPorts。你可能需要玩一下。我刚刚在我的 Mac 上尝试了这个,我能够在没有任何 GatewayPorts 考虑的情况下让它继续运行。