uname -m
armv7l
getconf WORD_BIT
32
tar -C /usr/local/ -xzf go***.gz
export PATH=$PATH:
/usr/local/go/bin
go version查看go环境是否配置正确
客户端:
./ngrok -config=ngrok.cfg start ssh
如果要同时开始80 和22端口转发 就start ssh http即可
mapping values are not allowed here
出现这个错误的是因为yaml格式不正确,谷歌定义的yaml格式太严格了,每个冒号后面都必须带有空格
服务端:
ngrokd
-tlsKey="snakeoil.key" -tlsCrt="snakeoil.crt"
-domain="ngrok.ele.com" -httpAddr=":801" -httpsAddr=":802" //推荐使用不会冲突的9021,9022
访问形式为xxx.ngrok.ele.com:801
后台执行nohup xxx &
http使用801端口,https使用802端口
供客户端连接的管道端口为4443端口
由于服务器上同时运行着IIS,故服务端Ngrok启动时无法使用80端口,所以在上面,我使用了801作为Ngrok服务器的http端口
httpAddr、httpsAddr 分别 用来转发 http、https 服务的端口,ngrokd 还会开一个 4443 端口用来跟客户端通讯,注意设置防火墙使端口开放。
./ngrokd -domain="ngrok.ele.com" -httpAddr=":801" -httpsAddr=":802"
[14:17:55 UTC 2018/01/03] [INFO] (ngrok/log.(*PrefixLogger).Info:83) [metrics] Reporting every 30 seconds
[14:17:55 UTC 2018/01/03] [INFO] (ngrok/log.(*PrefixLogger).Info:83) [registry] [tun] No affinity cache specified
[14:17:55 UTC 2018/01/03] [INFO] (ngrok/log.Info:112) Listening for public http connections on [::]:801
[14:17:55 UTC 2018/01/03] [INFO] (ngrok/log.Info:112) Listening for public https connections on [::]:802
[14:17:55 UTC 2018/01/03] [INFO] (ngrok/log.Info:112)
Listening for control and proxy connections on [::]:4443
如果不想买SSL证书,我们需要生成自己的自签名证书,并编译一个携带该证书的ngrok客户端。
openssl genrsa -out rootCA.key 2048
openssl req -new -x509 -nodes -key rootCA.key -days 10000 -subj "/CN=ngrok.ele.com" -out rootCA.pem
openssl genrsa -out server.key 2048
openssl req -new -key server.key -subj "/CN=ngrok.ele.com" -out server.csr
openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -days 10000 -out server.crt
将证书文件复制到指定位置
cp rootCA.pem assets/client/tls/ngrokroot.crt -icp server.crt assets/server/tls/
snakeoil
.crt -icp server.key assets/server/tls/
.key -i
编译服务器端与客户端
export GOPATH=/home/ngrok //clone的代码目录
服务器端为linux-x86-64
export GOOS=linuxexport GOARCH=386//应该是amd64make release-server
ls bin/linux_amd64/
ngrokd
需要运行在公网服务器上。
可以指定为
amd64
(64-bit x86) 、
386
(32-bit x86) 、 和
arm
(32-bit ARM),可见Go语言的跨平台能力相当彪悍。
树莓派为linux-arm架构,重新声明
go env
里的变量
export GOOS=linux
export GOARCH=arm
make release-client
ngrok是一个反向代理,通过在公共的端点和本地运行的Web服务器之间建立一个安全的通道
现在假定我的本地已成功部署了一个网站,访问地址为127.0.0.1,想内网穿透后被公网上的用户访问,一般步骤如下:
Tunnel Status变为online
客户端就是您的web应用程序所运行的主机
#指定子域名为
ngrok
(
(ngrok是你自定义的域名前缀)
),采用http协议和使用80端口(需要转发的端口)./ngrok -subdomain
rpi
-proto=http -config=ngrok.cfg 80
这个子域名是任意写的
会解析成rpi.ngrok.ele.com
如果写成demo,则解析成demo.ngrok.ele.com
或
server_addr: "ngrok.ele.com:4443" 注意冒号后面有空格
trust_host_root_certs: false
就用这个配置,不要用start ssh http那种了。
执行ngrok:
$ ngrok -subdomain rpi -config=ngrok.cfg 80
这样应该访问的是 rpi.ngrok.ele.com
由于go语言的特性,在编译时直接生成机器码,所以在运行过程中并不需要go的环境
修改server监听端口了。将-tunnelAddr由4443改为443
-tunnelAddr=":443"
systemctl stop firewalld
配置文件示例
./ngrok -config=ngrok.cfg start ssh