1. 程式人生 > >搭建 ngrok 服務實現內網穿透

搭建 ngrok 服務實現內網穿透

文章目錄

提醒:本文最後更新於 1362 天前,文中所描述的資訊可能已發生改變,請謹慎使用。

我們經常會有「把本機開發中的 web 專案給朋友看一下」這種臨時需求,為此專門在 VPS 上部署一遍就有點太浪費了。之前我通常是在 ADSL 路由器上配個埠對映讓本機服務在外網可以訪問,但現在大部分運營商不會輕易讓你這麼幹了。一般小運營商也沒有公網 IP,自己的路由器出口還是在區域網內,埠對映這種做法就不管用了。

之前我就想過能否藉助擁有公網 IP 的主機中轉來實現這種需求,後來發現已經有這樣的軟體了:ngrok。而且 ngrok 官網本身還提供了公共服務,只需要註冊一個帳號,執行它的客戶端,就可以快速把內網映射出去。不過這麼好的服務,沒多久就被牆了~

好在 ngrok 是開源的,我在 VPS 上搭了一套服務自己用,一勞永逸地解決了內網穿透這個難題,這裡記錄一下過程。(注意:ngrok.com 提供的服務是基於 ngrok 2.0,github 上目前只有 1.0 的原始碼,二者功能和命令有一些區別,用的時候別搞混了)

編譯 ngrok

我的 VPS 系統是 Ubuntu 14.04.2 LTS,首先裝必要的工具:

sudo apt-get install build-essential golang mercurial git

獲取 ngrok 原始碼:

git clone https://github.com/inconshreveable/ngrok.git ngrok
### 請使用下面的地址,修復了無法訪問的包地址
git clone https://github.com/tutumcloud/ngrok.git ngrok cd ngrok

生成並替換原始碼裡預設的證書,注意域名修改為你自己的。(之後編譯出來的服務端客戶端會基於這個證書來加密通訊,保證了安全性)

NGROK_DOMAIN="imququ.com"

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

開始編譯:

sudo make release-server release-client

如果一切正常,ngrok/bin 目錄下應該有 ngrok、ngrokd 兩個可執行檔案。

服務端

前面生成的 ngrokd 就是服務端程式了,指定證書、域名和埠啟動它(證書就是前面生成的,注意修改域名):

sudo ./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain="imququ.com" -httpAddr=":8081" -httpsAddr=":8082"

到這一步,ngrok 服務已經跑起來了,可以通過螢幕上顯示的日誌檢視更多資訊。httpAddr、httpsAddr 分別是 ngrok 用來轉發 http、https 服務的埠,可以隨意指定。ngrokd 還會開一個 4443 埠用來跟客戶端通訊(可通過 -tunnelAddr=":xxx" 指定),如果你配置了 iptables 規則,需要放行這三個埠上的 TCP 協議。

現在,通過 https://imququ.com:8081https://imququ.com:8082 就可以訪問到 ngrok 提供的轉發服務。為了使用方便,建議把域名泛解析到 VPS 上,這樣能方便地使用不同子域轉發不同的本地服務。我給 imququ.com 做了泛解析,隨便訪問一個子域,如:http://pub.imququ.com:8081,可以看到這樣一行提示:

Tunnel pub.imququ.com:8081 not found

這說明萬事俱備,只差客戶端來連了。

客戶端

如果要把 linux 上的服務映射出去,客戶端就是前面生成的 ngrok 檔案。但我用的是 Mac,需要指定環境變數再編一次:

sudo GOOS=darwin GOARCH=amd64 make release-server release-client

這樣在 ngrok/bin 目錄下會多出來一個 darwin_amd64 目錄,這裡的 ngrok 檔案就可以拷到 Mac 系統用了。

寫一個簡單的配置檔案,隨意命名如 ngrok.cfg:

server_addr: imququ.com:4443
trust_host_root_certs: false

指定子域、要轉發的協議和埠,以及配置檔案,執行客戶端:

./ngrok -subdomain pub -proto=http -config=ngrok.cfg 80

不出意外可以看到這樣的介面,這說明已經成功連上遠端服務了:

ngrok_client

管理介面

上面那張 ngrok 客戶端執行介面截圖中,有一個 Web Interface 地址,這是 ngrok 提供的監控介面。通過這個介面可以看到遠端轉發過來的 http 詳情,包括完整的 request/response 資訊,非常方便。

ngrok_manager

實際上,由於 ngrok 可以轉發 TCP,所以還有很多玩法,原理都一樣,這裡就不多寫了。

--EOF--

提醒:本文最後更新於 1362 天前,文中所描述的資訊可能已發生改變,請謹慎使用。

相關推薦

搭建 ngrok 服務實現穿透

文章目錄 提醒:本文最後更新於 1362 天前,文中所描述的資訊可能已發生改變,請謹慎使用。 我們經常會有「把本機開發中的 web 專案給朋友看一下」這種臨時需求,為此專門在 VPS 上部署一遍就有點太浪費了。之前我通常是在 ADSL 路由器上配個埠對映讓本機服務在外網可以訪問,但現在大部

阿里雲搭建自己的ngrok服務-實現穿透

參考博文:https://blog.csdn.net/qq_34292044/article/details/78559128https://blog.csdn.net/huanxiang201311/article/details/72725891一.環境準備       

搭建並配置優雅的 ngrok 服務實現穿透

問題 隨著網際網路生態圈的發展,現今的 Web 專案中開始越來越多的使用第三方服務,通常這些第三方服務都是由 Client 通過 Server 的 API 主動發起請求,但是 Server 回撥 Client 這種方式也是很多服務中不可避免的一種方式。這樣的場景下,對於

