本地和远程IP转发有什么区别?


10

两者在功能上有何不同?我对此有些困惑。

本地转发使远程端口在本地可用。

远程转发使本地端口远程可用。

但是,这种“可用性”将在两个方向上起作用……或者是吗?

例如以下内容(从主机“ home”发出)

ssh -R 1234:localhost:2345 user@work

这将在work :: 1234和home :: 2345之间建立安全通道,对吗?

如果我在一端放入任何东西,它将在另一端出来。

但是,然后我可以通过主持人“ work”的以下调用来实现相同目的:

ssh -L 1234:localhost:2345 user@home

因此,唯一的区别是我从何处调用它,对吗?


在您的示例中,功能没有区别。通过交换目标主机,您可以自我补偿使用相反的参数。如果您没有这样做,而是从1个主机中使用了这两个主机,那么这将触发完全相反的行为。
XXL

Answers:


2

实际的主要区别是,如果将两台计算机A和B连接在一起,并且B位于您无法控制的防火墙或NAT路由器后面,并且它阻止传入。.您坐在A上。您无法获得A连接到B。但是B不会阻止传出。。因此,您需要B连接到A。

-补充说明-

发问者理解的以上内容意味着本地转发和远程转发之间的主要实际差异。分别使用ssh -L和ssh -R。我没有评论他给出的特定示例命令,他在其中切换-L和-R以及他连接到哪个sshd服务器。但是,现在我将尝试对此进行评论。从常规客户端和常规服务器的角度来看,使用他给出的ssh命令,似乎没有什么区别,因为它没有说“啊,这是ssh客户端,这是ssh服务器。”“它不知道ssh,并且ssh的客户端/服务器方面与常规客户端和常规服务器无关且未知。他们只是在乎谁在听,从他们的角度看,它看起来一样。工作计算机正在监听,并且在1234。他们不会 请注意,在一种情况下,它是sshd.exe ssh服务器,在另一种情况下,它是ssh.exe,即ssh客户端。顺便说一下,ssh客户端所在的位置被认为是本地的。


好的,谢谢,这完全回答了我的问题!:-)
nandaloo

@nandaloo我认为这称为反向ssh隧道。如果我们使用组合的术语发起者和侦听器(因为这些术语比客户端和服务器的含糊性要小)。这个想法是,您拥有常规的启动器和侦听器以及ssh启动器和侦听器。您无法选择常规启动程序和侦听器的位置。例如,HTTP服务器(常规侦听器)在B上。B在防火墙后面。具有HTTP客户端(常规启动器)。您将SSH启动器放在B上。通过反向隧道可以看到SSH启动器和侦听器在与常规启动器和侦听器相对的计算机上。
barlop 2011年

10

是的,如果我正确理解,从a到b的本地端口转发应该与从b到a的远程端口转发完全相同(反之亦然)。从a到b的传出隧道(从a观察)应等于从a到b的传出隧道(从b观察)。

本地端口转发会创建传出隧道,该隧道可用于将公用Internet计算机带到本地计算机。本地用户可以访问本地主机上的remote host:port组合,因为本地(客户端)主机上的给定端口被转发到远程端上的给定主机和端口:

ssh -L local_port:remote_host:remote_port user@hostname

远程端口转发会创建一个传入隧道,该隧道可用于将本地计算机带入公共Internet。互联网用户可以访问远程主机上的某个本地host:port组合。远程(服务器)主机上的给定端口将转发到本地端的给定主机和端口:

ssh -R local_port:remote_host:remote_port user@hostname

1
我想除了语法外,另一个区别是侦听用户连接的过程。ssh.exe -L告诉ssh.exe监听(除了已经建立的传出连接之外)。ssh.exe -R告诉sshd.exe监听(除了已经在监听之外)。
barlop

@ 0x4a6f4672,什么0x4a6f4672意思?
和平者

@Pacerier只是我的缩写“ JoFr”以十六进制表示法:-)
0x4a6f4672

3

使用本地端口转发,您(客户端)打开计算机上的侦听套接字,并将您的应用程序级别协议客户端连接到此套接字。现在,连接已通过SSH转发到服务器。服务器连接到远程主机,并将数据从协议客户端传输到最终目标。

通过远程端口转发,服务器将在服务器主机上打开侦听套接字。某些远程应用程序连接到该主机并发送信息,该信息将传输到您的客户端计算机。在这里,与最终目的地(在计算机或网络上运行的某些应用程序级别协议服务器)建立连接,并且数据从远程应用程序传输到最终目的地。


谢谢,这使端口转发的工作方式更加清晰。感谢您提出问题-我什至不知道这个超级用户网站:-)
nandaloo 2011年

1

通过一些小例子可以最好地理解这一点。在这些示例中,连接的结构如下:

本地服务器-(LAN)-终端-----(SSH,通常通过Internet)-----隧道端点-(LAN)-远程计算机

如果要隧道连接到某个ssh访问的隧道端点可以访问的特定远程计算机/端口,则可以使用本地端口转发。Therby,也可以在您自己的终端上本地访问该远程计算机的端口,即http:// localhost:terminal_port /。

使用以下语法可以做到这一点:

ssh -L terminal_port:remote_machine_ip:remote_service_port -p tunnel_endpoint_ssh_port ssh-login@tunnel_endpoint_ip

如果要启用ANYONE(!) remote(可以访问隧道端点的侦听端口以能够远程访问本地LAN中的ip /端口,则可以使用远程端口转发。到本地服务器,似乎是由终端启动了与远程计算机的连接。

语法为:

ssh -R tunnel_endpoint_listen_port:local_server_ip:local_server_port -p tunnel_endpoint_ssh_port ssh-login@tunnel_endpoint_ip

0

socat的手册页很好地阐明了这一点。是的,我知道ssh和socat是完全不同的两件事-但是socat的文档非常好。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.