我想通过端口 3000 将流量发送到主机 B,我可以访问此图中的所有节点,这两个局域网之间开放的唯一端口是从 Linux 机箱 B 到 Linux 机箱 A 的端口 80。
所以我做了一个“ ”,然后使用“ ”通过隧道 ssh 返回ssh -R 1206:192.168.1.10:22 [email protected] -p 80
ssh -L 3000:10.10.10.10:3000 disp@localhost -1206
如果我正确的话,现在它会监听 Linux Box A 上的端口 3000,并通过隧道将其发送到 Linux Box B 端口 3000?我的逻辑正确吗?
我现在如何将该流量路由到主机 B 上的端口 3000。
如果我想要“从 B 到 A”的双向连接,该怎么做?
答案1
在我看来,你的路由/IP 范围有点奇怪,但我猜这不是问题的一部分。
我正在做一些猜测,但我希望它仍然有所帮助。
linux_box_b$ ssh -g -R *:3000:192.168.1.11:3000 [email protected] -p 80
现在,如果您从 host_a 向 linux_box_a:3000 发送某些内容,它实际上会被发送到 host_b:3000。要实现此功能,Linux Box A 上的 sshd 必须允许 GatewayPorts 和 AllowTcpForwarding
用于另一个方向
linux_box_b$ ssh -g -L *:3000:192.168.1.11:3000 [email protected] -p 80
现在 Linux Box B 监听端口 3000 并将它们通过隧道传输到主机 A 端口 3000。
但是,使用此解决方案,连接的最后部分(主机 A 和 Linux Box A 之间以及另一侧的主机 B 和 Linux Box B 之间)始终未加密。
对于端到端加密隧道,您可以使用:
linux_box_b$ ssh -g -R *:10022:192.168.1.11:22 [email protected] -p 80
linux_box_b$ ssh -g -L *:10022:192.168.1.11:22 [email protected] -p 80
host_a$ ssh -L 33000:localhost:3000 -p 10022 10.10.10.10
host_b$ ssh -L 33000:localhost:3000 -p 10022 192.168.1.10
现在每个主机(a&b)都必须使用 localhost:33000 作为其发送目的地。