0. 系统环境
- 腾讯云(带公网 IP)
- centos 7.6
参考网址: https://www.vediotalk.com/archives/336
参考网址: https://studygolang.com/articles/15122
参考网址: https://github.com/prikevs/ngrok/commit/aa9b88d4e070069db6d8f88aa82526bcbcd1d0b6
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" >> ~/.bashrc
source $HOME/.bashrc
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 server.key 2048
openssl req -new -key server.key -subj "/CN=$NGROK_DOMAIN" -out server.csr
openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.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 server.crt assets/server/tls/snakeoil.crt
cp server.key assets/server/tls/snakeoil.key
6. 交叉编译
0. 解决 /root/go1.4/bin 的错误
rm -r /root/go1.4
cp /usr/local/go /root/go1.4 -r
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
openvpn:
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
\
\
10. 搭建Ngrok服务器及身份认证实现内网穿透
1. 修改源码 ngrok/src/ngrok/server/control.go 为
package server
import (
"fmt"
"io"
"ngrok/conn"
"ngrok/msg"
"ngrok/util"
"ngrok/version"
"runtime/debug"

最低0.47元/天 解锁文章
4659

被折叠的 条评论
为什么被折叠?



