理论:
1、什么是反向连接?
反向连接是指主机A(受控端)主动连接主机B(控制端),在主机A和主机B之间建立一个远程连接,通过这个连
接主机B可以主动的向主机A发送一些请求。
2、为什么需要主机A主动去连接主机B呢?
这是因为主机A在局域网内,如果没有对主机A进行端口映射,对于主机B来说主机A是不可见的,如果在主机B这
边向主机A发送连接请求,这个请求是不可达的。而主机B有自己独立的IP,对于主机A来说是可见的,可以直接向
主机B请求连接。
3、SSH反向连接的过程
方法就是主机A主动去连接主机B,主机B响应主机A的连接请求,它们之间就建立了一个远程连接。然后主机B在
本地再创建一个本地连接,重定向到主机A和主机B刚才建立的远程连接上,之后对这个本地连接的操作都会反馈到
远程连接上去。整个过程类似于文件的DUP,这就在主机A和主机B之间建立了连接通道,此时对于主机B来说,主
机A已经是可见了。
连接流程如下:
3.1、主机A ssh客户端向主机B sshd服务端发送请求,建立远程连接。
3.2、主机B sshd服务端创建本地连接很远程连接的映射(反向连接通道)。
3.3、主机B ssh客户端向主机B sshd服务端的连接通道发送请求, 建立主机B ssh和主机A sshd的连接。
完成连接后,主机A对于主机B可见的形式就是存在于主机B的那个本地连接。
4、为什么需要在主机B对远程连接映射一个本地连接?
反向连接就是CS架构,不过是受控端主动向控制端请求连接,让它们之间的连接建立。传统的CS方式是可以解决
主机A和主机B之间的连接问题,但是那样主机A和主机B的连接方式并不灵活,两者之间能做的事情,只能是CS之际
协议规定的事情。在主机B上建立了主机A的连接映射后, 对于主机B来说主机A已经不是局域网内那台不可见的主
机,主机A已经是存在主机B的一台可见主机,这样就消除了局域网和广域网的阻碍。 主机A和主机B之间建立的那
个远程连接就是主机A和主机B的通道-“网线”。
实例:
一.通过公网跳转到内网服务器(适用于只有公网地址,对应服务器连接不到内网服务器)
服务器A:假定为124.207.1.1
服务器B : 假定为10.3.3.188 (内网服务器)
1.首先在B服务器主动连接公网服务器A。(建议最好安装autossh)
1 | autossh -M 5678 -R 1236:localhost:22 -N 服务器A用户名@服务器A的公网IP &
|
此时在服务器B本地会建立5678端口,在服务器A看到有127.0.0.1:1236的端口建立
没有autossh,可以使用如下命令
1 | ssh -f -N -R 1236:localhost:22 服务器A用户名@服务器A的公网IP
|
2.在公网服务器A对应用户名下进行连接操作,实现内网跳转
1 | ssh -p 1236 服务器A用户名@localhost
|
二.在公网如何跳转到内网web服务(适用于只有公网地址,对应服务器连接不到内网服务器)
在前面的两个基础上加上第三步
3.用balance实现端口映射
1 | balance 15480 127.0.0.1:1236
|
4.外网IP访问公网服务器IP和端口15480即可访问内网web服务。
本文出自 “jayson天下” 博客,请务必保留此出处http://jaysonzhang.blog.51cto.com/3163584/1213679