内网穿透神器ngrok服务端搭建和使用

下载最新的git源码包并安装

wget http://www.codemonkey.org.uk/projects/git-snapshots/git/git-latest.tar.xz
xz -d git-latest.tar.xz
tar xvf git-latest.tar
cd git-2014-08-23  (目录名不一定相同)
autoconf
./configure
make && make install

安装完成后,执行

git --version

如果出现版本号说明安装成功

下载go软件包

访问
http://www.golangtc.com/download
并下载对应的版本

然后解压

将解压出来的go目录复制到/usr/local

cp -r go /usr/local/

创建命令软连接到/usr/bin

ln -s /usr/local/go/bin/* /usr/bin/

下载ngrok

git clone https://github.com/tutumcloud/ngrok.git ngrok

复制ngrok到/usr/local

cp -r ngrok /usr/local/

生成OpenSSL证书

先进入到ngrok的目录

cd /usr/local/ngrok

然后生成证书

openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=[domain_name]" -days 5000 -out rootCA.pem
openssl genrsa -out server.key 2048
openssl req -new -key server.key -subj "/CN=[domain_name]" -out server.csr
openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 5000

上面第二行和第四行的“[domain_name]”修改为自己域名

生成完成后将对应的证书复制到assets文件夹下的对应目录,替换原有的证书。如不替换,域名与证书不一致,客户端与服务端是没法正常连接的

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

编译服务端与客户端

如果编译结果不正确先为GO生成交叉编译环境(以macOS为例)

cd /usr/local/go/src
GOOS=darwin GOARCH=386 ./make.bash

在ngrok目录下,运行以下命令会生成对应的客户端或服务端

编译完成的后的程序在bin目录下,ngrok为客户端,ngrokd为服务端

#Windows服务端
GOOS=windows GOARCH=386 make release-server
GOOS=windows GOARCH=amd64 make release-server
#Windows客户端
GOOS=windows GOARCH=386 make release-client
GOOS=windows GOARCH=amd64 make release-client
#Linux服务端
GOOS=linux GOARCH=386 make release-server
GOOS=linux GOARCH=amd64 make release-server
#Linux客户端
GOOS=linux GOARCH=386 make release-client
GOOS=linux GOARCH=amd64 make release-client
#macOS服务端
GOOS=darwin GOARCH=386 make release-server
GOOS=darwin GOARCH=amd64 make release-server
#macOS客户端
GOOS=darwin GOARCH=386 make release-client
GOOS=darwin GOARCH=amd64 make release-client
#ARM服务端
GOOS=linux GOARCH=arm make release-server
#ARM客户端
GOOS=linux GOARCH=arm make release-client

服务端使用

/usr/local/ngrok/bin/ngrokd -domain="[domain_name]" -httpAddr=":8080" -httpsAddr=":8081" -tunnelAddr=":4443"

httpAddr为http端口,httpsAddr为https端口,tunnelAddr为客户端通信端口,[domain_name]修改为自己的域名,留空表示不开放端口

使用nohup命令可以后台运行并不输出日志

nohup /usr/local/ngrok/bin/ngrokd -domain=”[domain_name]” -httpAddr=”:8080” -httpsAddr=”:8081” -tunnelAddr=”:4443” >/dev/null 2>&1 &

示例

将本地VNC服务5900端口映射到服务器5900端口

创建客户端配置文件ngrok.cfg

客户端配置文件模板

server_addr: “[domain_name]:4443”
trust_host_root_certs: false
tunnels:
  vnc:
   remote_port: 5900
   proto:
    tcp: 5900

“[domain_name]”修改为自己域名

使用命令运行客户端

ngrok -config=.\ngrok.cfg start vnc

服务端和客户端的具体配置参数可以用ngrokd -hngrok -h查看