直接跳轉到新的文章總結: http://www.jianshu.com/p/edc9c408d065html
有關ssh反向隧道的概念和用法詳情能夠google,這裏再也不細表,只是作一個實驗。前端
設想這樣一種場景: 在局域網中架設了一臺服務器,可是又沒有網關的配置權限(好比企業內部局域網內搭建的測試服務器,你又不是網管;好比校園網內部學生爲學習而練習搭建的服務器等等),同時還但願外網用戶能方便的訪問到我這臺內網服務器中,應該如何實現呢?nginx
幸運的是這個這個需求並很多見,已經有了一些優秀的解決方案,好比本文中即將提到的ssh tunnel
web
服務器在局域網,沒有配置路由器端口映射,想讓外網訪問到內網服務器。 此時外網有一個公網服務器,該服務器具備合法IP,但願藉助該服務器訪問到局域網,該服務器將做爲用戶前端服務器,外網用戶訪問這個服務器就能夠訪問到局域網內部服務器了。apache
如下涉及到外網服務器的IP所有打碼處理
瀏覽器
開始試驗,首先按照這個資料:http://blog.zjutoe.net/?p=95 , 來簡單作個小實驗。 virtualbox虛擬了一個debian,就照着資料提供的命令在debian的終端上敲autossh -M 5678 -NR 19999:localhost:22 root@myserver_ip
,輸入密碼後ssh就在前臺開始監聽端口了。服務器
進入外網服務器,看一下監聽端口: ssh
沒問題!確實在遠程服務器開放了一個19999端口,經過這個端口就實現了隧道,訪問這個端口實際就訪問了我內網服務器的22端口。顯然22端口是ssh的默認端口,咱們如今就來試一下: socket
Very Good!成功了!在沒有路由器端口映射的狀況下,成功讓外網訪問到了內網服務器!學習
接下來咱們繼續實現咱們的需求,在虛擬機上的debian搭建webserver。 使用apache作webserver,IP爲192.168.1.106,爲了讓實驗明顯點,編輯了一下index.html。 局域網內部打開瀏覽器,訪問192.168.1.106
如今要讓外網訪問到這個網站,其實我不怎麼會搭建socket-4a代理,只好把上面的命令改一下了,讓外網服務器上19999映射到內網服務器上80端口。(其實用socket代理效果會更好,不須要再這麼轉端口了) 在debian服務器上把命令改爲autossh -M 5678 -NR 19999:localhost:80 root@myserver_ip
此次在外網服務器測試一下,終端下用links瀏覽器訪問一下看看
Good job! 發現確實OK,注意用的是http-proxy,socket-proxy須要改一些東西。 此時理論上只要用這臺服務器作代理服務器,那麼外網用戶就能夠訪問到內網服務器了。
可是外網用戶可能仍是以爲本身去配置代理服務器太麻煩了,喜歡更加簡單的操做。 那麼咱們能夠用apache(或者nginx等其餘webserver)的mod_proxy模塊,把apache配置成前端代理服務器,用戶訪問本機的apache就至關於訪問了內網服務器,這個也很簡單,打開apache的mod_proxy模塊,在配置文件中寫上http代理的配置便可。 我是這麼寫的:
按照這個配置,用戶訪問/proxy實際就是訪問的內網服務器(可根據須要調整),其實是不是這樣呢? 火燒眉毛的打開本機瀏覽器,訪問一下/proxy
Nice!!!徹底一致!! 至此完成所有實驗!