1. 程式人生 > >Ubuntu下搭建ngrok伺服器及客戶端

Ubuntu下搭建ngrok伺服器及客戶端

記錄一下自己在Ubuntu下搭建ngrok服務的過程

前言

最近想要在校園網內搭建一個VPN服務,但是因為校園網,所以沒有公網IP,只好做內網穿透了,之前做了一些n2n以及ssh隧道的嘗試,這次使用ngrok反向代理嘗試一下:

由於最初沒有安裝go環境,以及下載go環境的一些不方便,曾打算使用ngrok-c,但是嘗試以後,發現貌似僅支援openwrt。。。可能是我學藝不精吧,如果可以請私信我。

搭建環境:

區域網外(公網)
- 阿里雲的ECS伺服器
- Ubuntu 16.04 64位 系統
- 使用者:root

區域網內
- 樹莓派
- Ubuntu 系統

-公網伺服器端

安裝go環境

別人的部落格:

#wget https://golangtc.com/static/go/1.8.3/go1.8.3.linux-amd64.tar.gz
wget https://storage.googleapis.com/golang/go1.8.3.linux-amd64.tar.gz
tar zxvf go1.8.3.linux-amd64.tar.gz
mv go /usr/local/

emmmm,反正我是兩個都下載失敗了的,也是我一開始放棄go的原因.
直到,我使用了以下操作…

apt-get install golang

其他部落格裡的環境變數配置,我於是也沒去弄了,其實是弄崩了一次bash。。

ngrok的配置

1.下載ngrok原始碼

方法一

git clone https://github.com/inconshreveable/ngrok.git
export GOPATH=~/ngrok
cd ngrok

方法二

wget htps://coding.net/u/sfantree/p/self_use_OSS/git/raw/master/source/ngrok.tar.gz
tar zxvf ngrok.tar.gz 
export GOPATH=~/ngrok
cd ngrok

2.生成簽名證書

使用ngrok.com官方服務時,我們使用的是官方的SSL證書。自建ngrokd服務,我們需要生成自己的證書,並提供攜帶該證書的ngrok客戶端。

證書生成過程需要一個NGROK_BASE_DOMAIN。如果你要提供服務的地址為”temple.com”,那NGROK_BASE_DOMAIN就應該 是”temple.com”。就假設我的服務域名是temple.com。

openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=temple.com" -days 5000 -out rootCA.pem
openssl genrsa -out device.key 2048
openssl req -new -key device.key -subj "/CN=temple.com" -out device.csr
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000

執行完以上命令,在ngrok目錄下會生成6個新的檔案
device.crt device.csr device.key
rootCA.key rootCA.pem rootCA.srl

3.替換證書

ngrok通過bindata將ngrok原始碼目錄下的assets目錄(資原始檔)打包到可執行檔案(ngrokd和ngrok)中 去,assets/client/tls和assets/server/tls下分別存放著用於ngrok和ngrokd的預設證書檔案,我們需要將它們替換成我們自己生成的:(因此這一步務必放在編譯可執行檔案之前)

cp rootCA.pem assets/client/tls/ngrokroot.crt
cp device.crt assets/server/tls/snakeoil.crt
cp device.key assets/server/tls/snakeoil.key

4.編譯ngrokd(服務端)和ngrok(客戶端)

在ngrok目錄下執行如下命令,編譯ngrokd:

GOOS=linux GOARCH=amd64 make release-server 

go支援交叉編譯的平臺非常多,詳見 GO中文文件

#64位linux server
make release-server GOOS=linux GOARCH=amd64
#32位linux server
make release-server GOOS=linux GOARCH=386

emmm,據說別的部落格一般會出現兩種錯誤,但遺憾的是我並沒有遇到。

同樣,在ngrok目錄下編譯ngrok:
我的客戶端是執行在樹莓派上,所以執行

GOOS=linux GOARCH=arm make release-client 

編譯完成過後~/ngrok/bin/ngrokd即為服務端執行檔案
編譯完成過後~/ngrok/bin/linux_arm/ngrok即為樹莓派客戶端執行檔案

至此,檔案編譯已經完成,可以進行除錯了。

除錯

1.啟動ngrokd(伺服器)

cp ~/ngrok/bin/ngrokd /usr/bin/
ngrokd -domain="temple.com" -httpAddr=":6000"

若彈出The program 'ngrokd' is currently not installed. You can install it by typing: apt install ngrok-server

不要使用它提供的語句,可以使用 find / -name ngrokd 找到在/root/ngrok/bin/ngrokd目錄,於是

cd /root/ngrok/bin
./ngrokd -domain="temple.com" -httpAddr=":6000"

然後,正常的服務日誌就出來了

