在下面的示例中,我将如何将 SSH 隧道用于架构?
场景:我物理上登录到 Windows PC Local,并希望使用端口 3389 将桌面远程连接到 Windows PC Remote。Windows PC Local 和网络之间有防火墙 Linux 服务器只允许我从本地 PC SSH 到 Linux网络 A 上的服务器。是否可以在网络 A Linux 服务器上建立一条反向隧道到 Windows PC Remote?我认为必须建立 3 个或更多隧道并将其连接在一起才能完成此任务,但我不知道该怎么做或知道是否可能。
Windows PC Local Linux Server .-,( ),-. can ssh Linux Server Windows PC Remote
__| _ __| _ .-( )-.-----------------> .-,( ),-. __| _ __ _|
[__]|=|-----------[__]|=|---( Network A ) .-( )-. [__]|=|-------[__]|=|
/::/|_| /::/|_| '-( ).-' ( Network B )--/::/|_| /::/|_|
'-.( ).-' <----------------- '-( ).-'
can't ssh '-.( ).-'
实际上,您可以通过两台 Linux 服务器之间的单个 SSH 隧道来完成此操作,更具体地说,从网络 A 上的隧道到网络 B 上的隧道(它可以 SSH 的方向)。
假设您想将远程桌面连接到远程 Windows 机器(网络 B 一侧的机器),那么您需要一个直接的SSH 隧道。
(如果您想通过在网络 A 中的 Linux 服务器上启动的 SSH 连接将服务从网络 A 中的机器公开到网络 B 中的机器,则反向 SSH 隧道将是这样。)
要了解如何设置,让我们为所涉及的机器和接口分配一些 IP 地址和名称。否则,很难理解哪些确切的地址和名称去了哪里。
让我们将这些地址用于本地网络:
然后是远程网络的这些地址:
仅可视化两个 Linux 服务器之间的互连:
因此,为了创建一个允许您连接到远程 Windows 机器的 SSH 隧道,您需要这样做:
一个 SSH 连接已建立,
workstation7
您可以从 Windows 机器打开到默认端口的 RDP 连接linrouter4
,您将获得到remote76.lan
远程主机上 Windows 机器的转发连接。隧道是使用
-L
SSH 的标志配置的,它最多占用 4 个地址或端口,以冒号分隔。第一对指示在本地主机上接收连接的地址和端口。IP 地址必须是本地主机接口上配置的地址,否则主机将无法接收该地址的连接...我们
linrouter4
在本地网络中使用 's 地址,所以本地网络中的其他机器将能够访问该隧道。下一项是本地端口。我们使用默认端口 3389,因此我们的 RDP 客户端可以在默认端口上连接。如果您正在使用该端口配置多个 SSH 隧道或在该计算机上运行其他服务,您可能需要选择备用端口,在这种情况下,您必须重新配置您的 RDP 客户端以连接到非标准端口。对于这个简单的示例,我们使用默认端口绕过它。
最后一对地址和端口是
gateway1.lan
当连接到达另一端的隧道时我们的目标主机 ( ) 应该连接的地址和端口。remote76.lan
请注意,名称解析将在目标主机上进行,因此即使本地linrouter4
机器无法解析该名称,我们也可以使用名称。最后,我们有了远程端口,它还是默认的 3389。
然后,我们使用普通参数连接到远程主机,使用其外部地址 ( ) 并在必要时
b.example.net
指定用户名 ( )。myuser
也可以传递身份验证或其他设置所需的任何其他参数。该
-L
标志也可以只取 3 个项目而不是 4 个,在这种情况下,本地地址被跳过。例如,-L 3389:remote76.lan:3389
。但这只会在 localhost (127.0.0.1) 上公开它,这意味着它linrouter4
本身可以通过隧道打开连接,但不能打开连接到该机器的其他主机。(换句话说,我们需要完整的规范。)最后,请注意我们为远程主机使用了主机名,但我们也可以使用 IP。对于本地主机也是如此,我们可以使用名称而不是 IP,假设该机器将名称解析为内部 IP。
也可以工作:
-L 192.168.10.4:3389:172.24.10.76:3389
-L linrouter4:3389:remote76.lan:3389
此外,您可以
'*'
在本地使用让该主机接受任何接口上的连接:-L '*:3389:remote76.lan:3389'
. (请注意,您在使用时需要使用引号,*
因为 shell 可以将其解释为元字符。)使用*
并不理想,因为这意味着来自网络 A(互联网?)的访问可能能够使用 SSH 隧道到达远程网络中的受保护主机。使用明确的仅限内部地址绝对是一种更安全的配置(即使您可能将该隧道暴露给整个内部网络,除非您明确设置防火墙以仅允许特定主机。)