天天看点

linux下ssh端口转发

假设现在有两台服务器client1,client2,他们直接不能直接相互通信,但是他们均能连接上第三台服务器balance,我们可以在client1,client2和balance三台机器之间建立ssh隧道来让client1和client2实现通信。

ssh端口转发有三种实现方式:本地转发,远程转发,和动态转发。

定义简称:发起请求的服务器(简称"startServer"),最终目标服务器(简称“targetServer”),连接startServer和targetServer的服务器(简称“bridgeServer”)

一. 准备工作

实现目标: startServer能访问bridgeServer但不能直接访问targetServer,bridgeServer可以访问targetServer;startServer通过bridgeServer做端口转发可以间接访问targetServer。

1.1 服务器IP:

startServer:服务器guangzhou-IP  106.55.241.99

targetServer:服务器new2-IP 106.55.171.53

bridgeServer:服务器balance-IP 124.156.143.168

1.2 服务器间通信状态

 服务器guangzhou:

 服务器balance:

 现在上new2防火墙添加禁止guangzhou访问并重启firewalld服务:

 登陆guangzhou服务器执行命令: telnet 106.55.171.53 22 ,结果无响应,说明防火墙禁止访问设置成功。

 目前guangzhou无法直连new2,可连接balance,balance可连接new2.

linux下ssh端口转发

二. 配置端口转发

2.1 本地转发

命令:-L localport:remotehost:remotehostport sshserver

说明:localport          本机开启的端口号

         remotehost      最终连接机器的IP地址

         remotehostport             转发机器的端口号

         sshserver         转发机器的IP地址

新开窗口打开guangzhou服务器:

上面可见后面新开窗口通过访问9001端口可以连接上new2服务器。

2.2 远程转发

命令:-R sshserverport:remotehost:remotehostport sshserver

说明:sshserverport           被转发机器开启的端口号

         remotehost          最终连接机器的IP地址

         remotehostport         被转发机器的端口号

         sshserver                 被转发机器的IP地址

远程转发就是做了一层请求代理服务,将指定客户端IP和客户端端口的请求转发到指定第三方服务器IP和端口。

2.3动态转发

命令:-D localhost:localport -fN sshserver

以上通过设置guangzhou服务器9200端口转发已经可以正常请求new2服务器上的web服务。

三. 使用实践

假设guangzhou服务器访问new2服务器的mysql服务,mysql端口为3306,同之前一样new2防火墙增加IP禁止guangzhou访问。

以下是php实现的例子。

优点

缺点

本地转发

不用占用bridgeServer机器上新开端口(默认使用22端口)

占用startServer端口,bridgeServer的IP+端口,更换startServer后需要再次执行ssh命令

远程转发

不限制startServer的IP,bridgeServer执行一次可一直使用转发服务

需要bridgeServer持续提供服务的话要启用常住进程,占用bridgeServer机I/O资源

动态转发

不需要bridgeServer提供常住进程服务,无需bridgeServer和targetServer指定端口

需要startServer占用端口,更换startServer后需要再次执行ssh命令

总的来说,三种转发各有优缺点,本地转发和远程转发需要时刻保证ssh隧道可用,动态转发则不需要,可以按照自己需求设置即可。

至此,三种ssh端口转发方式实践完毕。

继续阅读