介绍隧道和端口转发的情况,即SSH隧道、Rinetd、ngrok

853 阅读4分钟

网络流量从一个端口重定向到另一个端口的过程被称为端口转发或隧道。端口转发有许多优点,即它可以用于两个系统之间的安全通信。它还可以用于在一个端口被封锁但需要在本地或远程访问的情况下不可能进行的通信。本文简要介绍了使用不同技术在本地和远程进行隧道和端口转发的情况,即SSH隧道、Rinetd、ngrok。

隧道技术是如何工作的?

隧道技术是一种保护不同服务的机制,它使这些服务不能从网络外直接访问。它涉及在一个端口接收流量并将其转发到另一个端口,可以在本地或远程进行。隧道是一种端口重定向技术,在SSH协议中使用加密隧道。隧道是两个网络设备之间使用SSH连接的一种通信方式。SSH抓取从客户端到主机的服务请求,然后创建一个连接,将请求传送到连接的另一端。在SSH连接的另一端,请求被解密后发送到远程系统的应用服务器。

Rinetd

Rinetd是一个允许用户将网络流量从一个端口转发到另一个端口的工具。它是最常见的端口转发工具之一,因为它易于使用。

例如,考虑这样一种情况:由于办公室系统(192.168.0.15)除80端口外的所有出站流量被封锁,导致3389端口的RDP服务器(192.168.0.10)无法访问,而且还有另一个家庭系统(192.168.0.20)。

在Rinetd的帮助下,这种情况可以利用家庭系统作为一个代理,这样它将接收来自一个IP地址和端口的连接,并将其转发给另一个IP地址和端口号。在家庭系统上,配置rinetd配置文件如下。

#bindaddress #bindport #connectaddress #connectport

192.168.0.20 80 192.168.0.10 3389

在办公室的机器上(192.168.0.15),尝试在IP:端口(192.168.0.20:80)连接到RDP。家庭系统将收到(192.168.0.20:80)的连接,但由于端口转发,它将连接转发给端口3389的RDP服务器(192.168.0.10)。因此,即使所有的出站流量被阻断,RDP服务器也可以从办公室系统中访问。

Ngrok

Ngrok提供实时同步一个人的本地主机上正在运行的内容。它允许在NAT和防火墙后面的本地主机上运行的网站通过安全隧道被公众访问。假设我们正在开发一个网站,并在我们的本地主机上测试它,端口为4444。我们想和别人分享它,以达到演示的目的。我们可以通过GitHub和其他方法分享它。

但是它需要很长的时间来部署,而且变化不会在所有地方实时发生。有了ngrok,本地主机的任何变化都会在每个人的终端发送更新。

例如,运行在localhost:8080上的网站可以通过一个URL链接让任何人公开访问。使用下面的命令来生成一个公共URL。

ubuntu@ubuntu:~$./ngrok http 8080

SSH隧道

SSH隧道是将端口从客户端系统隧道到服务器系统的最佳方式,反之亦然。要使用SSH隧道端口,客户和服务器都应该设置SSH。有三种类型的SSH隧道,即本地端口转发,远程端口转发,动态端口转发。

本地端口转发

本地端口转发是一种使远程资源在本地可用的技术。这些资源可能被禁止使用或被置于防火墙之后,以限制本地访问。

语法

ubuntu@ubuntu:~$ ssh -L <local port>:<remote address>:<remote port> username@host.com

考虑这样一个场景:远程桌面需要从办公室系统集成到家庭电脑中。但由于安全原因,3389端口(RDP)被封锁了。为了访问RDP端口,使用SSH隧道将封锁的端口转发到不同的解封端口号。这可以通过使用以下命令来完成。

ubuntu@ubuntu:~$ ssh -L 4444:192.168.0.2:3389 home@192.168.0.2

现在,在RDP配置中,可以用4444端口号一栏写上localhost来代替IP或主机名,以访问家庭RDP。

远程端口转发

远程端口转发是一种远程访问本地资源的技术。比方说,一个公司希望员工在办公室工作,它通过阻止RDP端口(3389)来限制办公系统的远程访问。在这种情况下,远程端口转发可以派上用场。在办公室系统上,使用以下命令。

ubuntu@ubuntu:~$ ssh -R 4444:localhost:3389 home@192.168.0.2

这将建立一个连接。现在,通过在RDP配置中输入localhost来代替IP或主机名,并在4444端口号一栏中输入,就可以从家庭系统中使用RDP访问工作计算机。

动态端口转发

动态端口转发允许人们对多个端口进行隧道连接。在这种类型的转发中,SSH就像一个代理服务器。比方说,由于防火墙的限制,员工可以从办公室系统访问80端口的网络。动态端口转发可以帮助从家里用80端口上网。使用下面的ssh命令。

ubuntu@ubuntu:~$ ssh -D 4444 home@192.168.0.2

上述命令创建了一个socks代理,这需要网络浏览器的配置。对于Firefox,进入设置,点击 "Open Proxy Settings"。在socks代理一栏中输入localhost和指定的端口号。

每当在URL栏中输入地址时,它就会通过SSH隧道发送到指定的端口号,并在我们的家庭系统中接收。

总结

隧道和端口转发可以用来安全地跨越防火墙访问网络流量。SSH隧道可以确保传输中的数据通过一个安全的隧道,这样就不会被窃听或捕获。它还允许你建立VPN连接,并匿名或从一个安全或因防火墙而无法访问的地方访问数据。文章讨论了需要使用一种机制的不同场景,这种机制有助于通过Rinetd、Ngrok和SSH隧道在本地或远程访问所需资源。