一、安装go环境

1.Centos下使用epel源安装:

1

yum install golang

2.Centos/Linux下源码安装golang:

1

2

3

4

5

6

7

wget https://storage.googleapis.com/golang/go1.4.1.linux-amd64.tar.gz

tar -C /usr/local -xzf go1.4.1.linux-amd64.tar.gz

mkdir $HOME/go

echo 'export GOROOT=/usr/local/go' >> ~/.bashrc

echo 'export GOPATH=$HOME/go' >> ~/.bashrc

echo 'export PATH=$PATH:$GOROOT/bin:$GOPATH/bin' >> ~/.bashrc

source $HOME/.bashrc

安装go get工具:

1

yum install mercurial git bzr subversion

(参考:http://www.haiyun.me/archives/1009.html)

二、安装ngrok


1

2

3

4

5

6

7

8

9

10

11

12

13

cd /usr/local/src/

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

export GOPATH=/usr/local/src/ngrok/

export NGROK_DOMAIN="example.com"

cd 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 device.key 2048

openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr

openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000

cp rootCA.pem assets/client/tls/ngrokroot.crt

cp device.crt assets/server/tls/snakeoil.crt

cp device.key assets/server/tls/snakeoil.key

如果一直停留在go get gopkg.in/yaml.v1

在安装yaml的时候不能下载,无反应:

1

go get gopkg.in/yaml.v1

原因git版本太低,需>= 1.7.9.5,通过RPMForge源安装最新版本git解决:

1

yum --enablerepo=rpmforge-extras install  git

参考:https://twitter.com/gniemeyer/status/472318780472045568

生成服务端

1

make release-server

按理讲,应该就可以编译成功了,但是我发现,编译的时候很多依赖包是需要自动下载的,有一个包log4go 是在 code.google 上的,我们的XX服务器是无法访问google的,大家懂,所以我这里是这么处理的:

(1)修改源码,将该包改为 github 上的地址:

找到 /usr/local/src/ngrok/src/ngrok/log/logger.go ,第五行import中的 log 包,改为: log "github.com/keepeye/log4go" 。

编译成功后,应该可以在 /usr/local/src/ngrok/bin 下生成了一个 ngrokd 可执行文件,这就是我们的服务端了

1

bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000"


./ngrokd -domain example.com 

ngrokd服务端走的80端口

./ngrok -config=ngrok.cfg -log=ngrok.log -subdomain=test 8080

这里指向的端口8080说明客户端的网站在8080端口

三、运行客户端,新建一个文件 ngrok.cfg,内容为:

1

2

server_addr: "example.com:4443"

trust_host_root_certs: false

四、注意:安装ngrok需要有一个域名,并且DNS解析到ngrokd公网服务器上面。将ngrok客户端拷贝到内网服务器上面,在内网上编写配置文件,并且先启动服务器端,再启动客户端连接服务器。

如果客户端连接不上服务器,查看客户端日志,并且如果 域名example.com公网解析不指向现在的服务器,可以在内网hosts文件中修改,修改为现在的公网IP 解析域名 example.com