概述本文将介绍SSH隧道技术的一些小技巧,并给出一张网络拓扑图更好的说明它是干什么的。网络基础假设我的网络情况是这样一个简化的拓扑结构:图1:简化的网络拓扑结构那么这里有几种可能的操作:HomePC直接SSH到OfficePC从OfficePCSSH到HomePC同样从HomeDirectSSH从PC到VPSSSHfromOfficePCtoVPS类似的,SSHfromVPStoHome(Office)PC在这些场景中,最简单的实现是:SSHfromHomePCtoVPS,这也是我们平时最常用的操作。我们之所以能够轻松实现这个原理,唯一的原因是因为VPS有一个公网IP,我们可以直接从HomePC路由到VPS。相反,因为我们的HomePC没有公网IP,所以VPS无法直接SSH到我们的HomePC。那么这里会有一些同学有想法,那么我们家的PC能不能有公网IP呢?装了一次路由器后,如果PC直连ISP网络,能有公网IP吗?这个问题很复杂,答案可能取决于您的ISP。如果你提供网络给你,在以前的ADSL时代,提供公网IP基本是可以的。但是随着光纤的普及,即使你不使用路由器,你也不是直接参与ISP的骨干网,而是ISP的一个分路器,比如FTTB系列。所以这里让PC(路由器)有一个公网IP的想法并不普遍,即使有,ISP也可能会限制一些端口,所以用的不多。SSH隧道那么,终于进入本文的正题了,既然不能直接连接PC,能不能反过来让PC自己主动发起请求,这就是SSH隧道的原理:[root@liqiang.io]#ssh-qngfNTR9999:localhost:8888root@192.168.29.48命令行快速使用[root@liqiang.io]#cat~/.ssh/configHostjumpHostName10.0.0.102Port22UserrootIdentityFile/root/.ssh/id_rsaForwardAgentyesHost10.0.0。87HostName首先jusjumpHostName10.0.0.87zhProxy需要保证可以直接登录跳板机:10.0.0.102;10.0.0.87是通过跳板机10.0.0.102访问的;Tips反向隧道只监听localhost[root@liqiang.io]#cat/etc/ssh/sshd_configGatewayPorts=yesProxyUDP反向代理本机:[root@liqiang.io]#yuminstall-ync[root@liqiang.io]#mkfifo/tmp/fifo[root@liqiang.io]#nc-l-p1162/tmp/fifo这里的意思是监听本机1162端口的数据,然后发送数据以UDP的形式发送到localhost:1163。远程机器[root@liqiang.io]#mkfifo/tmp/fifo[root@liqiang.io]#nc-l-u-p1163/tmp/fifo这里表示监听本机1163端口UDP协议,然后通过TCP链接localhost:1162发送接收到的UDP流量。注意,命令必须先在本地执行,然后再去远程服务器执行,否则服务器会因为没有数据而无法正常运行;我在使用过程中遇到一个问题,这个方法只能接收一次UDP。第二次收不到成功;这是一个反向代理的例子,正向代理是相反的。
