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