反向代理和內網穿透

概念

反向代理看上去看深奧,其實否則,只是由於漢語言文化的差別致使它看上去深奧。通常反派感受都比較厲害和神祕。web

要理解反向代理,咱們就不得不說一下正向代理。安全

正向代理 (Forward Proxy)

所謂正向代理,就是你們一般說的代理。打個通俗的比方,你想跟你舅舅借錢,但很差開口(或者你舅媽會設法阻攔),就跟你媽說。這時母親大人就是個正向代理。此時代理本質就是個橋的做用,這個橋讓你能和橋對面的人交換信息。服務器

正向代理是多對一的概念,例如你姐,你妹你能夠經過你媽去跟舅舅借錢,但舅舅只有一個舅舅。舅舅有可能並不知道究竟是誰真正在借錢,只知道錢給了你媽。微信

反向代理 (Reserve Proxy)

你們都有打客服電話的經歷,好比10086,通常上來就是個語音系統,轉接人工服務後嘟嘟嘟好幾聲纔有人接聽,說我是工號xxx,很高興爲你服務。這個客服總機號碼10086就是個反向代理,網絡

反向代理隱藏了真實的服務端,有可能有N個客服對應N個號碼,但你只須要記一個10086,它會平衡客服之間的壓力給你安排合適的人。app

反向代理是一對多的概念,恰好和正向代理反過來了。負載均衡

  • 正向代理代理的對象是客戶端
  • 反向代理代理的對象是服務端

反向代理最多見的做用就是負載均衡。好比你訪問baidu的域名後,baidu會根據你的ip地址和網絡狀況給你分配最快的服務器,這個分配服務器的服務器就是反向代理。ssh

反向代理還有一個場景就是內網穿透,由於服務對象是在內網裏,你須要經過代理才能訪問到。測試

內網穿透

從外網是沒辦法直接訪問到內網的資源的,由於內網是一個局域網不在一個網段,並且還有防火牆在。網站

1550826381553

這時候你弄個反向代理就能夠解決這個問題:

  • 內網服務器訪問代理服務器
  • 握手,創建通道
  • 外網用戶訪問代理,代理經過通道和內網通訊

1550848043738

舉一個具體例子,TeamViewer的服務端(外網)就是個反向代理,它須要和TeamViewer客戶端(內網)一直保持通訊,創建一個通道(TeamViewer ID)。當遠程鏈接這臺機器時,你須要登陸到TeamViewer服務器,而後經過代理通道(TeamViewer ID)和遠程機器鏈接。

一些反向代理服務

遠程鏈接內網機器的桌面服務是最多見的需求,有時候咱們但願作的是本身的機器上跑一些服務可以從外網訪問,好比demo,博客,甚至私有云等等。

TeamViewer和向日葵你們可能都知道,我說一些不同的。

frp

開源界最流行的反向代理之一,frp全稱FaskReverseProxy,它的目標是作最快速可靠的反向代理,用GO語言實現,在Github上正在快速迭代中。安裝和配置都很是簡單,只須要幾個命令就能夠完成。frp支持的客戶端很是豐富,樹莓派,路由器,安卓手機等等,可玩性很高。

frp服務可讓你本地的web項目提供給外網訪問,特別適合向別人展現你本機的web demo 以及調試一些遠程的API (好比微信公衆號,企業號的開發)。

FRP還能夠輕鬆代理TCP,HTTPS,SSH等等協議,你須要有一臺具備公網IP的機器,最好加一個域名。

ngrok

曾經是開源界反向代理軟件的老大,到2.0之後選擇閉源,最後開源的版本2016年後就沒有再更新,止於1.7。基於C語言實現,配置略複雜,不過聽說靈活性和穩定性超好。

ngrok也能夠代理常見的各類協議,本身搭建只能用早期的開源版本。或者選擇商業公司提供的收費服務,國內外能夠搜到不少提供NGROK服務的網站,可不可靠不太敢說,但真的不少。

這裏列舉一些知乎推薦過的,你也能夠經過ngrok這個關鍵字搜索到不少。

  • natapp.cn
  • 小米球
  • Sunny-Ngrok
  • echosite

dog-tunnel

翻譯過來就是狗洞吧,國人作的,基於GO語言開發,在GitHub上活躍度還不錯,有1k+的星星,有興趣能夠試一下。

serveo.net

無需註冊,無需配置,只須要 ssh 就行,沒有客戶端,支持多端口映射,支持自定義子域名,只要一行代碼。

ssh -R 80:localhost:3000 http://serveo.net

我試了一下,臨時用一下真的很棒!

寫在最後

內網服務原本就是比較敏感的,因此從數據安全的角度看我以爲仍是本身搭建代理服務更可靠。用不靠譜的服務有很大風險,還有可能很坑,很是坑。

好比nat123和花生殼,一步一步誘導你付費,協議,端口,流量,速度,域名每一個細節都要收費,還不一次說清楚,你付完錢才知道後面還要付錢的,別問我怎麼知道的。

更多討論,你也能夠去看知乎:https://www.zhihu.com/questio...

關於做者:

Toby Qin, Python 技術愛好者,目前從事測試開發相關工做,轉載請註明原文出處。

歡迎關注個人博客 https://betacat.online,你能夠到個人公衆號中去當吃瓜羣衆。

Betacat.online

相關文章
相關標籤/搜索