[17:28:09 CST 2017/11/06] [INFO] (ngrok/log.(*PrefixLogger).Info:83) [registry] [tun] No affinity cache specified
[17:28:09 CST 2017/11/06] [INFO] (ngrok/log.Info:112) Listening for public http connections on [::]:6000
[17:28:09 CST 2017/11/06] [INFO] (ngrok/log.Info:112) Listening for control and proxy connections on [::]:4443
[17:28:09 CST 2017/11/06] [INFO] (ngrok/log.(*PrefixLogger).Info:83) [metrics] Reporting every 30 seconds

客戶端的使用

在樹莓派上用scp [email protected]:ngrok/bin/linux_arm/ngrok /home/pi/ngrok將bin資料夾下載到樹莓派上。

cd ~/ngrok/bin
cat > ngrok.conf <<EOF
#必須是 域名:隧道埠 的格式
server_addr: "temple.com:4443"
#自行編譯無需驗證ngrok官網證書
trust_host_root_certs: false
tunnels:
    http:
        remote_port: 26321
        proto:
            tcp: 80
EOF

其中26321為伺服器埠,不要與其他衝突即可,我這裡隨便打的。
80為本地轉發埠,主要決定於你想將哪個埠轉發出去。
4443我沒有修改,使用的是預設值。

客戶端啟動

./ngrok -config=ngrok.conf start http

或者說將檔案放入/usr/bin 中就不需要再加入路徑。

cp /home/pi/ngrok/ngrok /usr/bin
cp /home/pi/ngrok/ngrok.conf /usr/bin 
ngrok -config=ngrok.conf start http

完成

ngrok

Tunnel Status online
Version 1.7/1.7
Forwarding tcp://temple.com:26321 -> 127.0.0.1:80
Web Interface 127.0.0.1:4040
Conn 0
Avg Conn Time 0.00ms

多埠轉發

可以進行多埠轉發,方法如下:
檔案ngrok.conf 內容如下設定

cd ~/ngrok/bin
cat > ngrok.conf <<EOF
#必須是 域名:隧道埠 的格式
server_addr: "temple.com:4443"
#自行編譯無需驗證ngrok官網證書
trust_host_root_certs: false
tunnels:
    http1:
        remote_port: 26321
        proto:
            tcp: 80
    http2:
        remote_port: 23422
        proto:
            tcp: 2313
EOF

執行
ngrok -config=ngrok.conf start http1 http2即可

相關推薦

Ubuntu搭建ngrok伺服器客戶

記錄一下自己在Ubuntu下搭建ngrok服務的過程 前言 最近想要在校園網內搭建一個VPN服務,但是因為校園網,所以沒有公網IP,只好做內網穿透了,之前做了一些n2n以及ssh隧道的嘗試,這次使用ngrok反向代理嘗試一下: 由於最初沒有安裝

ubuntu搭建lamp伺服器安裝wordpress

下載wordpress包反到/var/www資料夾下: 如果這條命令不行的話可以採用直接在網頁上輸入以上網址下載到系統中然後採用 #cp wordpress.xxxx.tar.gz /var/www/ 命令下載完成。 然後解壓: #tar –zxvf latest.tar

linux環境搭建radius伺服器客戶

資料安全作為現代系統中網路安全的一部分,與系統安全一樣的重要,所以保護資料 —— 確保提供機密性、完整性和可用性 —— 對管理員來說至關重要。 在本文中,我將談到資料安全性的機密性方面:確保受保護的資料只能被授權使用者或系統訪問。您將學習如何在 Linux 系統上建立和配置一個 Remote Authe

CentOS搭建ngrok伺服器跨平臺客戶內網穿透的使用

有些時候需要開發微信或者支付等介面時需要一個公網地址,除錯的時候只能上傳到伺服器檢查錯誤,這樣不斷的在伺服器上除錯,效率是非常低的。當然,我們可以使用花生殼一類的內網穿透軟體,但是免費版限制重重,不如自己搭建一個內網穿透的伺服器,用起來的心應手,也不用擔心隱私洩露等問題。目前

初學Git簡單搭建git伺服器客戶

在開發中,會經常碰到bug問題,那麼有了bug就需要修復,每個bug都可以通過一個臨時分支來修復,修復完成後,合併分支,然後將臨時的分支刪除掉。比如我在開發中接到一個404 bug時候,我們可以建立一個404分支來修復它,但是,當前的dev分支上的工作還沒有提交。 工作進行到一半時候,我們還無法提交,比如我這

搭建FTP伺服器客戶(1) - Python實現

FTP背景介紹:FTP(File Transfer Protocol)協議,顧名思義為檔案傳輸協議。由已故的Jon Postel與Joyce Reynolds開發,並於1985年10月釋出。其底層基於TCP/IP協議。FTP目前主要用於匿名下載公共檔案,也可以在兩臺跨系統的計算機之間傳輸檔案。為了實現F

