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