日期:2014-05-16 浏览次数:20769 次
在开发过程中,因为网络环境的原因,需要通过某一台服务器访问其他服务器的一些端口,这里就涉及到端口映射的问题。
?
当前自己现状及需求
1.本地机器window系统,有CRT工具
2.本地通过CRT可以通过Internet访问到内网中的机器172.18.1.34
3.但是本地通过CRT访问不到内网中的机器172.18.1.144
?
需求是想在本地访问172.18.1.144上web应用对应端口是80
?
解决过程:
1.通过CRT登陆到172.18.1.34 机器上执行:ssh -C -f -N -g -L 8080:127.0.0.1:80 172.18.1.144
?? 目的 把144的80端口映射到 34的8080上
?
2.在本地的CRT上做端口转发,把34上的8080端口映射到本地的8080上
??
????
?
?
?
端口转发概述
让我们先来了解一下端口转发的概念吧。我们知道,SSH 会自动加密和解密所有 SSH 客户端与服务端之间的网络数据。但是,SSH 还同时提供了一个非常有用的功能,这就是端口转发。它能够将其他 TCP 端口的网络数据通过 SSH 链接来转发,并且自动提供了相应的加密及解密服务。这一过程有时也被叫做“隧道”(tunneling),这是因为 SSH 为其他 TCP 链接提供了一个安全的通道来进行传输而得名。例如,Telnet,SMTP,LDAP 这些 TCP 应用均能够从中得益,避免了用户名,密码以及隐私信息的明文传输。而与此同时,如果您工作环境中的防火墙限制了一些网络端口的使用,但是允许 SSH 的连接,那么也是能够通过将 TCP 端口转发来使用 SSH 进行通讯。总的来说 SSH 端口转发能够提供两大功能:
图 1. SSH 端口转发
?
如上图所示,使用了端口转发之后,TCP 端口 A 与 B 之间现在并不直接通讯,而是转发到了 SSH 客户端及服务端来通讯,从而自动实现了数据加密并同时绕过了防火墙的限制。
回页首
第二部分 本地转发与远程转发
本地转发实例分析
我们先来看第一个例子,在实验室里有一台 LDAP 服务器(LdapServerHost),但是限制了只有本机上部署的应用才能直接连接此 LDAP 服务器。如果我们由于调试或者测试的需要想临时从远程机器(LdapClientHost)直接连接到这个 LDAP 服务器 , 有什么方法能够实现呢?
答案无疑是本地端口转发了,它的命令格式是:
?
ssh -L <local port>:<remote host>:<remote port> <SSH hostname> |
在 LdapClientHost 上执行如下命令即可建立一个 SSH 的本地端口转发,例如:
?
$ ssh -L 7001:localhost:389 LdapServerHost |
图 2. 本地端口转发
?
这里需要注意的是本例中我们选择了 7001 端口作为本地的监听端口,在选择端口号时要注意非管理员帐号是无权绑定 1-1023 端口的,所以一般是选用一个 1024-65535 之间的并且尚未使用的端口号即可。
然后我们可以将远程机器(LdapClientHost)上的应用直接配置到本机的 7001 端口上(而不是 LDAP 服务器的 389 端口上)。之后的数据流将会是下面这个样子:
我们可以看到,这整个流程应用并没有直接连接 LDAP 服务器,而是连接到了本地的一个监听端口,但是 SSH 端口转发完成了剩下的所有事情,加密,转发,解密,通讯。
这里有几个地方需要注意:
ssh -g -L <local port>:<remote host>:<remote port> <SSH hostname>
远程转发实例分析
我们来看第二个例子,这次假设由于网络或防火墙的原因我们不能用 SSH 直接从 LdapClientHost 连接到 LDAP 服务器(LdapServertHost),但是反向连接却是被允许的。那此时我们的选择自然就是远程端口转发了。
它的命令格式是:
?
ss |