SSH端⼝转发的妙⽤
因为公司的外⽹安装有⾏为管理器,但是⾏为管理器的证书⼜⽆法在linux上验证,导致笔者的linux以及linux虚拟机⽆法连接外⽹。于是乎,
笔者就来使⽤SSH端⼝转发来解决。SSH能够将其他TCP端⼝的⽹络数据通SSH链接来转发,并且⾃动提供了相应的加密及解密服务,也被叫
积分制隧道"(tunneling)。
做"隧道
笔者以前在公司打开虚拟机都是使⽤"仅主机(Host-Only)⽹络",只能宿主机访问虚拟机,虚拟机⽆法与外部⽹络通信,更别说上⽹了。今天突
玻璃杯十大品牌⽹络地址转换可以实现上⽹功能,以前只知道NAT只能单向访问,虚拟机可以通过⽹络访问到其他主机,但没有测试过可以上⽹。关于⼏然发现⽹络地址转换
个visualbox的⽹络设置,请参考笔者的⽂章-Docker应⽤:容器间通信与Mariadb数据库主从复制。上⽹功能实现,但是虚拟机并不真实存在于⽹
络中,主机与⽹络中的任何机器都不能查看和访问到虚拟机的存在,宿主机⽆法访问虚拟机,使⽤便利性会⼤打折扣。SSH端⼝转发可以解决这
个问题,笔者配置完后感觉SSH端⼝转发真的很神奇!
那就来设置visualbox虚拟机通过NAT上⽹,并且设置端⼝转发来远程访问,两全其美。
Network Address Translation。
1、虚拟机连接⽅式:⽹络地址转换Network Address Translation。
2、端⼝转发(F),实现宿主机访问虚拟机功能。
3、端⼝转发规则,笔者将虚拟机的呃2端⼝转发到宿主机的2222端⼝。
4、windows上SSH远程虚拟机。
ssh -p 2222 myubuntu@mywsl
*************************.15.253
*************************.15.253
需要注意的是ssh需要指定宿主机端⼝号2222,myubuntu为虚拟机的⽤户名,mywsl为宿主机windows的主机名,或者可以写成IP地
192.168.15.253。所以,⽤户名和IP地址不是同⼀个电脑的⽤户名和IP地址。笔者发现端⼝转发时连接认证⽐不转发时要慢很多,但是连接址192.168.15.253天子岭
上后就正常了。
我们再来看看SSH端⼝转发模式。
SSH有三种端⼝转发模式,即本地端⼝转发Local Port Forwarding,远程端⼝转发Remote Port Forwarding以及动态端⼝转发Dynamic Port Forwarding 。
关于/etc/ssh/sshd_config配置⽂件中,需要开启相关参数,AllowTcpForwarding是允许端⼝转发,AllowAgentForwarding允许进⾏代理转发,GatewayPorts允许远程主机连接本地的转发端⼝。
#AllowAgentForwarding yes
#AllowTcpForwarding yes
女孩#GatewayPorts no
1、本地端⼝转发Local Port Forwarding
格式:ssh -L localport:remotehost:remotehostport sshrver
本地端⼝转发, 将发送到本地端⼝的请求,转发到⽬标端⼝,可以通过访问本地端⼝,来访问⽬标端⼝的服务。乡导
看看笔者的测试,ssh-Llocalhost:8111:localhost:**************************.15.253,将本地81111端⼝的请求转发到
192.168.15.253的⽬标端⼝80,即使http的端⼝。使⽤curl localhost:8111/test.html请求本地端⼝,就可以查看⽬标192.168.15.253上www⽬录下的test.html⽂件内容,就像本地有apache服务⼀样。
注意有⼏个选项:-f 后台启⽤;-N 不打开远程shell; -g 启⽤⽹关功能。
ps -ef查看进程,杀死端⼝转发进程,可以发现转发失败。
如果需要⼀直端⼝转发的话,就需要写个脚本加⼊到开机启动中,脚本内容为:nohup ssh -L localhost:8111:localhost:80 -fN
*********************.15.253>/dev/null2>&1,同时需要配置免密或者使⽤expect⼯具来实现⾃动化交互,这个就不具体阐述了,笔者以前的⽂章有rvice或systemctl设置开机启动,配置免密或使⽤expect⼯具的⽂章。为了⽅便,⼀个⼩脚本直接⾄于rc.local⾥⾯应该可以了。
2、远程端⼝转发Remote Port Forwarding
格式:ssh -R sshrverport:remotehost:remotehostport sshrver
远程端⼝转发,也叫反向端⼝转发,就是将发送到远程端⼝的请求,转发到⽬标端⼝。这样,就可以通过访问远程端⼝,来访问⽬标端⼝的服务。
笔者使⽤docker来测试,将mariadb数据库的3306端⼝映射到虚拟机3306端⼝。ssh远端端⼝转发则将远端3000端⼝转发到本地3306端⼝,那么在远端的win10上就可以使⽤端⼝3000来访问mariadb数据库。
在win10(192.168.15.253)上使⽤mysql -hlocalhost -uroot -p123456 -P3000来连接数据库成功。,就像访问本地mariadb数据库⼀样。
3、动态端⼝转发Dynamic Port Forwarding
格式:ssh -D localhost:localport sshrver
动态端⼝转发,可以将在本地主机发起的请求,转发到远程主机,⽽由远程主机去真正地发起请求。对于本地端⼝转发和远程端⼝转发,都存在两个⼀⼀对应的端⼝,动态端⼝转发的⽬标地址:⽬标端⼝是由发起的请求决定的。
动态端⼝转发:ssh-Dlocalhost:****************************.15.253管理情绪的方法
慕然回首
在本地发起的请求,需要由Socket代理,将发起的请求都会转发到2000端⼝。然后在windows10 设置
socks 代理,可以在设置代理⾥⾯设置,也可以在浏览器⾥⾯设置。
IE浏览器设置socks 代理:
win10系统设置 socks 代理:
在这⾥条件不具备,笔者就不测试动态端⼝转发了。
最后总结⼀下这三种端⼝转发模式的应⽤场景。
1、本地端⼝转发。作为跳板机或者堡垒机来完成数据包的转发。
英语计划表
2、远程端⼝转发。上⾯设置visualbox虚拟机通过NAT上⽹,并且设置端⼝转发来远程访问,即使虚拟机没有公⽹IP地址,那么需要远程端⼝转发来访问本地主机。
3、动态端⼝转发。笔者的公司⽹络的linux系统⽆法认证,那么可以通过动态端⼝转发,转发到使⽤其他可以访问外⽹的电脑。
囿于笔者⽔平有限,应⽤场景不⾜之处敬请指出。