如何通过SSH隧道从外网远程访问内网网站?

如何通过SSH隧道从外网远程访问内网网站?

我最近在家里的内部可访问系统上安装了 FreeIPA。我想从 LAN 外部的网络管理此 Web UI,但同时,我不想将此 Web UI 暴露给公共互联网。有没有办法通过 SSH 隧道访问它?

笔记:ssh我熟悉使用& 它的开关设置隧道,-L如下所示:

$ ssh -L 12345:ipa.local.net:80 mysshserver

然而,这种方法在这种情况下不起作用,因为访问 FreeIPA 要求您使用服务器的实际主机名,并且能够使用端口 443 和 80 访问 Web UI。

除此之外还有其他方法可以实现这一目标吗ssh -L

答案1

执行 SSH 隧道可能会与所有术语有点混淆,但有一个补充功能-L,它使您能够通过在本地分配套接字(而不是单个端口)来“动态”分配端口。

从手册页:

-D [bind_address:]port
    Specifies a local ``dynamic'' application-level port forwarding.  This works by 
    allocating a socket to listen to port on the local side, optionally bound to the 
    specified bind_address.  Whenever a connection is made to this port, the connection 
    is forwarded over the secure channel, and the application protocol is then used to 
    determine where to connect to from the remote machine.  Currently the SOCKS4 and 
    SOCKS5 protocols are supported, and ssh will act as a SOCKS server.  Only root 
    can forward privileged ports. Dynamic port forwardings can also be specified in 
    the configuration file.

通过分配套接字,所有流量都可以集中到远程站点,包括 DNS 查询。

如何使用它

对于初学者,您需要打开与 LAN 的连接(通过互联网上的公共 IP 地址),如下所示:

$ ssh -D 1234 myserver

笔记:这假设您能够通过 SSH 连接到可通过公共互联网 IP 地址访问的服务器。

设置完成后,在另一个终端中,您需要配置 Web 浏览器以使用此隧道。笔记:这种类型的隧道为您提供一个套接字,因此要连接到它,您需要告诉您的网络浏览器通过此套接字代理其所有流量。这通常显示为SOCKS 或 SOCKS v5 连接类型为您的代理。

一个例子

在此示例中,我将展示如何通过 CLI 使用 Chromium 来完成此操作:

$ ./Chromium --proxy-server="socks5://localhost:1234"

在这里,我启动 Chromium 并将其指向我们之前在本地主机端口 1234 上配置的 SSH 隧道。有了这个,如果我随后尝试访问在我的 LAN 上配置的服务器的 URL,我会被定向到它:

SS#1

使用其他浏览器进行代理

所有主要浏览器都提供此功能,并且在其他 SE 网站(例如 SuperUser)上也有相当广泛的介绍:

您甚至可以利用各种浏览器的扩展,这些扩展允许您有选择地仅代理某些流量,同时允许您通过正常的互联网连接路由其他所有流量。

例如,您可以使用ProxySwitchy! Chrome 可以做到这一点:

   SS#2

   SS#3

相关内容