2019年7月31日 / 1,526次阅读
SSH
SSH的端口转发,不管是本地还是远端,都与穿透防火墙有关系。本地端口转发,Local Port Forwarding,就是正面穿透防火墙。你在你自己的电脑上,不能访问防火墙内的网络,但是却可以通过SSH连接防火墙内的某台电脑。于是,这条SSH通道,就可以用来作为本地端口转发,让你实现穿透防火墙的效果。
我先画个图,对着图来说方便点:
SSH之本地端口转发
A在防火墙外,A上面的一个应用,需要访问B服务器上的某个端口,比如12345端口,但是有防火墙挡住了;
不过,幸运的是,A可以对B发起SSH连接,我们可以建立一个SSH本地端口转发隧道;
在A上执行这个命令 $ ssh -N -L 54321:localhost:12345 username@B
这个命令建立了一条SSH本地端口转发的隧道,界面会提示你输入username登录B的密码,如果没有异常,界面就阻塞在那里了,这是正常的;
命令参数解析:-L表示是Local Port Forwarding,-N表示不要打开B服务器的shell,54321:localhost:12345 username@B表示的含义是,在A电脑上访问A自己的54321号端口,就相当于通过B访问(B的)localhost的12345号端口;
然后,A上应用访问A的54321的数据,就会自动通过SSH的加密隧道发到B,然后B自动解密后,发给B自己的12345号端口。这样,A就实现了穿透防火墙到达B。
也许你不太喜欢A的SSH操作界面阻塞在那里了,我们可以这样:$ ssh -N -f -L 54321:localhost:12345 username@B
增加-f参数,让这个隧道进程在后台运行;
以上命令还默认的SSH连接B使用22号端口,如果不是默认ssh端口,还需要在最后使用-p参数;像这样:$ ssh -N -f -L 54321:localhost:12345 username@B -p ssh_port_of_B
如果A不是要访问B的端口,而是访问C呢?如下图:
SSH本地转发,A通过B访问C
A只能SSH到B,而B和C在一个局域网里面,A需要访问C的23456端口;
在A上创建本地端口转发,命令是 $ ssh -N -L 54321:ip_of_host_C:23456 username@B
这样,在A本地访问54321端口,就相当于通过B来访问C的23456号端口。
A穿透了防火墙,通过B访问C。命令行两个端口号中间的目的主机,是从B的视角来写的:访问B自己的某个端口,B看到的就是localhost,或127.0.0.1,访问C的时候,B看到的就是C的ip或域名!!
现在,我们在A上访问B和C,还有个问题,只能在A上使用localhost:54321来访问,能否让另一台能够连上A的电脑也访问呢?把A当成一个网关?答案是:可以的。
SSH本地端口转发,X通过A访问C
X与A在一个局域网,X不能ssh到B和C,只有A能ssh到B,B和C在另一个局域网;
现在,X想要访问C的33333端口;
我们可以在A上建立一条ssh本地端口转发的隧道,打通C的33333号端口,然后将这条隧道共享给X使用;
$ ssh -g -N -L 12345:ip_of_host_C:33333 username@B
多了一个-g参数(gateway),表示A把自己的12345端口作为网关;
这样,X通过访问ip_of_host_A:12345,就相当于在访问C的33333端口。
总结要点:
1, SSH隧道是一条加密隧道(本地转发,远端转发和Dynamic Port Forwarding),隧道建立成功之后,加密和解密自动进行;
2, 本地端口转发的目的地址和目的端口,是从SSH的对端的视角看出来的,不是从发起本地端口连接这一端的视角看;
3, 隧道不限于隧道两端的两台主机,两端的主机分别在两个局域网内,只有能建立ssh本地端口转发隧道,就相当于这两个局域网就打通了;
4, 可以隧道连接隧道,比如第1条隧道连接的远端主机的端口,又是另一条隧道的入口。(SSH的远端转发这篇里面有一个隧道连接隧道的case)
各位要自己多多测试验证。SSH是个很重要的工具,更多内容请参考本站SSH标签。
以上就是对SSH本地端口转发(Local Port Forwarding)的及介绍。
本文链接:https://www.maixj.net/ict/ssh-local-port-forwarding-22257
©Copyright 麦新杰 Since 2014 云上小悟独立博客版权所有 备案号:苏ICP备14045477号-1。云上小悟网站部分内容来源于网络,转载目的是为了整合信息,收藏学习,服务大家,有些转载内容也难以判断是否有侵权问题,如果侵犯了您的权益,请及时联系站长,我会立即删除。