基於小米球(Ngrok實現穿透

一、前言 在公司部署了一套大資料叢集。為了方便測試。所以需要弄個內網穿透實現在家裡訪問公司內部網路,但是不想付費。所以整了個免費

一分鐘實現穿透ngrok伺服器搭建

簡單來說內網穿透的目的是:讓外網能訪問你本地的應用,例如在外網開啟你本地http://127.0.0.1指向的Web站點。 最近公司的花生殼到期了,要續費,發現價格一直在漲,都是5年以上的老使用者,旗艦版都沒有實現內網完全穿透,打算自己動手替換這個服務,中間走

阿里雲搭建ngrok實現穿透

內網穿透想必是開發微信的同志所必須的,大部分人首先想到的是去網上找各種現成的吧,比如sunny-ngrok或者向日葵之類的,但是世界上沒有免費的午餐,免費的都是會崩的!!!下面我就來教大家怎麼用阿里雲和ngrok搭建一個內網穿透!!!! 1.準備工作: 要能實現內網穿透,

MAC 下使用 ngrok 實現穿透

2. 解壓到指定目錄:$ unzip -n ngrok-stable-darwin-amd64.zip -d /tmp3. 進入到解壓後的 ngrok 所在路徑:  $ cd /tmp4. 開啟服務: 

樹莓派通過ngrok實現穿透

最近在折騰樹莓派,想要實現遠端對寢室內的監控和對部件的控制,即通過外網訪問本地樹莓派。自然而然想到使用內網穿透,百度了一下有花生殼和NATAPP之類的服務提供商。不過這種事情還是自己折騰有意思,而且手頭也有一個沒用的域名和兩臺VPS,就決定自己來做了。

利用ngrok實現穿透

實現內網穿透紫ngrok無法通過天牆之後,國內也出現了一批成熟的商業化實現方案,諸如花生殼、net123、Sunny-ngrok等。不過免費的極不穩定還有流量頻寬限制,最後還是決定自己搭一個。本文利用ngrok搭建一個用於內網穿透的環境。需求是通過一

【免費穿透】利用NatApp實現穿透

一,註冊賬號 在NatApp上註冊賬號:https://natapp.cn/register 二,實名認證 三,購買隧道 1,購買免費隧道 2,選擇8080埠進行內網穿透,併購買 四,下載客戶端

關於 frp+nginx實現穿透+共用埠

首先  frps  和 frpc  對比 [common] bind_addr = 0.0.0.0 bind_port = 7000 vhost_http_port = 80 vhost_https_port = 8443 dashboard_port = 7500

可以實現穿透的幾款工具

首先說下內網穿透的原理。   NAPT原理   在NAT閘道器上會有一張對映表,表上記錄了內網向公網哪個IP和埠發起了請求,然後如果內網有主機向公網裝置發起了請求,內網主機的請求資料包傳輸到了NAT閘道器上,那麼NAT閘道器會修改該資料包的源IP地址和源埠為NAT

配置frp實現穿透

一、frp的作用 利用處於內網或防火牆後的機器,對外網環境提供 http 或 https 服務。 對於 http, https 服務支援基於域名的虛擬主機,支援自定義域名繫結,使多個域名可以共用一個80埠。 利用處於內網或防火牆後的機器,對外網環境提供 tcp 和 udp

簡簡單單教你實現穿透

                sudo ./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain="zzmd.superboycxx.top" -httpAddr=":8081" -httpsAddr=":8082"屁話不講,先來看下效果:1.搭

frp實現穿透

一、frp的作用 利用處於內網或防火牆後的機器,對外網環境提供 http 或 https 服務。 對於 http, https 服務支援基於域名的虛擬主機,支援自定義域名繫結,使多個域名可以共用一個80埠。 利用處於內網或防火牆後的機器,對外網環境提供 tcp 和 udp 服務,例如在家裡通

【智慧路由器】openwrt實現穿透(p2p、n2n)

背景 有時候在對線上裝置進行維護,由其是除錯的時候希望技術人員遠端進入路由後臺除錯路由資訊的時候,如果沒有內網穿透就會比較麻煩。 本篇部落格是在路由上實現內網穿透,以實現資料、檔案的點對點傳輸或訪問 閱讀時需要額外瞭解下p2p協議原理,以及n2n工

使用電信光貓加路由器實現穿透,外訪問

準備工作:1. 需註冊一個花生殼賬號和購買一個殼域名(可以免費獲取殼域名)2. 電腦下載安裝花生殼客戶端3. 使用電信光貓超級管理員密碼獲取器獲取光貓超級密碼4. 寬頻賬號與寬頻密碼(光貓配置後,需登入路由器上網,路由器需使用寬頻賬號與密碼登入上網)一.電信光貓配置1.1 在

可以實現穿透的幾款工具 侵立刪

轉自:https://mp.weixin.qq.com/s/TZmEbJ63f-N1RU1850VMaA   最近沒什麼事情,看了一些關於內網穿透的文章,因我本身已是做微信開發相關的工作,對這部分關注的比較多,現分享給大家。   首先說下內網穿透的原理。 &n

如何實現穿透

        區域網是指在某一區域內由多臺計算機互聯成的計算機組。一般是方圓幾千米以內。區域網可以實現檔案管理、應用軟體共享、印表機共享、工作組內的日程安排、電子郵件和傳真通訊服務等功能。區域網是封閉型的,可以由辦公室內的兩臺計算機組成,也可以由一個公司內的上千臺計算機組

VPS配合Frp實現穿透使用windows遠端桌面

windows遠端桌面連線時,要麼兩臺主機再同一個區域網,要麼目標主機必須有外網IP。然而很多情況下,我們的主機都是沒有外網IP的,因此我通過Frp和一個具有外網Ip的vps實現內網穿透進而進行遠端桌面。 首先將目標主機的遠端桌面開啟並配置防火牆,這裡不再