配置域名(需支持泛域名功能)

子域名

記錄類型

線路類型

記錄值

ngrok

A記錄

通用

170.10.10.100

*.ngrok

A記錄

通用

170.10.10.100

安裝git

...

安裝並配置好go

  • https://github.com/golang/go/wiki/Ubuntu
sudo add-apt-repository ppa:gophers/archive
sudo apt-get update
sudo apt-get install golang-1.10-go -y

mkdir -p $HOME/c
mkdir -p $HOME/w
ln -sf /usr/lib/go-1.10 $HOME/c/go
export GOROOT=$HOME/c/go
export GOPATH=$HOME/w/go
export PATH=$GOROOT/bin:${GOPATH}/bin:$PATH

編譯生成目標文件

創建並進入臨時目錄:mkdir $HOME/t && cd $_ 創建文件build_ngrok.sh加入以下內容

#!/bin/sh
read -p "Input your domain name:" DOMAIN
if [ "$DOMAIN" = "" ];then
    echo Please input your domain name.
    exit 0
fi

resultFileName=ngrok_`echo ${DOMAIN} | sed 's/\./_/g'`

currentPwd=$(pwd)
echo current path: $currentPwd
go get github.com/inconshreveable/ngrok
cd $GOPATH/src/github.com/inconshreveable/ngrok
git clean -df
git checkout -- .

openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$DOMAIN" -days 5000 -out rootCA.pem
openssl genrsa -out device.key 2048
openssl req -new -key device.key -subj "/CN=$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=amd64 make release-client
GOOS=windows GOARCH=amd64 make release-client
GOOS=linux GOARCH=arm make release-client
GOOS=darwin GOARCH=amd64 make release-client

mkdir -p bin/tls
mkdir -p bin/out

cp device.crt bin/tls/snakeoil.crt
cp device.key bin/tls/snakeoil.key
echo 'nohup ./ngrokd -tlsKey="tls/snakeoil.key" -tlsCrt="tls/snakeoil.crt" -domain='"$DOMAIN"' -httpAddr=":80" -httpsAddr=":443" > out/nohupd.out 2>&1 &' > ./bin/start.sh
chmod +x ./bin/start.sh
echo "server_addr: $DOMAIN:4443" > ./bin/ngrok.cfg
echo "trust_host_root_certs: false" >> ./bin/ngrok.cfg
echo 'nohup ./ngrok -config=./ngrok.cfg -subdomain=blog -proto=http 8078 > /dev/null 2>&1 &' > ./bin/blog.sh
chmod +x ./bin/ngrok_blog.sh

mv bin ${resultFileName}
tar -zcvf ${resultFileName}.tar.gz ${resultFileName}
mv ${resultFileName}.tar.gz $currentPwd/${resultFileName}.tar.gz
git clean -df
git checkout -- .
echo ok! result: ${resultFileName}.tar.gz
  • 運行 sh build_ngrok.sh
  • 根據提示輸入已經配置好的域名,例如:ngrok.lyloou.com
  • 在域名對應的服務器上運行:./start.sh (這樣,服務器端就完成了)

打包和解壓

tar -zcvf ngrok_lyloou_com.tar.gz bin
tar -zxvf ngrok_lyloou_com.tar.gz

下載

realpath ngrok_lyloou_com.tar.gz # 獲取文件路徑
scp root@170.10.0.100:/root/t/ngrok_lyloou_com.tar.gz ngrok_lyloou_com.tar.gz # 從服務器拉取文件

運行服務器(已經在上面的build_ngrok.sh中配置過了)

#!/bin/sh
./ngrokd -domain="ngrok.lyloou.com" -httpAddr=":80" -httpsAddr=":443" 

## 或者後台運行
mkdir out
chmod +x ngrokd
nohup ./ngrokd -domain="ngrok.lyloou.com" -httpAddr=":80" -httpsAddr=":443"  > out/nohup_log.out 2>&1 &

運行客户端(在上面的build_ngrok.sh中配置並生成了一個案例ngrok_blog.sh

添加配置ngrok.cfg:

server_addr: "ngrok.lyloou.com:4443"
trust_host_root_certs: false
#!/bin/sh
nohup ./ngrok -config=./ngrok.cfg -subdomain=lou -proto=http 80 > /dev/null 2>&1 &

其他

如果在雲平台中運行ngrok服務, 需要將4443端口80端口添加到安全組中,如下表:

授權策略

協議類型

端口範圍

授權類型(全部)

授權對象

允許

自定義 TCP

4443/4443

IPv4地址段訪問

0.0.0.0/0

允許

自定義 TCP

80/80

IPv4地址段訪問

0.0.0.0/0

客户端

#一、系統説明
* Windows使用`windows_amd64`版本
* Mac使用`darwin_amd64`版本
* Linux 使用`linux`版本

#二、配置説明
.\ngrok.exe -config=.\ngrok.cfg -subdomain=lou -proto=http 80

* subdomain 指向自定義的子域名
* proto 指向使用的協議
* 隨後的數字表示:準備映射出去的端口號

# 三、使用方法
* Windows系統執行ngrok.bat
* Mac和Linux系統執行ngrok.sh

# 四、訪問方式
瀏覽器中打開鏈接:
[http://lou.ngrok.lyloou.com](http://lou.ngrok.lyloou.com)