ngrok目前只开源1.x版本,最新的是1.7,使用下来发现比花生壳内网版要稳定和好用得多,重要的是ngrok支持mac和Linux平台,很是好用。先前参考JerryQu的博文搭建 ngrok 服务实现内网穿透进行部署发现被几个地方卡住研究了好些天才得以解决,所以在此把经验教训分享出来,作为参考博文的补充。谢谢JerryQu的分享。


 我使用的环境是CentOS6,安装ngrok需要新版的git、Golang和其他一些组件,下面是完整的部署过程。


 我的域名是yourdomain.com,为ngrok新开了二级域名ngrok.yourdomain.com,然后新增*.ngrok的泛解析。


#安装perl-ExtUtils-MakeMaker以及mercurial
yum install -y perl-ExtUtils-MakeMaker mercurial
#ngrok基于go语言开发,需要安装Golang
cd /data/download
wget https://storage.googleapis.com/golang/go1.4.2.linux-386.tar.gz
tar zxf go1.4.2.linux-386.tar.gz 
mv /data/download/go /data/
ln -s /data/go/bin/* /usr/bin/
export GOROOT="/data/go/"


 安装最新版的git,请勿yum安装,yum最新才1.7.1,后面make ngrok时候会有问题,见ps。

wget -O git.zip https://github.com/git/git/archive/master.zip
autoconf
./configure
make && makeinstall
ln -s /usr/local/bin/git /usr/bin/


 开始安装ngrok

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

openssl genrsa -out base.key 2048 
openssl req -new -x509 -nodes -key base.key -days 10000 -subj "/CN=ngrok.yourdomain.com" -out base.pem 
openssl genrsa -out server.key 2048 
openssl req -new -key server.key -subj "/CN=ngrok.yourdomain.com" -out server.csr 
openssl x509 -req -in server.csr -CA base.pem -CAkey base.key -CAcreateserial -days 10000 -out server.crt 
cp base.pem assets/client/tls/ngrokroot.crt

make release-server release-client


  编译完成后,你会在bin目录下得到两个程序,一个是ngrok客户端,这个拷到需要穿透的服务器上运行。一个是ngrokd服务端,在本地运行。


 服务器端运行命令:

/data/ngrok/bin/ngrokd -tlsKey=/data/ngrok/server.key -tlsCrt=/data/ngrok/server.crt -domain="ngrok.yourdomain.com" -httpAddr=":8081" -httpsAddr=":8082" -tunnelAddr=":8083"

#上面端口都可以改,记得iptables放通响应端口访问


 客户端运行命令:

vi ngrok.cfg
server_addr: ngrok.yourdomain.com:8083
trust_host_root_certs: false

chmod +x ./ngrok
./ngrok -subdomain test -proto=http -config=./ngrok.cfg 80
#这样在外网通过访问test.ngrok.yourdomain.com就能通到你的内网服务器80端口了,即便没有公网地址

#通22端口或者其他tcp端口执行下面命令,界面会输出分配的外网端口,直接用对应工具访问ngrok.yourdomain.com加上端口就可以了,同样记得服务端要开相应端口访问
./ngrok -proto=tcp -config=./ngrok.cfg 22


PS.我卡在下面下载很久,假如你的git版本太老或者是yum装的,在编译ngrok的时候就会一直卡在

gopkg.in/inconshreveable/go-update.v0  (download)

#或者卡在

gopkg.in/yaml.v1 (download)

#然后装新的git就可以了

  

 把编译出来的32位客户端放在64位上运行时会报错

/lib/ld-linux.so.2: bad ELF interpreter

#解决方法
yum install -y glibc.i686


 ngrok功能很强大,我还在研究和学习中,欢迎交流。