您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關ngrok服務中怎么實現內網穿透,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
原理
ngrok 建立一個隧道,將主機A的http請求 傳遞給 主機B,從而實現內網穿透。
ngrok分為client端(ngrok)和服務端(ngrokd)
實際使用中的部署如下:
圖中內網主機上安裝客戶端。
公網主機 安裝服務端。
client public 則代表 訪問你電腦的用戶或者朋友。
實踐
現在都云時代,各種服務都能找到提供商。內網穿透也是如此。ngrok服務端相當麻煩,如果你只是簡單的穿透,又不是什么敏感信息,可以找到很多 服務提供商。
下載客戶端
根據你的個人電腦系統下載匹配的客戶端。下載地址: https://ngrok.com/download
啟動
./ngrok http 4444
ngrok by @inconshreveable (Ctrl+C to quit) Session Status online Session Expires 7 hours, 59 minutes Version 2.2.8 Region United States (us) Web Interface http://127.0.0.1:4040 Forwarding http://ada02116.ngrok.io -> localhost:4444 Forwarding https://ada02116.ngrok.io -> localhost:4444 Connections ttl opn rt1 rt5 p50 p90 0 0 0.00 0.00 0.00 0.00
如果此時訪問 http://ada02116.ngrok.io 則等于訪問了 localhost:4444
自建ngrok服務
使用別人的服務,存在一些限制。例如不穩定、安全問題,費用昂貴等。因此可能需要自己搭建ngrok服務端。
自建服務需要具備的條件:
1、具備獨立ip的服務器。例如阿里云、騰訊云等。
2、需要域名。如果是國內則需要備案。
配置域名
增加2條A記錄,指向你的服務器。
添加安全組。
開放3個端口。這里我選擇4443、4444、8081端口。
其中4443是ngrok自身通信使用。
4444 后面tcp端口轉發使用。
8081 則是http請求轉發使用。默認是80 但是這里80端口我分配給nginx了。
截圖中少截圖了4444的配置。
編譯服務端。
這里采用docker鏡像來實現。
登錄服務器,創建文件夾 ngrok-server ,包含2個文件
文件Dockerfile 內容如下
FROM golang:1.7.1-alpine ADD build.sh / RUN apk add --no-cache git make openssl RUN git clone https://github.com/inconshreveable/ngrok.git --depth=1 /ngrok RUN sed -i "109,109s/tcp/tcp4/g" /ngrok/src/ngrok/server/tunnel.go RUN sed -i "57,57s/tcp/tcp4/g" /ngrok/src/ngrok/conn/conn.go RUN sh /build.sh EXPOSE 8081 VOLUME [ "/ngrok" ] CMD [ "/ngrok/bin/ngrokd"]
文件build.sh內容如下
export NGROK_DOMAIN="ngrok.xxxx.com" cd /ngrok/ 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 device.key 2048 openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000 cp rootCA.pem assets/client/tls/ngrokroot.crt cp device.crt assets/server/tls/snakeoil.crt cp device.key assets/server/tls/snakeoil.key make release-server GOOS=linux GOARCH=386 make release-client GOOS=linux GOARCH=amd64 make release-client GOOS=windows GOARCH=386 make release-client GOOS=windows GOARCH=amd64 make release-client GOOS=darwin GOARCH=386 make release-client GOOS=darwin GOARCH=amd64 make release-client GOOS=linux GOARCH=arm make release-client
需要修改的地方是
export NGROK_DOMAIN="ngrok.xxxx.com"
修改為你自己的域名。
構建鏡像。
運行
docker build -t ngrok .
注意 最后一個 . 別少了。
啟動容器
運行
docker run -it -p 8081:8081 -p 4443:4443 -p 4444:4444 -d ngrok /ngrok/bin/ngrokd -domain="ngrok.xxxx.com" -httpAddr=":8081"
到這里ngrok服務端已經完成。
下載客戶端。
進入上面啟動的容器,下載對應的客戶端。例如容器id c71b99a242fa運行 docker inspect c71 可以查看這個容器的具體信息。
進入圖中劃線的目錄下,再進入Bin下。
這里就是客戶端。對應的不同系統的版本。
386代表是 32系統。amd64表示 64位。
linux和window無需多言。
下載命令可以通過很多方式。例如ftp或者scp命令。
scp -P 你的服務端端口 -r root@你的服務端ip地址:/var/lib/docker/volumes/6e5383924c5caf1b1b61250f31aa002308dcb371ebd9a7efad2419e20107a362/_data/bin/darwin_amd64/ngrok ./ngrok
這里要注意下權限,如果你不是用root,可能沒法子拷貝。
配置客戶端
創建配置文件 config.yml,其中內容如下
server_addr: "ngrok.xxxx.com:4443" trust_host_root_certs: false tunnels: webapp: proto: http: 8081 subdomain: test tcp12345: remote_port: 4444 proto: tcp: 12345
這里配置了2個隧道。一個http的請求,一個tcp轉發。
啟動客戶端
./ngrok -config=config.yml start-all
在瀏覽器訪問 上圖中地址即可看到本地內容。
增加tcp的轉發截圖。
測試下12345端口的功能。
監聽12345端口。
執行
nc -l 12345
在其他電腦或者本地執行
nc ngrok.xxxx.com 4444
這樣就可以了。輸入和輸出都會顯示。
如圖
上述就是小編為大家分享的ngrok服務中怎么實現內網穿透了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。