远程办公何时了,网络打洞帮你搞
原創:小姐姐味道(微信公眾號ID:xjjdog),歡迎分享,轉載請保留出處。
最近,有位像詩一樣的朋友,充滿了羅曼蒂克一樣的墮落主義思想。他不想上班,不想工作,就想翹著腿躺在床上刷手機。作為又一個被優美的生活所摧殘的青年,我深刻理解他的想法,他愛上了遠程辦公。他的電腦在公司,人在家,可以用類似TeamView一類的軟件去做。另外,他還精通網絡打洞技術,能夠遠程控制很多網絡環境很復雜的機器。
什么叫打洞呢?其實就是內網穿透。
你可能有這樣的需求:
調試一些支付回調接口,但是又想在本地的Idea中接受請求進行debug;
家里有一臺性能非常霸道的機器,想要在上班時能夠連上它,做一些不可告人的操作
手里有一大批broiler chicken,但對方在各種防火墻之內,你想要集中控制它
廉價的遠程辦公
遠程控制手機打卡簽到!
給客戶做演示,懶得再搭建環境,想要直接訪問自己機器上的程序...
不要著急,你所能想到的這些,看完本篇文章,都可以搞定。而且,不需要你親自動手編碼。
這些需求,有的是正當的,有的是邪惡的,這也體現了技術的兩面性。工具在不同的人手里,會有不同的功效。比如到了xjjdog手里,它僅僅變成了一篇水文。
重回正題,為了讓你能夠上手應用這種內網穿透技術,你需要一臺能夠上網的云主機。要最便宜的那種就可以,它將作為我們的流量轉發中樞。
1. 這是什么原理?
我們當然要拿一個比較正當的用途,來說明一下它的基本原理。打洞方式有很多,我們只介紹一種最直觀、最簡單的(嚴格來說,下面的介紹只屬于隧道,為了描述方便,我們統稱為打洞)。
要明白一個事實:“網絡連接,是雙向的。” 請銘記這個看起來再自然不過的特點,它將是我們接下來介紹的這種方式的根本。
拿支付例子來說。程序調用了微信或者支付寶的api進行支付后,平臺會將支付結果通過回調地址通知我。
由于我的386機器在內網中,加上層層的路由器和交換機防火墻,再加上ipv4的珍貴性,微信根本找不到我。大隱隱于市,也不過如此吧。
幸運的是,我能上網!這可以說是公司對我的最大恩賜了。
遇到網絡問題,最好的解決方式就是加上一個中間層。這和nginx有異曲同工之處。nginx通過加入一個配置,就可以把服務端的資源暴露到公網上。我們也使用類似的思路去解決,但這次,我希望的是把自己本地的386,暴露到公網上。
不能用nginx做反向代理,因為nginx同樣訪問不了處于墻內的我(淦)。
這時候,我們上面提到的基本事實,就起作用了。
加入一個中間層墻內翻譯,再加入一個中間層墻外翻譯。一旦它們連接上,不管是誰連接上誰,都能夠相互進行流量轉發。注意我們的箭頭,正向的數據流動,和反向的數據流動,對于一個連接來說,并沒有什么區別。
為了更明白的看一下這個過程。我畫了兩組端口圖。紅色防火墻左邊的,就是本地機器;右邊的,就是轉發服務器。
剛開始的時候,轉發服務器監聽在7000端口。在本地機器上,進行了一個配置,告訴服務端:麻煩您再監聽一個9090端口,當有數據請求到來的時候,麻煩通過你的客戶端,轉發到我的8080端口上。
這就是整個內網穿透的基本思路。
2. 實踐一下
原理,只是贈送給對內網穿透有好奇心的同學。對于大部分人來說,直接用就對了! 誰有閑工夫去搞明白為啥發動機是怎么設計的。
需求催生工具。目前常用的開源工具,有很多比如zerotier、ngrok、frp等。下面以frp為例,來說明一下它的使用方式。
https://github.com/fatedier/frp/如果你看過上面的原理,就會發現它的配置,實在是很簡單的。
首先,準備一臺云主機。我們叫它server。
在server上,下載frp,解壓。然后配置frps.ini。好家伙,只有兩行,就是一個綁定端口。這證明了我們要在客戶端的配置上下點功夫。
[common] bind_port = 14000接下來,在本地機器上操作,我們記做386。
在386上,下載相應平臺版本的frp,解壓。這次要修改的是frpc.ini文件。
[common] server_addr = 139.202.186.135 server_port = 14000[springboot-1] type = tcp local_ip = 127.0.0.1 local_port = 8080 remote_port = 9090在這里,我們指定連上了server的14000。并告訴它,啟動一個9090端口。當有請求的時候,轉發到我386的8080端口。
在386上,已經用idea啟動了一個springboot項目。當微信的支付回調,調到server的9090端口時,我就可以在idea里打斷點進行調試了。
3. 兩個小案例
我們再來看兩種常見的操作系統完全控制。
對于Linux服務器來說,對外開放的一般是22端口。我們可以通過ssh來連接它。
[ssh] type = tcp local_ip = 127.0.0.1 local_port = 22 remote_port = 6000在本地,通過下面命令即可連接放在家里的機器。
ssh?-oPort=6000?test@x.x.x.x同樣的,要想遠程控制windows,還是得首先把遠程連接功能給打開。
在windows機器上,簡單的配置一下端口就可以。因為它是通用的tcp連接,所以我們并不需要配置什么額外的東東。
[RDP] type = tcp local_ip = 127.0.0.1 local_port = 3389 remote_port = 33891可以看到,由于22和3389都是基于tcp協議的,所以這種轉發配置,也簡單的像是吃飯一樣。
End
市面上的一些打洞軟件,難的并不是技術,而是從業資格證書。畢竟,別人用你的服務,向外傳輸的內容,都是不得而知的。這時候如果沒有運營證書或者嚴格的內容審查,就只能背鍋。
講完了打洞的原理和簡單使用案例,我們有必要著重提一下它的安全性。
溫馨提示:打洞請尤其注意它的安全。如果你是打通的ssh或者3389,請確保打了相關的補丁,并且采用了強密碼。一般公司會采用VPN的方式管理遠程訪問,打洞可以說是直接繞過了VPN,是非常危險的行為。
如果你打的洞,被其他別有用心的人獲得,通常會造成內網的崩潰。如果你的公司并不允許這種行為,就不要把公司內網的服務暴露到外面。
打洞還通常與泄密有關。一個被嚴格保密的內網系統,由于其中的一臺機器能夠上網,就可以把服務暴露出去供外部人員訪問參考。
建議在打洞之前,先了解一下什么叫做“面向法律編程”。演示一類的打洞,需要經過公司授權;拒絕一切公司內網類的ssh和3389打洞。
否則,出了事情,被請到局子里喝茶去,就不太好了。
作者簡介:小姐姐味道??(xjjdog),一個不允許程序員走彎路的公眾號。聚焦基礎架構和Linux。十年架構,日百億流量,與你探討高并發世界,給你不一樣的味道。我的個人微信xjjdog0,歡迎添加好友,進一步交流。
推薦閱讀:
一圖解千愁,jvm內存從來沒有這么簡單過!
失聯的架構師,只留下一段腳本
架構師寫的BUG,非比尋常
nginx工程師,需要上承天命,下召九幽
實力解剖一枚挖礦腳本,風騷操作亮瞎雙眼
又一P1故障,鍋比臉圓
傳統企業的人才們,先別忙著跳“互聯網”!
面試官很牛,逼我尿遁
又一批長事務,P0故障誰來背鍋?
一天有24個小時?別開玩笑了!
《程序人生》殺機!
可怕的“瀏覽器指紋”,讓你在互聯網上,無處可藏
2w字長文,讓你瞬間擁有「調用鏈」開發經驗
996的樂趣,你是無法想象的
作為高級Java,你應該了解的Linux知識(非廣告)
必看!java后端,亮劍誅仙(最全知識點)
學完這100多技術,能當架構師么?(非廣告)
Linux上,最常用的一批命令解析(10年精選)
數百篇「原創」文章,助你完成技術「體系化」
▼
總結
以上是生活随笔為你收集整理的远程办公何时了,网络打洞帮你搞的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 不管计算机专业大学生还是职场老手,除了代
- 下一篇: vivoX30是android5的吗,深