@cyysu
2017-10-06T07:04:36.000000Z
字数 2729
阅读 1077
- 时间:2017年9月6日
- 作者:MJ-DZ chen yuan
- 邮箱:chenyuan@ypmingjiang.cn
- 描述:ngrok server以及client编译以及嵌入式ARM平台移植
- 版本:V2.0
内网映射
ngrok 是一个反向代理,通过在公共的端点和本地运行的Web服务器之间建立一个安全的通道。软件下载地址以及go,这里官方建议是1.4,本软件提供1.6版本,在生成客户端环境时需要注意一下如何配置。
链接:http://pan.baidu.com/s/1mhAWJLQ 密码:y40c
export GOROOT=/usr/local/go
export GOBIN=/usr/local/go/bin
export PATH=$PATH:$GOBIN
export GOPATH=/usr/local/src/ngrok/
export NGROK_DOMAIN="ngrok.mj.com"
这里有一点需要注意的是:
如果我们采用源码安装方式安装go时,需要将
sudo cp /usr/local/go/bin/go /usr/bin/go
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
# 在/usr/local/src/ngrok/Makefile中修改GOOS以及对应的GOARCH
sudo make release-server
# 正常情况下是完全可以编译过去的,也不是报错,报错的可能性是权限的问题。
#首先生成一下对应目标平台的环境
sudo GOOS=windows GOARCH=amd64 ./make.bash
# 对应ARM平台客户端生成
sudo GOOS=linux GOARCH=arm ./make.bash
重点来了!!!!!!!
重点来了!!!!!!!
重点来了!!!!!!!
如果你的版本是1.4以上的那么这个时候肯定会报错的。报错信息如下:
mj@DZ:/usr/local/go/src$ sudo GOOS=windows GOARCH=amd64 ./make.bash
[sudo] mj 的密码:
##### Building Go bootstrap tool.
cmd/dist
ERROR: Cannot find /home/mj/go1.4/bin/go.
Set $GOROOT_BOOTSTRAP to a working Go tree >= Go 1.4.
解决方案!!!!!!
解决方案!!!!!!
解决方案!!!!!!
cp -rf /usr/local/go /usr/local/go1.4
export GOROOT_BOOTSTRAP=/usr/local/go1.4/
GOOS=windows GOARCH=amd64 ./make.bash
#然后就可以进入ngrok中编译我们的客户端了。
sudo make release-client
mj@DZ:/usr/local/ngrok/bin$ tree .
.
├── go-bindata
├── linux_arm
│ └── ngrok
├── ngrok
├── ngrokd
└── windows_amd64
└── ngrok.exe
2 directories, 5 files
# 服务端运行程序
mj@DZ:/usr/local/ngrok$ sudo bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000"
[14:25:14 CST 2017/09/06] [INFO] (ngrok/log.(*PrefixLogger).Info:83) [registry] [tun] No affinity cache specified
[14:25:14 CST 2017/09/06] [INFO] (ngrok/log.(*PrefixLogger).Info:83) [metrics] Reporting every 30 seconds
[14:25:14 CST 2017/09/06] [INFO] (ngrok/log.Info:112) Listening for public http connections on [::]:8000
[14:25:14 CST 2017/09/06] [INFO] (ngrok/log.Info:112) Listening for public https connections on [::]:443
[14:25:14 CST 2017/09/06] [INFO] (ngrok/log.Info:112) Listening for control and proxy connections on [::]:4443
# 客户端生成配置文件
server_addr: "ngrok.cyysu.com:4443"
trust_host_root_certs: false
# 客户端运行
./ngrok -config=./ngrok.cfg -subdomain=test 80
# 参数解析
-config 就是上面配置文件ngrok.cfg的路径
-subdomain 就是需要分配域名的前缀部分
80 就是本机websever的端口,比如apache监听的端口,一会ngrok会将请求映射到该端口上。
# 运行正常会出现如下
Tunnel Status online
Version 1.7/1.7
Forwarding http://test.ngrok.cyysu.com:8000 -> 127.0.0.1:80
Forwarding https://test.ngrok.cyysu.com:8000 -> 127.0.0.1:80
Web Interface 127.0.0.1:4040
# Conn 0
Avg Conn Time 0.00ms