对于 Secure Shell (SSH)[1] 这样的网络协议来说,其主要职责就是在终端模式下访问一个远程系统。因为 SSH 协议对传输数据进行了加密,所以通过它在远端系统执行命令是安全的。此外,我们还可以在这种加密后的连接上通过创建隧道(端口转发)的方式,来实现两个不同终端间的互联。凭借这种方式,只要我们能通过 SSH 创建连接,就可以绕开防火墙或者端口禁用的限制。
这个话题在网络领域有大量的应用和讨论:
- Wikipedia: SSH Tunneling[2]
- O’Reilly: Using SSH Tunneling[3]
- Ssh.com: Tunneling Explained[4]
- Ssh.com: Port Forwarding[5]
- SecurityFocus: SSH Port Forwarding[6]
- Red Hat Magazine: SSH Port Forwarding[7]
我们在接下来的内容中并不讨论端口转发的细节,而是准备介绍一个如何使用 OpenSSH[8] 来完成 TCP 端口转发的速查表,其中包含了八种常见的场景。有些 SSH 客户端,比如 PuTTY[9],也允许通过界面配置的方式来实现端口转发。而我们着重关注的是通过 OpenSSH 来实现的的方式。
在下面的例子当中,我们假设环境中的网络划分为外部网络(network1)和内部网络(network2)两部分,并且这两个网络之间,只能在 externo1 与 interno1 之间通过 SSH 连接的方式来互相访问。外部网络的节点之间和内部网络的节点之间是完全联通的。
场景 1