首页 » 工具&API » 自己搭建ngrok服务,实现内网穿透

自己搭建ngrok服务,实现内网穿透

 

ngrok的服务都不能用了,恰好手头有俩vps,准备自己搭建一个ngrok服务。
之前都是路由直接公网端口转发,vps闲着也是闲着,搭建一个ngrok内网穿透。

环境:CentOS release 6.6 (Final) 32位

安装Git

#安装最新版的git,不然后续make ngrok的时候下载会卡在update目录上
#安装autoconf
yum -y install gcc automake autoconf libtool make
#安装依赖
yum -y install perl-devel perl-CPAN
yum install tcl  build-essential tk gettext
yum install -y curl curl-devel
mkdir -p /opt/git/
cd /opt/git

wget https://github.com/git/git/archive/v2.11.0.tar.gz
tar -zxvf v2.11.0.tar.gz

cd git-2.11.0/
autoconf
./configure
make && make install
ln -s /usr/local/bin/git /usr/bin/

安装Go环境

#安装mercurial
yum install mercurial
mkdir -p /opt/go
cd /opt/go
#下载golang,在墙外的话直接下载
wget https://storage.googleapis.com/golang/go1.7.4.linux-386.tar.gz
tar -zxvf go1.7.4.linux-386.tar.gz
mv go/ go1.7.4/
mkdir -p /opt/go/gopkg/

#配置环境变量
vim /etc/profile
#在文件里面追加以下
export GOROOT=/opt/go/go1.7.4/
export PATH=$GOROOT/bin:$PATH
export GOPATH=/opt/go/gopkg/

#刷新环境变量
source /etc/profile

#验证go
go version

下载ngrok

cd /opt/
git clone https://github.com/inconshreveable/ngrok.git

生成ngrok证书

mkdir -p /opt/sslkey/
cd /opt/sslkey/
#域名需要解析到该server
export NGROK_DOMAIN="ngrok.zuobin.net"
#*.ngrok需要增加泛解析
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

#copy到指定目录,覆盖之前的证书
cp base.pem /opt/ngrok/assets/client/tls/ngrokroot.crt
cp server.key /opt/ngrok/assets/server/tls/snakeoil.key
cp server.crt /opt/ngrok/assets/server/tls/snakeoil.crt

编译服务端

export GOOS=linux
export GOARCH=386
#64位为export GOARCH=amd64

#如果中途update一直download中的话,说明git版本太老
make release-server

#bin文件夹下面生成一个ngrokd文件
#既是服务端文件

编译客户端

#Mac客户端
GOOS=darwin GOARCH=amd64 make release-client

#windows客户端
GOOS=windows GOARCH=386 make release-client

在ngrok/bin中darwin_amd64或windwos_386文件夹,找到ngrok或ngrok.exe对应系统的客户端软件。

启动服务端,在ngrok目录下面打命令

#-httpAddr=":8088"为监听网络端口,如果想监听80端口也可以改成80
/opt/ngrok/bin/ngrokd  -domain="ngrok.zuobin.net" -httpAddr=":8088" -httpsAddr=":8082"
#./bin/ngrokd -tlsKey=assets/server/tls/snakeoil.key -tlsCrt=assets/server/tls/snakeoil.crt -domain="ngrok.zuobin.net" -httpAddr=":8088" -httpsAddr=":8082"

启动客户端

  • 把编译好的客户端下载下来,在客户端同级文件夹中,新建一个ngrok.cfg文件

内容如下

server_addr: "ngrok.zuobin.net:4443"
trust_host_root_certs: false
#4443为ngrok服务端监听客户端链接端口
  • 进入dos界面,进入到ngrok.exe文件所在位置,输入命令
ngrok -config ngrok.cfg -proto=http -subdomain test 8080

#tcp的方式
./ngrok -proto=tcp -config=./ngrok.cfg 22  

客户端可以直接写一个bat,或者sh。每次运行脚本启动即可。

Tunnel status显示online则表示隧道已打通
test为域名访问前缀
8080为本地服务端口

外网就可以通过访问test.ngrok.zuobin.net:8088来访问内网8080端口的服务了。

进入Web Interface显示的127.0.0.1:4040 查看日志

服务端后台运行

nohup方式,添加一个启动sh

#!/bin/bash
nohup /opt/ngrok/bin/ngrokd  -domain="ngrok.zuobin.net" -log /var/log/ngrok/ngrok.log  -log-level ERROR -httpAddr=":8088" -httpsAddr=":8082" &

那么改用screen

yum install screen
screen -S 任意名字
#运行
/opt/ngrok/bin/ngrokd  -domain="ngrok.zuobin.net" -log /var/log/ngrok/ngrok.log  -log-level ERROR -httpAddr=":8088" -httpsAddr=":8082"
#最后按快捷键
ctrl+A+D
#保持ngrok后台运行

#查看后台运行
screen -ls
screen -r 里面的id即可


原文链接:自己搭建ngrok服务,实现内网穿透,转载请注明来源!

0