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服务,实现内网穿透,转载请注明来源!