将 TCP 流量拆分给后端的多个收件人?

将 TCP 流量拆分给后端的多个收件人?

假设我的域名是 kevin.com,并且有多个服务器位于 nginx 后面。使用 nginx 可以轻松实现 http 流量的负载平衡,但我可以拆分 nginx 服务器上特定端口上接收的流量,并将该流量路由到后端的不同服务器吗?例如,如果我有 a.kevin.com、b.kevin.com 和 c.kevin.com,它们都解析为一个公共 IP 地址,并且都在端口 2022 上监听,并且我希望能够连接到后端 3 个不同服务器上运行的 ssh 实例,可以使用 nginx 来实现吗?我可以 ssh 到 a.kevin.com:2022 并将其转发到端口 22 上的 10.0.0.1 计算机、b.kevin.com:2022 -> 10.0.0.2:22 和 c.kevin.com:2022 -> 10.0.0.3:22 吗?我认为 nginx 必须能够以某种方式解析外部连接的主机名。谢谢。

答案1

服务器无法知道您想要什么主机名;这不是 ssh 协议的一部分。

最好的解决方案是使用 IPv6 连接到您的每台服务器。在这种情况下,您根本不需要进行任何愚蠢的端口转发或任何其他类型的解决方法。您只需直接连接(当然要经过防火墙),就可以了,您过得很开心。

在传统 IPv4 世界中,解决此问题的常用方法是使用堡垒主机,即一台在您的网络上同时拥有全局 IPv4 地址和私有 IPv4 地址的服务器。您首先通过 ssh 连接到该主机,然后通过 ssh 连接到您真正想要访问的主机。OpenSSHssh命令甚至有一个命令行选项-J,可以稍微简化此过程。

为了通过 IPv4 端口转发实现此目的,您需要为每个不同的服务器转发单独的端口。

相关内容