使用Ngrok實現(xiàn)內(nèi)網(wǎng)穿透服務(wù)

# 使用Ngrok實現(xiàn)內(nèi)網(wǎng)穿透服務(wù)

tags: 網(wǎng)絡(luò) Linux ngrok


ngrok是什么瀑凝?

ngrok是一個能夠?qū)崿F(xiàn)不能直接與外網(wǎng)溝通的設(shè)備,通過外網(wǎng)服務(wù)器的轉(zhuǎn)發(fā)實現(xiàn)自我服務(wù)器化的軟件杏慰,也就是不需要通過路由器的端口映射,就能實現(xiàn)內(nèi)網(wǎng)設(shè)備向外網(wǎng)暴露端口的軟件。

實現(xiàn)ngrok服務(wù)需要什么液样?

需要一個能夠提供服務(wù)的外網(wǎng)服務(wù)器铐达,并運行ngrok服務(wù)端岖赋,它將默認監(jiān)聽4443端口,當(dāng)內(nèi)網(wǎng)的機器運行ngrok客戶端并連接上服務(wù)器時瓮孙,將通過4443端口進行轉(zhuǎn)發(fā)設(shè)置唐断,并按設(shè)定將指定的端口的數(shù)據(jù)動作與服務(wù)器進行轉(zhuǎn)發(fā)。協(xié)議上它支持http,https,tcp協(xié)議

如何搭建自己的ngrok服務(wù)器

最新版ngrok目前僅由官方提供技術(shù)支持和服務(wù)器杭抠,開源的ngrok代碼只支持到1.7版本脸甘,只有自己編譯的ngrok才能在自己的服務(wù)器上提供內(nèi)網(wǎng)穿透服務(wù)。ngrok使用GO語言編寫偏灿,可以自己配置實現(xiàn)交叉編譯丹诀,全平臺通用

一. 軟件的編譯

以下動作發(fā)生在debian 8.2 x86平臺

1. 編譯安裝GO
建議安裝1.4版本平臺,由于軟件開發(fā)時間問題,新版本的GO可能會出現(xiàn)編譯問題

下載GO1.4
# pwd
# ~/Software
# apt-get install gcc cmake
# wget http://www.golangtc.com/static/go/1.4/go1.4.linux-386.tar.gz
# tar xvf http://www.golangtc.com/static/go/1.4/go1.4.linux-386.tar.gz

配置編譯環(huán)境

# export GOROOT=$HOME/software/go
# export PATH=$PATH:$GOROOT/bin

編譯&檢查

# cd go/src/
# ./all.bash

編譯完成后~/go/bin中的go就是我們的二進制go程序

2. 編譯安裝ngrok
下載ngrok

# cd ~/software
# git clone https://github.com/inconshreveable/ngrok.git ngrok
# cd ngrok

配置ssl證書信息

# NGROK_DOMAIN="moonwalker.me"
    注意域名換成你自己的
# openssl genrsa -out base.key 2048
# openssl req -new -x509 -nodes -key base.key -days 10000 -subj "/CN=$NGROK_DOMAIN" -out base.pem
# openssl genrsa -out server.key 2048
# openssl req -new -key server.key -subj "/CN=$NGROK_DOMAIN" -out server.csr
# openssl x509 -req -in server.csr -CA base.pem -CAkey base.key -CAcreateserial -days 10000 -out server.crt
    將生成的證書文件拷貝到指定位置铆遭,替代默認證書
# cp base.pem assets/client/tls/ngrokroot.crt
# cp server.crt assets/server/tls/snakeoil.crt
# cp server.key assets/server/tls/snakeoil.key

編譯生成服務(wù)端和客戶端

# make release-server release-client

編譯出的程序會放在ngrok/bin/下硝桩,ngrok為客戶端程序,ngrokd為服務(wù)器程序枚荣。注意這個服務(wù)端和客戶端只適合你用于編譯的機器的所屬平臺上運行碗脊,例如使用x86構(gòu)架的主機編譯無法在arm構(gòu)架上運行,需要后面的交叉編譯

3. 啟動Ngrok服務(wù)

# ./ngrokd -domain="ngrok.moonwaker.me" -httpAddr=":8080" -httpsAddr=":8081" -tunnelAddr=":4443"

使用netstat -tunlp可以看到服務(wù)器已經(jīng)做好端口監(jiān)聽棍弄,并且已經(jīng)將兩個協(xié)議的轉(zhuǎn)發(fā)端口做了監(jiān)聽望薄,當(dāng)然三個參數(shù)的端口都是默認好的,這里寫出來是為了方便修改呼畸。

