本地/远程/动态 SSH 隧道之间有什么区别?

Lan*_*nes 32 ssh-tunnel

在 Putty 中,有三种隧道选项:

在此处输入图片说明

有人可以解释一下它们之间有什么区别吗?

jsc*_*ott 27

来自puTTY 文档,特别是4.23 隧道面板部分:

设置“本地”或“远程”单选按钮之一,具体取决于您是要将本地端口转发到远程目标(“本地”)还是将​​远程端口转发到本地目标(“远程”)。或者,如果您希望 PuTTY 在本地端口上提供本地 SOCKS 4/4A/5 代理,请选择“动态”(请注意,此代理仅支持 TCP 连接;SSH 协议不支持转发 UDP)。

  • 本地——将本地端口转发到远程主机。
  • 远程——将远程端口转发到本地主机。
  • 动态 - 作为SOCKS 代理。这需要连接到它的软件的特殊支持,但是目标地址是在运行时动态获取的,而不是预先固定的。

  • 如果这个答案让我更好地了解 Dynamic 的含义,我肯定会对此表示赞同。“SOCKS 4/4A/5 代理”对我来说没有任何意义。虽然我确定我可以谷歌它。“动态”是否可能双向前进? (7认同)

小智 27

jscott 的答案是正确的,但是在阅读之后,我仍然不完全清楚何时应该使用本地以及何时使用远程。所以我进一步研究,我在这里找到了答案:

使用当地如果有,可以从远程计算机来达到的机器上运行的服务,并希望直接从本地机器访问它。设置隧道后,您将能够使用本地主机 IP (127.0.0.1) 访问服务

使用遥控器,如果你有一个可以从本地机器上达到了一个服务,你需要将其提供给远程计算机。它会在您使用 SSH 登录的机器上打开侦听套接字。

动态类似于本地,但在客户端,它的行为类似于 SOCKS 代理。如果您需要连接需要 SOCKS 转发的软件,请使用它。

  • 具体来说,远程打开您使用 SSH 登录的机器上的侦听套接字。 (3认同)

eri*_*rik 6

我画了一些草图

键入 ssh 隧道命令的机器(或在您的情况下:启动带隧道的腻子)称为»your host«

从本地开始的 ssh 隧道


从远程开始的 ssh 隧道

静态(-L 本地-R 远程选项)

  1. 当地的: -L Specifies that the given port on the local (client) host is to be forwarded to the given host and port on the remote side.

ssh -L sourcePort:forwardToHost:onPort connectToHost意思是:用 ssh 连接到connectToHost,并将所有连接尝试转发到机器上称为的本地 sourcePort端口onPort,该端口forwardToHost可以从connectToHost机器访问。

  1. 偏僻的: -R Specifies that the given port on the remote (server) host is to be forwarded to the given host and port on the local side.

ssh -R sourcePort:forwardToHost:onPort connectToHost表示:使用 ssh 连接到connectToHost,并将所有连接尝试转发到名为 的机器上的远程 sourcePort端口onPort,该端口forwardToHost可以从您的本地机器访问。

动态(选项-D

-D类似于-L(本地),但不是转发给一个且只有一个特定的远程主机和端口,SSH 充当远程主机的SOCKS 代理。你使用隧道的程序需要支持socks代理。或者你需要用一些技巧来帮助它(见下面的例子)。

Socks 代理有什么作用?它接受您的所有请求并将其动态转发到远程主机和端口,这是原始程序想要的(参见下面的示例)。

-D(动态/袜子)的用法示例

如果您想通过隧道传输浏览器流量(例如使用 Firefox),您不仅要访问一个网站(远程主机和端口),还要在 www 中自由冲浪。所以你需要一个动态隧道,一个socks代理。

在您的计算机(您的主机)上,您执行以下操作:

ssh -D 5000 remotehost   # or the equivalent option "dynamic" with putty
Run Code Online (Sandbox Code Playgroud)

火狐流量隧道

为此,您可以编辑您的 Firefox 配置,以便您的浏览器使用您的 socks 代理。在 Firefox 地址栏中输入:

about:config
Run Code Online (Sandbox Code Playgroud)

现在编辑以下值:

network.proxy.socks             string localhost
network.proxy.socks_port        integer 5000
network.proxy.socks_remote_dns  boolean true
network.proxy.type              integer 1   (0 ist default)
media.peerconnection.enabled    boolean false (true ist default)
Run Code Online (Sandbox Code Playgroud)

您现在可以在互联网上冲浪,而陌生地方的任何人都不知道您在做什么。

更一般:将tsocks应用程序与文件一起使用/etc/tsocks.conf

配置文件的内容:

local = 192.168.1.0/255.255.255.0   # no proxy for local network
server = localhost    # proxy-server (your host)
server_type = 5       # socks5
server_port = 5000
Run Code Online (Sandbox Code Playgroud)

您现在可以使用前面的 tsocks 启动程序,以便它使用socks 代理。

tsocks thunderbird
tsocks mplayer -playlist http://bassdrive.com/bassdrive.m3u
Run Code Online (Sandbox Code Playgroud)

卷曲

易于使用 curl:

ALL_PROXY="socks5h://localhost:5000" curl http://blabbla.abc
Run Code Online (Sandbox Code Playgroud)

要不就

curl --proxy socks5h://localhost:5000 http://blabbla.abc
Run Code Online (Sandbox Code Playgroud)

结合ALL_PROXYtsocks

wget需要tsocks,因为wget不支持代理。如果你两者都做,你是安全的(大部分):scriptwill usetsocksALL_PROXYvariable:

ALL_PROXY="socks5h://localhost:5000" tsocks script
Run Code Online (Sandbox Code Playgroud)

对于 youtube-dl

youtube-dl --proxy socks5://127.0.0.1:5000 http://blaaaa.bla
Run Code Online (Sandbox Code Playgroud)

使用 Putty 进行设置(本地转发示例)

启动 Putty 并输入您常用的连接设置(主机名或 IP 地址) 在左侧的树中,导航到

联系 ?SSH ? 隧道

并使用源端口和目标创建一个新的本地隧道。123localhost:456

不要忘记点击添加

然后导航回会话并单击保存以保留您的设置以供下次使用。现在您可以使用保存的连接登录到您的服务器,成功登录后,每次连接到123主机上的端口时,您实际上都会连接到456服务器上的端口。

用腻子创建前向隧道

  • 我通常讨厌旧帖子的新答案,但这绝对是极好的。 (2认同)