这可能吗?
- 带有 ssh 服务器的本地系统
- 远程客户端正在运行 ssh 客户端连接到 (1)
- 本地 (1) 流量在客户端 (2) 网络上的目标位置
当远程 ssh 客户端连接到本地 ssh 服务器时,我想要将流量从本地系统转发到客户端系统网络上的另一个位置。
例如,如果我对端口 80 进行转发,那么客户端通过 ssh 连接后,指向端口 80 的本地流量将被重定向到上面的 (3)。
如果可能的话,建议使用能够更轻松地支持此功能的 ssh 客户端,或者仅限这种类型的设置命令行?
谢谢!
答案1
其中的第一部分——创建隧道——可以通过 ssh 客户端软件完成。
在标准命令行 ssh 客户端中(我使用的是 Mac,但相信此行为与 unix/linux 版本相匹配),用法指定“ -R [bind_address:]port:host:hostport
”表示从服务器转发到客户端的端口(而-L
从客户端转发到服务器)。
例如,如果您想将远程 ssh 服务器上的端口 80 转发到客户端计算机可以通过 访问的本地 Web 服务器http://localserver:80/
,则可以使用额外的命令行参数 进行连接-R 80:localserver:80
。
根据客户端计算机操作系统,将有各种其他选项用于设置。如果您使用的是任何基于 unix 的操作系统,我建议您使用上述选项,或者如果您使用的是 Windows,PuTTY 能够设置这种隧道(设置 / SSH / 隧道 - 选择“远程”而不是“本地”)。
一旦隧道建立,任何与 ssh 服务器处于同一网络的人都可以连接到客户端网络上的 Web 服务器。但是,他们无法通过其真实 IP 连接到它 - 他们必须连接到远程服务器,http://sshserver:80/
然后将流量转发到远程服务器,然后返回响应。
如果您希望能够通过相同的 URL 访问相同的服务器,则需要在 ssh 服务器的网络中添加匹配的 DNS 条目,指向 ssh 服务器的 IP 地址。当 ssh 客户端断开连接时,它将无法访问。
另外,请注意 ssh 服务器只有一个端口 80,因此您一次只能对一个远程服务器执行此操作。如果您想绕过该限制,则必须为 ssh 服务器分配多个 IP,并在 ssh 命令行上使用可选的“绑定地址”参数,或者您可以通过在 ssh 命令中选择不同的远程端口将服务器分散到不同的端口(通常是 8080、8081 等)——Web 服务器本身仍然可以使用端口 80。