我想通过 SSH 隧道将多个端口从本地计算机转发到远程计算机。但是,我希望这发生在单个端口上。是否有可以在单个端口和多个应用程序之间进行复用的协议或工具?
编辑:我将很多端口从很多机器转发到单个远程,并且我想在每台机器的应用程序级别对它们进行复用,以在该远程上使用尽可能少的端口。我看到像 sshl 这样的解决方案可以复用某些协议,但我不知道有任何通用解决方案可以以独立于协议的方式包装消息。
答案1
SSH 允许您在命令行上指定多个端口来建立隧道(示例来自这里):
$ ssh -L 10001:one.securedomain.com:3389 -L 10002:two.securedomain.com:3389
您是说您只想使用单个本地端口吗?
SSH 只是进行源端口 <-> 目标端口的映射。如果您想要 1 个源端口 <-> 多个目标端口,那么您就会遇到一个根本问题 - 例如,如果您将流量发送到本地端口 10001,那么任何东西(更不用说 SSH)应该如何知道您想要哪个目标端口?
某些协议具有这样的功能:作为有效负载传输的部分数据指定有效负载的目的地。 HTTP 通过Host:
标头来完成此操作。由于 SSH 采用“X 是我的工作而不是其他”的 Unix 哲学,因此它不会嗅探、解码或理解它所传输的流量。因此它无法帮助您,但在源或目标系统上运行的代理服务器可能会帮助您。对于 HTTP 以外的协议,您必须寻找或开发一个充当“多路复用”代理的服务 - 我思考如果您足够仔细的话,有 SMTP 和 FTP 的实用程序。
一种解决方法是在 SSH 隧道上运行 OpenVPN 之类的东西,这样您就可以在流量到达另一端后显式控制路由等。