? ? ? ?手頭上有一臺電腦,裝的ubuntu18.04欺旧,配置還可以姑丑,而我的阿里云服務(wù)器內(nèi)存較小蛤签,跑不了太多服務(wù),于是便想到通過ngrok將本地主機(jī)的端口映射出去栅哀。
? ? ? ? 在配置內(nèi)網(wǎng)映射前震肮,首先我們要有一臺云主機(jī),如阿里云或者騰訊云留拾,還要有一個屬于自己的域名(最好是經(jīng)過備案的)戳晌。
? ? ? ? step1:? dns泛域名解析
? ? ? ? ? ? ? ? 所謂泛域名解析,就是在正常的域名前加上*. 如下圖中的 *.ngrok
? ? setp2:?配置防火墻?
? ? ? ? ? ngrok默認(rèn)使用4443端口痴柔,? ?在運(yùn)行ngrok服務(wù)端時還需要一個監(jiān)聽監(jiān)聽端口沦偎,如8888, 在防火墻中要放開這兩個端口咳蔚。
? ? setp3: 下載安裝ngrok和go語言
? ? ? ? ngrok需要go語言進(jìn)行編譯豪嚎,首先安裝go:
? ? ? ? ? ? sudo apt install go
? ? ? ? 通過go version 查看go版本,如果版本小魚1.7谈火,可能會報錯侈询,這是要手動升級. 現(xiàn)將已有的go卸載,
? ? ? ? ? ? ? apt purge golang-go
? ? ? ? 去官網(wǎng)下載最新的安裝包?https://studygolang.com/dl, tar -xzvf? *.tar.gz 命令解壓 并通過 export PATH=$PATH: /*/go/bin? 添加環(huán)境變量
? ? ? ? 接下來下載ngrok:
????????????????git clone https://github.com/inconshreveable/ngrok.git?????
? ? ? ? ?生成自簽名證書:
????????????????使用ngrok.com官方服務(wù)時糯耍,我們使用的是官方的SSL證書扔字。自建ngrokd服務(wù),如果不想買SSL證書温技,我們需要生成自己的自簽名證書革为,并編譯一個攜帶該證書的ngrok客戶端。證書生成過程需要一個NGROK_BASE_DOMAIN舵鳞。 以ngrok官方隨機(jī)生成的地址693c358d.ngrok.com為例震檩,其NGROK_BASE_DOMAIN就是“ngrok.com”,如果你要 提供服務(wù)的地址為“example.ngrok.xxx.com”系任,那NGROK_BASE_DOMAIN就應(yīng)該 是“ngrok.xxx.com”恳蹲。這里呢,我替換成自己的域名 “ngrok.xxx.fun”.
? ? ? ? ? ? ? ? 首先進(jìn)入剛剛下載的ngrok目錄
?cd ngrok
NGROK_DOMAIN="ngrok.xxx.com"
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.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 rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 5000
? ? ? ? 拷貝證書到指定位置:
????????????????cp rootCA.pem assets/client/tls/ngrokroot.crt
????????????????cp server.crt assets/server/tls/snakeoil.crt
????????????????cp server.key assets/server/tls/snakeoil.key
? ? ? ? ? 接下來進(jìn)行編譯:
????????????????make release-server release-client??
? ? ? ? ? ?編譯完成后俩滥,會在bin目錄下出現(xiàn)ngrok(客戶端)和ngrokd(服務(wù)端)兩個文件嘉蕾,代表編譯成功。
? ? ? ?step4 運(yùn)行服務(wù)端:
? ? ? ? ? ? ?./ngrokd -tlsKey="../assets/server/tls/snakeoil.key" -tlsCrt="../assets/server/tls/snakeoil.crt" -domain="ngrok.yourdomain.com" -httpAddr=":8888" -httpsAddr=":444"> /home/logs/ngrok.log &????????
? ? ? ? ? ? ? ?tips:在運(yùn)行命令的最后加上?&?可以讓程序在后臺運(yùn)行
? ? ? ? ? ? ? ? 這時我們在瀏覽器訪問ngrok.xxx.com:8888 訪問霜旧,如果看到 Tunnel ngrok.xxx.com:8888 not found 說明服務(wù)端已經(jīng)正常啟動 了错忱。
? ? ? ? step5 啟動客戶端:
? ? ? ? ? ? 使用scp命令將阿里云上的ngrok客戶端文件拷貝到本地主機(jī)
? ? ? ? ? ? ? ? ? ? scp root@**.***.**.**:/*/ngrok/bin/ngrok /home/**/ngrok/
? ? ? ? ? ? 接下來進(jìn)入與客戶端同一級目錄添加一個名為ngrok.cfg的配置文件儡率, 并輸入:
? ??????????????????server_addr: ngrok.***.com:4443
? ? ? ? ? ? ? ? ? ? trust_host_root_certs: false
????????????????????tunnels:
? ? ????????????????????tunnel1:
? ? ? ? ????????????????????subdomain: test1? # 次一級域名
? ? ? ????????????????????? proto:
? ? ? ? ? ? ????????????????????????http: 80? ?#監(jiān)聽本地的80端口
? ????????????????????? tunnel2:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?subdomain: test2
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?proto:
? ? ? ? ? ????????????????????????????? http: 8080? ?
? ? ? ? ? ? tips: yaml文件不可以使用tab,只能用空格以清,否則會報錯
? ? ? ? ? ? 運(yùn)行客戶端:
? ??????????????????./ngrok -config ngrok.cfg start tunnel1 tunnel2? ? ? ?
? ? ? ? 現(xiàn)在儿普,我們已經(jīng)完成了內(nèi)網(wǎng)的端口映射。
參考博文:https://my.oschina.net/djsoft/blog/1786635