Ubuntu搭建Nginx伺服器+整合RTMP視訊直播流處理(邊做邊做更新)

簡介: 要求:做一個網頁獲取攝像頭的視訊流,然後將視訊流經過流伺服器推送到後臺視訊處理伺服器,再由後臺視訊處理伺服器推送到流伺服器,最終推送到頁面。如圖: 經過查閱資料,目前有red5以及nginx+nginx-rtmp-module實現,選擇第二種方式來實現。 準備工作:

Ubuntu搭建web伺服器

一、開始安裝MySQL5 sudo apt-get install mysql-server mysql-client 二、安裝Apache2 Apache2的是作為一個Ubuntu的軟體包,因此我們可以直接用下面命令安裝它: sudo apt-get ins

【linux】ubuntu搭建FTP伺服器

關於FTP File Transfer Protocol(檔案傳輸協議)搭建個人網站需要向自己的雲主機上傳(upload)寫好的網站模版,在Linux下就需要一個接收(download)檔案的伺服器。ubuntu 16.04 預設是沒有FTP的,就需要自己搭建環境。 搭建FTP伺服器流程

Linux ubuntu搭建boa伺服器

如果對Linux檔案操作不熟悉的可以看文末的補充內容 學習Linux過程中,記錄配置boa伺服器詳細過程 一、官網下載boa原始碼 boa官網 http://www.boa.org/ 我這裡下的版本是boa-0.94.13 將檔案拷貝到虛擬機器上,這裡我直接放在了home使用者檔案根

ubuntu搭建svn伺服器以及設定SVN

======================================================================================= OS :Ubuntu 12.04.3 LTS kernel :3.2.0-29-generic s

Ubuntu搭建Git伺服器

下面搭建的git伺服器的簡易網路拓撲圖如下所示: 一、安裝及配置所需軟體[Git伺服器,[email protected]] git-core是git版本控制核心軟體,而且git是通過ssh協議來在伺服器與客戶端之間傳輸檔案,故openssh-server、o

Ubuntu最好用的SVN客戶 rabbitvcs

[email protected]:~/startech_pdu/fw/dir-struct$ sudo apt-get install rabbitvcs-cli rabbitvcs-core rabbitvcs-gedit rabbitvcs-nautilus rabbitvcs-thunar

LinuxDHCP協議解析客戶原始碼實現

Option ID Length(位元組) 描述 1 4 Subnet Mask 3 n*4 Router(閘道器) 6 n*4 DNS Server 7 n*4 Log Server 26 2 Int

Linux搭建SVN伺服器服務程式碼自動更新

系統版本:CentOS6.8 流水線安裝如下: >>yum -y install subversion#安裝svn >>rpm -ql subversion#檢視安裝位置 >>svnversion --version#檢視版本 >&

VLC搭建RTSP伺服器客戶的測試過程

第二步:在媒體下拉選單下!有一個子選單“串流”如圖所示: 點選“串流”子選單 彈出一個視窗!如下圖所示。 新增一個你要串流的本地檔案,我剛才傳給你的那個長一點的檔案。     第三步,會出現如下的介面: 第五:點選下一步   第六步:在下拉框內部,

Ubuntu最好用的SVN客戶

在Windows下用慣了tortoisesvn,一下子轉到Ubuntu下,急需尋找一個類似的SVN工具。Google了一下,試用了一下,esvn和rapidsvn,不盡如人意,esvn介面太簡陋,連基本的修改svn地址都不方便,還不支援https協議,暈。Rapidsvn,介面還算華麗,也支援https,可

CentOS 7.4 部署L2TP/IPsec伺服器客戶

之前用的伺服器是pptp ,但是會頻繁的掉線。。。 so, 更換為 L2TP/IPsec 的方式 1>. 更新系統 yum -y update 2>. 使用以下命令快速搭建 IPsec VPN 伺服器 wget https://g

[流媒體伺服器搭建] EasyDarwin伺服器搭建客戶推流完整示例

Windows下環境搭建一、準備工作,需要先下載我們需要的程式1、EasyDarwin  下載地址:https://github.com/EasyDarwin/EasyDarwin2、ffmpeg         下載地址:http://ffmpeg.org/3、nginx

Unity3d搭建HTTP弱聯網的伺服器搭建客戶編寫(一)之java伺服器

HTTP弱聯網java伺服器 通過tomcat搭建java伺服器(linux 1、java環境搭建 java環境較容易搭建,在網上很容易找到相關的教程。 2、tomcat環境搭建 開始配置tomcat: 複製解壓後的檔案到 /opt