理論:
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