1. 程式人生 > 其它 >筆記 ngrok 內網穿透

筆記 ngrok 內網穿透

技術標籤:linuxlinux

0. 系統環境

  • 騰訊雲(帶公網 IP)
  • centos 7.6

參考網址: https://www.vediotalk.com/archives/336

1. 準備安裝包

  • git-2.9.0.tar.gz
  • go1.9.2.linux-amd64.tar.gz
  • ngrok: git clone https://github.com/inconshreveable/ngrok.git

go 和 git 的下載: 連結:https://pan.baidu.com/s/1o23GK9VlNRXhg_IDJyGofQ
提取碼:wbyj
複製這段內容後開啟百度網盤手機App,操作更方便哦

go 語言不要太新版的,也不要太舊版的,容易出莫名其妙的問題
git 版本不清楚,儘量是 2.0 以上的吧

2. 域名泛解析

在這裡插入圖片描述

3. go 環境搭建

下載對應系統的安裝包 go1.9.2.linux-amd64.tar.gz

tar -C /usr/local -xzf go1.9.2.linux-amd64.tar.gz

root 下執行

mkdir $HOME/go
echo 'export GOROOT=/usr/local/go'>> ~/.bashrc
echo 'export GOPATH=$HOME/go'>> ~/.bashrc
echo 'export PATH=$PATH:$GOROOT/bin'>> ~/.bashrc
source
$HOME/.bashrc

4. git 安裝

下載安裝包

tar -zxvf git-2.9.0.tar.gz
cd git-2.9.0
./configure --prefix=/usr/local/git
make && make install
export PATH="/usr/local/git/bin:$PATH"
source /etc/profile
git --version

5. 獲取 ngrok 原始碼

cd /usr/local
git clone https://github.com/inconshreveable/ngrok.git

1. 修改 ~/.bashrc

# ngrok
# 修改為自己解析的域名
export NGROK_DOMAIN="ngrok.chenzhi.website"
export GOPATH="/usr/local/ngrok/"

2. source 一下

source ~/.bashrc

3. 生成自簽名 ssl 證書

cd /usr/local/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

# 檢視一下
ls -l
  • 多了 6 個證書,少了請重新操作
-rw-r--r-- 1 root root 1679 Dec 30 21:37 rootCA.key
-rw-r--r-- 1 root root 1139 Dec 30 21:37 rootCA.pem
-rw-r--r-- 1 root root   17 Dec 30 21:37 rootCA.srl
-rw-r--r-- 1 root root 1021 Dec 30 21:37 server.crt
-rw-r--r-- 1 root root  911 Dec 30 21:37 server.csr
-rw-r--r-- 1 root root 1679 Dec 30 21:37 server.key

4. 替換證書,詢問是否確認替換,全部 yes

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

6. 交叉編譯

1. windows 客戶端編譯

  • 首先
cd /usr/local/go/src/
GOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./make.bash
  • 再然後
cd /usr/local/ngrok
GOOS=windows GOARCH=amd64 make release-server release-client

2. mac 客戶端編譯

  • 首先
cd /usr/local/go/src/
GOOS=darwin GOARCH=amd64 CGO_ENABLED=0 ./make.bash
  • 再然後
cd /usr/local/ngrok
GOOS=darwin GOARCH=amd64 make release-server release-client

3. linux 客戶端編譯

  • 首先
cd /usr/local/go/src/
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 ./make.bash
  • 再然後
cd /usr/local/ngrok
GOOS=linux GOARCH=amd64 make release-server release-client

4. arm 客戶端編譯

  • 首先
cd /usr/local/go/src/
GOOS=linux GOARCH=arm CGO_ENABLED=0 ./make.bash
  • 再然後
cd /usr/local/ngrok
GOOS=linux GOARCH=arm make release-server release-client

8. ngrokd 服務端啟動

  • 臨時啟動
/usr/local/ngrok/bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":80"
/usr/local/ngrok/bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":4443"
  • 後臺啟動
nohup /usr/local/ngrok/bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":80" &
setsid /usr/local/ngrok/bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":4443"
  • 想要結束程序
# 得到 PID
ps -aux | grep ngrokd
# kill PID
kill xxxx
  • 說明
(2)引數說明:3 個埠可隨意配置(不能和現有服務埠衝突,阿里雲伺服器需開啟對應埠)

# -domain         訪問 ngrok 是所設定的服務地址生成證書時那個域名
# -httpAddr       http 協議埠 預設為 80
# -httpsAddr      https 協議埠 預設為 443 (可配置 https 證書)
# -tunnelAddr     通道埠,預設 4443

(3)注意:
所有涉及的埠,都需在阿里雲(騰訊雲)上設定規則,即開啟埠

9. ngrok 啟動客戶端

  • 將 ngrok 客戶端拷貝到需要穿透的伺服器
  • 建立 ngrok.cfg 配置檔案,只使用 ssh 登入
server_addr: "ngrok.chenzhi.website:4443"  # 遠端地址
trust_host_root_certs: false
tunnels:  # 隧道
  ssh:  # 隧道名稱
    remote_port: 9022       # 繫結到遠端地址的那個埠
    proto:
      tcp: 22               # 本地的 TCP 22埠
  • 一個網上的 ngrok.cfg
server_addr: "ngrok.yanlongfei.top:4443"   //注意域名一定要和伺服器端一致
trust_host_root_certs: false
tunnels:
  web:
    subdomain: zhiyong47    # 域名字首  zhiyong47.ngrok.yanlongfei.top
    remote_port: 9024
    proto:
      http: 80              # 本地的 HTTP 80 埠
      
  https:
    subdomain: "ssl"
    proto:
      https: 443
      
  openv*n:
    remote_port: 5555       # 對映的埠
    proto:
      tcp: 1194
    
  ssh:
    remote_port: 2222
    proto:
      tcp: 22
  • 臨時啟動
./ngrok -config=ngrok.cfg start http        #啟動 web 服務 
./ngrok -config=ngrok.cfg start tcp         #啟動 tcp 服務 
./ngrok -config=ngrok.cfg start http tcp    #同時啟動兩個服務 
./ngrok -config=ngrok.cfg start ssh         #同時啟動 shh 
./ngrok -config=ngrok.cfg start-all         #啟動所有服務

  • 後臺啟動
# 在上面每一條命令加
setsid  ****************** 
# 比如
setsid ./ngrok -config=ngrok.cfg start ssh