netstat

4. 運行客戶端

如果是同樣平臺的機器可以直接將ngrok復(fù)制走運行痕支,如果是想在樹莓派等arm平臺上要配置交叉編譯再編譯一次

配置編譯平臺

# cd ~/software/go/src
# GOOS=linux
# GOARCH=arm
# ./make.bash

通過上面的命令配置好go編譯器的交叉編譯選項,然后重新編譯

# cd ~/software/ngrok/src
# make release-server release-client

寫一個配置文件ngrok.cfg蛮原,基礎(chǔ)的配置如下

server_addr: ngrok.moonwalker.me:4443
trust_host_root_certs: false

這里已經(jīng)可以通過命令
# ./ngrok -subdomain ngrok -proto=http -config=ngrok.cfg 80
直接將80端口轉(zhuǎn)發(fā)到服務(wù)器端的8081端口卧须,并且協(xié)議走的是http
當(dāng)然也可以對其它端口進行tcp轉(zhuǎn)發(fā),比如轉(zhuǎn)發(fā)22端口
# ./ngrok -proto=tcp -config ngrok.cfg 22
ngrok會隨意選擇一個端口對本機的22端口進行轉(zhuǎn)發(fā)
如果想一次性轉(zhuǎn)發(fā)多個端口或者想指定遠程的對應(yīng)端口儒陨,需要完善ngrok.cfg

server_addr: ngrok.moonwalker.me:4443
trust_host_root_certs: false
tunnels:
 ssh:
  remote_port: 1122
  proto:
   tcp: 22
 ss:
  emote_port: 8388
  proto:
   tcp: 8388
 ftp:
  remote_port: 20
  proto:
   tcp: 20
 ftp2:
  remote_port: 21
  proto:
   tcp: 21
 http:
  subdomain: www
  proto:
   http: 80
   https: 192.168.1.4:443

特別需要注意的是配置文件為YAML語法花嘶,所有縮進都要使用空格,不能夠使用tab
而且可以看出不但可以轉(zhuǎn)發(fā)本機的端口蹦漠,亦可以轉(zhuǎn)發(fā)其它內(nèi)網(wǎng)設(shè)備

啟動特定的轉(zhuǎn)發(fā)tunnel
# ./ngrok -config ngrok.cfg start ssh ss
當(dāng)然也可以將所有配置全部轉(zhuǎn)發(fā)
# ./ngrok -config ngrok.cfg start-all

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末椭员,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子笛园,更是在濱河造成了極大的恐慌隘击,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件研铆,死亡現(xiàn)場離奇詭異埋同,居然都是意外死亡,警方通過查閱死者的電腦和手機棵红,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進店門凶赁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人逆甜,你說我怎么就攤上這事虱肄。” “怎么了交煞?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵浩峡,是天一觀的道長。 經(jīng)常有香客問我错敢,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任稚茅,我火速辦了婚禮纸淮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘亚享。我一直安慰自己咽块,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布欺税。 她就那樣靜靜地躺著侈沪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪晚凿。 梳的紋絲不亂的頭發(fā)上亭罪,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天,我揣著相機與錄音歼秽,去河邊找鬼应役。 笑死,一個胖子當(dāng)著我的面吹牛燥筷,可吹牛的內(nèi)容都是我干的箩祥。 我是一名探鬼主播,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼肆氓,長吁一口氣:“原來是場噩夢啊……” “哼袍祖!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起谢揪,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤蕉陋,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后键耕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體寺滚,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年屈雄,在試婚紗的時候發(fā)現(xiàn)自己被綠了村视。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡酒奶,死狀恐怖蚁孔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情惋嚎,我是刑警寧澤杠氢,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站另伍,受9級特大地震影響鼻百,放射性物質(zhì)發(fā)生泄漏绞旅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一温艇、第九天 我趴在偏房一處隱蔽的房頂上張望因悲。 院中可真熱鬧,春花似錦勺爱、人聲如沸晃琳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽卫旱。三九已至,卻和暖如春围段,著一層夾襖步出監(jiān)牢的瞬間顾翼,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工蒜撮, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留暴构,地道東北人。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓段磨,卻偏偏與公主長得像取逾,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子苹支,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,689評論 2 354

推薦閱讀更多精彩內(nèi)容